This is fairly old, but absolutely fascinating talk (well, fascinating in my opinion of course) by Guy Steele about the design of a new language. The main principle that Guy highlights is that language should start small and be extensible. The talk itself is about Java, but the same ideas and principles can be applied to any other language.
For example, the exercise that I find very interesting and mentally stimulating is reading (or for that matter listening) Guy’s talk and in the same time thinking about the evolution of BPMN. Try it ! It gives a lot of food for thought.