Over-engineering is something every designer, every architect should be beware about. In the essay The Second-system Effect, Frederick Brooks points out one common pitfall - when the architect designs his second system, it is the most dangerous system he will design, because he will try to incorporate everything that he missed in the first system. I have observed this to be very true in many occasions. Over a period, architects get out of this. Slowly they tend to build balanced, and mostly conservative systems as they age in the profession.

I use a principle while building systems - Information Technology systems or not. Probably it comes from my training as a Civil Engineer, I often use the term “Restrained Design” to refer to this. It is about minimizing the design, or creating an understated design, or sometimes no apparent design at all.

When I build web applications, I try to leave the framework code as is. Overrides are usually very specific, and arranged in a modular fashion. Plugins are few. Less adventure in the code. Minimal or no meta-programming. More whitespace on the screen. Predictable behavior, consistently repeated across the interfaces.

Such design helps build systems that are easier to manage - both for users and for developers. The learning curve is limited to a few interfaces. Building on, or upgrading the parts are relatively easy and straight-forward.

Early on in the career, I was quite influenced by the book “The Design of Everyday Things”, by Don Norman. And he has recommended a recent book that echoes the “Restrained Design” sentiment. “FIRE: How Fast, Inexpensive, Restrained, and Elegant Methods Ignite Innovation”.

Out of various things in the book, I liked one statement - “No more than one miracle per project”.