Gavin has written about The Lie Of Simplicity.
I have found that the balance of making a tool successful is tough as it needs many things:
- Solves a problem in a new / better way
- A good learning curve so people can start climbing the hill
- Be convenient to do the common tasks, and possible to do the complicated tasks
That last one is key for me. EJB-QL makes it easy to do simple things, but IMPOSSIBLE to do anything real. HSQL is still pretty convenient for doing the same simple things, yet gives you the power that you need to do more complicated tasks.
This is where Java actually falls down for me (personally). I don’t find it convenient for doing small tasks, and that is where other languages like Perl/Ruby/Groovy can come in.
It also helps when it is obvious that you have gone from the simple-world into the more powerful world, and is even better if you can encapsulate that ;)