Part of the key to any successful software development effort is to achieve an appropriate degree of generalization in the design.
As a developer considers different expectations and desires for the software’s behavior, the potential complexity of the software starts to escalate rapidly.
To counteract this growing complexity, the developer must look for similar patterns in these expectations, and then generalize the software around these patterns, rather than trying to instantiate every possible variation in users’ desires and expectations.
Simplicity goes beyond a term like ‘good user interface,’ which has become so broad, it has little clear meaning. Simplicity is a goal with precision. Simplicity means streamlining, pruning clutter, cleaning up presentation, and improving the initial experience with a product. But Simplicity is more than just making a cute product for technophobes. Simplicity streamlines and optimizes use, as well.
Developers who return again and again to their work, simplifying it and making it more general-purpose, produce smaller, simpler systems that deliver more to users.
…the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience.
I would not give a fig for the simplicity this side of complexity, but I would give my life for the simplicity on the other side of complexity.
When you start looking at a problem and it seems really simple, you don’t really understand the complexity of the problem. Then you get into the problem, and you see that it’s really complicated, and you come up with all these convoluted solutions. That’s sort of the middle, and that’s where most people stop…. But the really great person will keep on going and find the key, the underlying principle of the problem — and come up with an elegant, really beautiful solution that works. That’s what we wanted to do with Mac.
Simple things should be simple and complex things should be possible.