Everybody is talking about simplicity and its promise of leading us to create great products. The underlying assumption here is, that simpler products are more accessible to everyone: the customers, the users, and last but not least the developers themselves. Therefore, simple products are supposed to be easier to sell, a lot easier to use, and easier to maintain.
Maybe the most interesting fact about simplicity is that everybody seems to agree with it and to support it. At the very least, everybody I’ve talked to personally, agrees 100% when being asked directly. Still, I doubt there are many people and especially developers being as serious about it as they’re ought to be.
Simplicity is prerequisite for reliability. – Edsger W. Dijkstra
As a software developer, I have a special interest in maximizing a product’s reliability and minimizing its required maintenance work. Most products start out simple with the minimum of features necessary to deliver just enough value to customers to make it viable. Due to the fact that the complexity of most products tends to increase over time (more features get added), the goals of reliability and maintainability become harder and harder to reach.
Why do so many developers loose sight of the narrowly focused problem they set out to solve with their product in the first place? Well, the best answer I could come up with can be summarized as follows: Simple products are much more difficult to create, than complex products. While this may sound contradictory at first, I assure you that it makes perfect sense. Let me explain…
It can be very painful to keep your successful product’s focus, because you need to have the ability to say no. When you have the confidence to say no to yourself and your customers, you don’t have to add every new feature you thought about or a customer asked for. “The customer is king” may be true, but that doesn’t mean he’s always right and neither does it mean that you have to accommodate his every whim.
On the other hand, if many of your customers (as opposed to just one) are asking for a particular feature to be added, you should probably take some time to think about it. Just make sure you understand in detail why they are asking for it before implementing anything.