Simplicity: Keep It Simple Stupid (KISS)
Why is this relevant to you? Because by definition there are only so many people that can be the smartest -- the rest of us are all less than that -- in other words, "not that smart". And while I have worked with some smart developers, I have also seen many more that are "not that smart", often more so (or is that lesser) than I! Heck, as someone who spends a lot of time in forums and newsgroups answering questions (learning in the process myself), I can assure you that there are even some pretty "stupid" developers out there. My point is that if you expect your software to be understood, and thus used, whether it be the external API or the internals for maintenance and extension, you really need to be targeting the "not so smart" developers too.
So what is simplicity? Ockham's Razor says (paraphrased) that the simplest explanation that works is the most likely to be the best. Einstein said "Everything should be made as simple as possible, but not simpler". In software, Kent Beck defines four traits of simplicity: passes all tests, reveals intentions, no duplication, and smallest codebase. In other words, "simple" software should do what it is supposed to do, but no more, and it should do it with the least amount of code possible, while still being easy to understand. Finally, Martin Fowler said "... a complex design is more difficult to understand than a simple design. Therefore any modification of the system is made harder by added complexity." I think these sum up simplicity.
Why did I finally choose to blog about simplicity? Because I'm seeing far too much complexity out there. And finally, today in the forums there was actually someone trying to say his product was better than others because it was larger! I want the opposite -- I want fewer classes and a much smaller external API so that my "users" will quickly understand how to use my product, or a simpler UI if its an end-user application. I also want my internals to be minimal and obvious so that others (not to mention myself) can maintain and extend my software. That last point is why I think I've been able to make a dent in the community with some of my ideas -- they get the job done and just as importantly are easy to extend when you need more than I've done!
I'm going to end here today -- and keep this post "simple". I could add a lot more, but I think I'll make this into a series of posts instead. That will also give some of you the opportunity to tell me what you think about simplicity, and it will probably look better in my stats. :)