So How’s It with Architecture - Up-Front Design or Evolutionary Architecture?

Table of Contents

So How’s It with Architecture - Up-Front Design or Evolutionary Architecture?

Where does architecture currently stand? We can say that there are two classic approaches:

  • The classical approach, which requires carefully planning as many details as possible (up-front);
  • The agile approach, which dictates making decisions as late as possible and developing architecture through refactoring.

How does this usually happen in projects? In many cases, a more or less detailed project is created in the up-front style and remains that way. On the other hand, relying solely on organic development of good architecture through natural evolution usually also fails. In large projects, it is extremely risky as it often leads to local solutions that should be rewritten at some stage (which usually does not happen).

In practice, a mixed approach works best. At the beginning of a project, release, or iteration, a concept and design of a solution is created, which serves as the basis and reference point for project work. This project does not have to be, and even should not be, exceedingly detailed. On the other hand, we should not assume that what was devised at the outset will be a perfect solution. Consequently, during the project work, we make ongoing local modifications to the design assumptions through refactoring.

By doing so, we obtain a natural process of architectural development. Initially, it is pre-designed, which prevents us from wasting time and resources on evolutionary wandering. We use evolution to improve the original design. If we link this with the process of Natural Order refactoring, we are in luck! More on that in future posts.

The process sketch looks as follows:

(Sketch image removed)

(Text translated and moved from original old blog automatically by AI. May contain inaccuracies.)

Related Posts

Code Cleanliness: More Than Just Refactoring Part 1

Initially, my intention was to create an article about refactoring. However, the more I pondered the subject, the clearer it became that I would not be writing solely about refactoring. It’s about something much more significant—conveying a vast amount of knowledge, essentially experience, related to code creation. Code that not only works or is well-designed but is most importantly easy to read. When we achieve this skill, we stand on the threshold of professionalism. Programming professionalism.

Read More

Technical Leader Worries: I Want to Build Trust in My Team but I Don't Want Them to Do What They Want

Understanding Trust in Leadership

Trust is a very big word and very often misused. Many leaders, in an attempt to build trust, feel obliged to allow people to do anything they want. However, they also wish to have some impact on how a task is completed.

Read More

Make Room for Progress...

From the collection Poetry for Project Enthusiasts

Make Room for Progress

There is never a good time for the first child,
There is never a good time for the second child,
There is never a good time to build a house,
There is never a good time for renovations,
There is never a good time for a wedding,
There is never a good time to introduce refactoring,
And there is never a good time to start writing unit tests.
In each of these cases, you simply need to make a decision,
Start doing it, and time and resources will appear,
Because they will have to…

Read More