Software Design vs Architecture: The ultimate showdown

Software Design vs Architecture: The ultimate showdown

When I first heard about software architecture, I was intrigued. What was this mysterious and elusive concept that seemed to be so important for software development? How did it relate to software design, which I was a bit more familiar with? Was it a higher level of abstraction, a different perspective, or a completely separate discipline?

I decided to embark on a quest to find out the truth about software architecture and design. Along the way, I encountered confusion, chaos, and some clarity at the end. In this blog post, I will share with you what I learned about:

  • What is software architecture?

  • What is software design?

  • What are the similarities and differences between these two concepts

What is architecture*

Architecture is often associated with the high-level arrangement and interaction of a system's components and how they work together to solve a certain problem for example the blueprint of a system, showing how the different parts fit together and cooperate to solve a certain problem.

What is design*

Software design is often associated with the low-level decisions and arrangement of structures to solve a particular problem ie the nuts and bolts of a system, showing how the individual elements are constructed and arranged to solve a particular problem.

What are the similarities and differences?

Let's divert a bit from software

One challenge with software is that we cannot touch it and see it on our walks on our way to the shop, well you get the idea. So let’s use an analogy that we are all physically familiar with, buildings.

The building above had an architect who probably started with something like this:

The architect came up with a high-level overview of the layout of the rooms, the structure of the building but also some very low-level details such as how thick the wall will be, where the piping and electrical conduits will be placed and so much more. It was a collaboration between the high-level details and the low-level details that brought the building to life!

So you mean to say that houses and software are the same?

Well no, not really, but I believe that we have been building houses far more than we have been developing software so maybe there is something that we can learn from these house architects after all.

The low-level details and the high-level structures all work together to define the shape of the system. The low-level details and the high-level structures are like yin and yang, they complement each other and define the shape of the system. You can’t have one without the other!

They, therefore, form part of continuous decisions from the highest to lowest levels of the system that keep on slowly, or sometimes quickly changing over time to define the shape of the system.

So what is the goal of all this?

Well, after all the confusion and chaos. What I learned in this adventure is that these decisions all should have one goal: to minimize the human resources required to build and maintain the system over time. This is a characteristic of good design quality.

Conclusion

Software architecture and design are two concepts that are often confused and misunderstood, but they are both essential for creating good software systems. They are not mutually exclusive, but rather complementary and interdependent. They cover a spectrum of decisions that range from the high-level to the low-level, and that aim to make the system easy to build and maintain. By understanding the definitions, differences, and similarities of these two concepts, you can improve your skills as a software engineer and create better software systems.

I hope you enjoyed this learning adventure with me and learned something new, I definitely did.

You can learn more through the book:

  • Clean Architecture - A Craftsman’s Guide to Software Structure and Design by Robert C. Martin

If you have any questions or comments, feel free to leave them below. And if you liked this post, please share it with your friends and colleagues. Thank you for reading! 😊