"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."<p>But if you implement a DSL and associated debugging tools and other niceties you can write your code as cleverly as possible AND be smart enough to debug it because it's so easy. But beware of that phase where you have a nice language but very leaky without supporting tools because it hurts!