by Álvaro Ruiz de Mendarozqueta
Software architecture and design determine software behavior. The behavior must satisfy the customer’s requirements including quality attributes.
Software as a system
Given the definition of a system as a set of elements, dynamically related, that interact by exchanging information and energy to obtain a result providing information and energy; it is easy to apply the definition to the software.
Systems theory says that the behavior of the system is determined by its structure. The structure of the system is determined by the architecture and design.
Code and fix as emerging design
If we code the software based on knowledge and understanding of the participants, but without architecture, the design will be the one that arises from the coding itself. Expecting that the behavior will be the required one it will take a lot of effort and constant modifications by trial and error. That way is not the one that indicates the agile principle that says: “The best architectures, requirements, and designs emerge from self-organized teams”.
Code and fix is not what a self-organized team does, and the behavior of the system will be the one determined by the code that comes out by trial and error.
The architecture that emerges is the result of refining the initially proposed architecture, or intentional architecture, with the feedback of the developers in each iteration, verifying the quality of the design and code.
The design does not emerge by heavenly inspiration.