Every architect should ask himself this question: is the architecture I am proposing necessarily complex or am I making the solution hard?

The accidental complexity is about introducing complexity, intentionally or not, into a system that is not hard by nature. This architecture, in a long term, can explode the maintainability cost and make the extensibility of the system you are building very hard.

On the other side, the essential complexity is inherent to the problem. It reflects the complex nature of the problem we are trying to solve.

The main rule to keep in mind is to not make your system complex until the complexity is required.

I saw the architecture complexity introduced in different projects. A good example is adopting microservices even if the monolithic layered architecture is enough to support the requirements. Another example is this tendency to make architecture decisions based on technological thinking instead of architectural thinking which is much more focused on the problem we are trying to solve.

Reference:

No Silver Bullet — Frederick P. Brooks, Jr. http://worrydream.com/refs/Brooks-NoSilverBullet.pdf

About the Author

My name is Adel Ghlamallah and I’m an architect and a java developer.

View Articles