Many software developers are distrustful of architecture practices. They associate these practices with rigid and overbearing processes and with significant upfront planning and design. As a result, they believe that if they follow those practices, it may take them a long time to finally deliver something that may not even be what the customer wanted.
They would rather focus on understanding what the customer requires and deliver it using agile processes consisting of small and quick iterations.
By following these processes, some of them believe the architecture will “emerge” without requiring a conscious planning or architectural focus. Because of these beliefs, they may not think that software architecture is important and may not even care about it.
The emergent architecture approach often delivers a product that initially provides the functionality required by the customer, which is a good start.
But, without explicit concerns for the sustainability of that product, it has the potential of decay that renders the product unsupportable well before its desired retirement.
By focusing on key quality attributes such as performance, scalability, security, and resilience, an intentional approach to software architecture can help to extend the life of the product, making it sustainable over a longer period.
In the two-decade-old conflict between "big upfront designs" and agile practices, software developers have struggled to find a meaningful compromise between these two approaches and have leaned away from conscious architecture-focused activities in favor of architectural designs emerging from self-organizing teams. As a result, they often believe that software architecture is not that important.
Greater awareness of the implicit decisions they are making, and forcing these decisions to be made explicitly, can help development teams make better, more informed decisions using the empirical data they gain from their Sprints/iterations. Modern architecture practices such as Continuous Architecture and Evolutionary Architecture provide tools for making architectural decisions more explicit, enabling developers to deliver more sustainable software products.
- Comments
- Leave a Comment