Simplicity In Design
In my last post on architecture, I touched on the need for design simplicity. Simplicity is one of the 12 agile principles:
Simplicity – the art of maximising the amount of work not done – is essential.
So it must be important. But how do we get there? Why, when simplicity is so essential, do we keep developing complexity? Antoine de Saint-Exupére gives us a clue -
Perfection in design is achieved not when there is nothing more to add, but when there is nothing more to take away.
When we do design, we tend to take an additive approach. We look at a problem and add features until we consider the problem solved. The problem is that we tend to get carried away and add way more features than we need. We look at the initial problem and in solving that one, we lump together a bunch of related problems and solve those as well. We also have a habit of solving a whole bunch of problems that aren't actually problems yet but might be one day, just in case.
Good design, great design, is the art of looking at a solution and paring it down the the base essentials - the minimum we need to solve the problem. Let's look at a few examples of great design. The first one has been around for a very, very long time.