Why We Need Architectural Design In Software Engineering

Search for a command to run...

Love this piece! In recent years, I started to realize that there is no real field of business architecture.. a few scattered people talking about it, but it's desperately needed in businesses of every kind and size. Some consultants do seem to understand the concept, though it is much less common amongst business owners, but I do have hope!
No One Cares About Your Career as Much as You Do This year I've learned that my career is 100% my responsibility and that it's entirely up to me to make the right choices that will lead me to my desired career outcomes. Managers are responsible for t...
AI has transformed how I work as a technical writer. Large tech companies are developing and sharpening these tools, but some of them are better than others depending on what you want to accomplish. T

I've been writing professionally for 3+ years, and on this personal blog for 5+ years. Throughout this time, I've built a large network made of developers, other technical writers, solutions engineers

I’ve been writing online for almost five years, with a professional focus on technical writing for over two years. If you struggle to create technical content that is easy to digest, this article is for you. Where do I start? If you don’t know where ...

LinkedIn is the only social networking site purposely built to help job seekers. Over the years, LinkedIn has evolved by offering two types of experiences: Job searching Content creation This article will describe how to maximize your LinkedIn fo...

In the last 12+ months as a technical writer, I've worked on several projects highlighting three technical writing elements. This article will introduce you to: Information Architecture Docs-as-code Content strategy Information Architecture (IA)...

Have you ever wondered what architectural design is in software engineering and why we need it in software engineering? This article is for you.
I will outline what architectural design means and then provide some examples. I will also detail what a beginner and a senior programmer should know regarding that topic.
Let's start.
Architectural design is a plan to address scalability issues.
We deal with architectural design when planning for a green field project where the code will be written from scratch.

Architectural design answers the following questions:
What can go wrong if we do not follow a plan?
What can cause rewriting parts of the code?
How can you identify where you are in the code considering its structure?
The questions above group concrete problems that are easy to understand once we go closer to distinguishing between architectural design and when not.
The software will hit a scalability issue sooner or later without a plan for scalability.
Without well-planned and well-maintainable code (clean code), the number of bugs would exponentially rise.
Coding has a hierarchy; therefore, we will have a macro plan - the one that, for example, a junior developer receives from a senior developer to implement this.
This macro plan can be treated as one of the first manifestations of architectural design a developer encounters. We could call the implementation with clean code the micro plan.
General unscalability.
Suppose you have a prototype for one user so that you can test if the main functionality of your software works.

Then, you'll need to count how many users fit in one server instance, how to distribute data, and so on.
You need to think about scalability scenarios and plan how to address them.
Scaling out software is not just mathematically multiplying how many users we want to serve (for example) but also thinking about more advanced features, groups of features, and interaction between software parts implementing them.
The basis of long-lasting software is paying attention to not doing scalability planning for a feature that has come to our mind in the planning phase is a long shot.
We need to do that planning thinking about interaction design, or we can quickly go down the path of rewriting the code because we need to introduce scalability-friendly technology later in software development.
Related: What is "Code Refactoring"?
This is an advanced topic. However, every type of architectural design should provide a clue about a specific part of code, what it does and what other parts it interacts with.
Complications can occur: whether there are predefined interaction rules between modules, must-use coding patterns, and clean code semantics.
To navigate the code precisely, we need to know more about concepts like a monolith, distributed systems, microservices, and domain-driven design (DDD).
Besides the OOP hierarchy, modules, and subprojects, knowing more about these systems can help you deal with and extend complex systems as a developer.
This article has given you a brief understanding of architectural design.
You can find an easy-to-follow pet project-driven illustration in ProScala Podcasts in Episodes Four and Five.
I hope you've found this article helpful.
Until next time!
🙋🏾♀️