Software Architecture
A software architecture describes components and their interaction and exists on different levels: from the inner architecture of a single application to a complex enterprise architecture, the same principles are applied again and again. We therefore say: "Architecture is recursive". Incidentally, the same principles that make up a good architecture can also be found on a smaller level in object-orientation, where they ensure maintainable code.
An architecture is determined less by functional requirements than by quality goals, which are often also called "non-functional requirements". High performance requirements, for example, suggest tight integration of components, ideally within a process, to avoid inter-process communication or even network communication. High requirements for scalability require the decoupling of certain services or components in order to be able to scale them independently.
In agile software development, architecture does not become less important or even obsolete, but evolves as an emergent design and must be consistently adapted and further developed, for example through consistent refactoring .