Last weekend I watched an entertaining presentation of the key differences between Simple and Easy from Rich Hickey (the inventor of Clojure).
I had already watched it last year, and found it enlightening again! In a nutshell, Rich Hickey argues that:
Simple is the opposite of complex and means one fold, one braid, one pure concept or dimension not polluted or interleaved with unnecessary aspects. Simple is an objective measurable quality of the end product, but simplicity, purity and design elegance are hard to achieve.
Easy is the opposite of hard and means near your capabilities, familiar, and requiring no effort or reflection. Easiness is relative and depends on who's building the software, as something easy for you may not be easy for me.
Unfortunately, many software projects choose to go Easy (cheap) vs Simple (hard and requiring to think harder up front). These projects create incidental complexity -- or just a mess -- by using tools and constructs that are not right for the job and drag unnecessary constraints and dimensions into the end product.
One of the things I love with open source development is that you can't choose the easy route. If you sacrifice simplicity by choosing the easy route in the open, in public, there'll be no place to hide it. Be assured that someone will get on your project mailing list and comment on the mess you've created or, even better, he'll make the effort to think harder and show the world a simpler alternative to what you've done.
Could it be one of the reasons why open source wins?