Many people have a feeling that this is something that is done initially and then does not change.

The program is quite easy to write and without much knowledge in architecture. The question is rather what will happen over time: without attention to architecture, the development of new features will practically stop. It looks like a significant number of errors (time spent on “stabilization”).

In general, architecture is the satisfaction of contradictory conditions. For example, there is a team (or it is easy to hire) that knows the language 1. At the same time, the specifics of the application are such that it would be good to use language 2. What should I choose? Just a question for the Software Architect, and his work.

In general, it is extremely important for an architect to have a “lookout”: most possible solutions should come instantly, and for each of them there should be some experience in order to understand the features. And the job is to choose and coordinate many of these choices among themselves.

This is a great similarity with the architects of buildings. At the same time, it is clear that even in such an old industry as construction, incompetent people are often found in fairly responsible roles (architect). Although there is more than enough knowledge in the industry. What can we say about the much younger field of software development.

The main difference with building architects is that software development conditionally never ends, which means that architecture constantly needs to be adjusted to new requirements and circumstances. Often a little, rarely dramatically. At the same time, the absence of these “few” rather quickly accumulates into real development problems.

Answer: almost constant refactoring, but at the same time fast (does not take much time), because it is small at a time.

Now a bit about the definition of architecture. Earlier in this note it wasn’t defined. Fowler’s old definition — “certain design decisions that are hard to change once made” — is now rather incorrect, because it’s often easier to move a project to another language and framework than to fix some problem in the current framework (for example, if it hasn’t been maintained for several years). And that is one of the hardest things to change.

I would say that architecture is a set of explicit and implicit rules used in the current project. For example, framework rules, terminology, and so on.