Software projects can become too complicated for many reasons. Developers often focus on adding more features and solutions without considering whether they are necessary. As a result, projects become complex, difficult to understand, and problematic to maintain.
Yesterday, I participated in a heated discussion about the architecture of one of the projects. The main issue was that the architecture was “over complicated,” which probably means too complex.
On the other hand, last week I attended cool workshops where we discussed C4 diagrams. There were about eight people at these workshops, and we had to draw a C4 diagram for a simple system at the first and second levels. Six people chose a microservices architecture, while two chose a modular monolith in the backend + headless frontend.
There was even a statement that microservices architecture is the “default architecture” for new projects.
I’m afraid I have to disagree with this and believe that architecture should be chosen according to the specific problem and possibilities. Microservices are great, but they also have trade-offs (like everything). Sometimes, complicating the architecture can unnecessarily make your life more difficult. Being trendy doesn’t always mean being comfortable.
The problem is also with so-called hype and trends, which sometimes make proposing simple solutions uncomfortable because someone may consider you a fool. Proposing simplicity may not bring you many followers on Twitter. Still, you can win the sympathy of your colleagues and clients who will not have to carry the baggage of technology that, besides complexity, brings to the project as much as Hector Bellerín brings to Barcelona’s game.
Keep it simple, stupid!
Simplifying things, architecture, and everything, in general, is a very cool idea known for a long time and called the KISS rule. This rule says that simplicity should be a key goal in design and unnecessary complexity should be avoided.
The KISS rule applies to every aspect of life, not just architecture. Simplicity should be a key goal in design and developers should avoid unnecessary complexity.
It’s worth noting that the KISS rule applies to software architecture and every aspect of life. Introducing simplicity into our thinking and design can help us avoid excessive complexity and achieve better results.
Hype-driven architecture
Sometimes trends and hype can influence the approach to software architecture, leading to excessive project complexity. Choosing the architecture that fits the specific problem and avoids unnecessary complexity is important. Pursuing simplicity and avoiding unnecessary complexity can bring better results than following fads and trends.
The choice of appropriate architecture is a key element of software design. Therefore, carefully analyze the problems you are solving to match the architecture to its requirements. Remember that simplicity is often key to project success.
What works well is asking questions and assessing the advantages and trade-offs of different solutions. If someone tells you that a particular solution is a cure for all ills, immediately be warned with a warning sign: “Caution, hype.”
Simplicity as a Value
Simplicity should be perceived as a value to strive for in software development. Striving for simplified architecture and avoiding unnecessary complexity can help achieve better results.
The fewer blocks you have on the diagram, the better. The less code, the fewer services, and the fewer repositories. Focus on solving the problem rather than on showing how smart you are or what you can’t come up with.
Summary
- Software projects can become too complicated, making them easier to understand and maintain.
- The KISS (Keep It Simple, Stupid!) rule states that simplicity in design should be pursued and unnecessary complexity should be avoided.
- Avoiding excessive complexity and striving for simplicity can lead to better results than following fads and trends.
- Simplicity should be valued in the software development process.
- Practical tips and strategies for introducing simplicity in software architecture:
- Consider which functionalities are really necessary and which can be omitted.
- Design with simplicity and ease of code maintenance in mind.
- Avoid excessive complexity unless there is a clear need for it.
- Choose architecture based on specific problems, not trends.
- Implement the KISS rule as a key approach to design.
- Ask questions frequently and analyze the pros and cons of different solutions.
- Focus on solving the problem rather than showing off your expertise.
Have you ever wondered what would happen if we always strived for simplicity in software design? It’s worth changing our thinking and experimenting with simpler solutions. Think about the project you are currently working on. Are there any things that are very complex and difficult? How would you work if they weren’t there?
::: tip 📣
Share this article with your colleagues to strive for simplicity and avoid excessive complexity in software design together!
:::