Look online or survey employees at software firms about Software Architects and Architecture and you'll get a range of descriptions and probably some mixed reviews. Yet, the cost of 'poor architecture' and other technical debt was estimated at 1.5 trillion dollars in 2022 by CISQ. In this series, I'll attempt to demystify software architecture and architects, how they create business value, and explore ways we can build more sustainable software.
Architects architecting architectures
Software Architecture can be broken up into three distinct concepts.
While all three are required to maintain and evolve software of any complexity, most developers and organizations think mostly of the process when referring to Software Architecture, and don't fully understand how it affects the bottom line.
How value is created
To understand how Software Architecture fits into the business of a typical software company, let's look at the big picture and follow the money. Most software products make money when end users want to use it, costs money to operate (scales with users), plus the initial cost to develop it. The figure below includes these relationships as well as our three earlier definitions.
We can see that Architecture impacts the business indirectly, by influencing the implementation that developers build. Examples include making the system...
-
Performant, requiring less hardware // reducing cost per user
-
Understandable, simplifying development // reduces dev time per change
-
Reliable, satisfying customers // increases usage
Improving the Architecture of a System
To influence an implementation's architecture, a company must invest in the process of Architecting. The time required and net impact to the system depend on the current complexity, developer skill and efficiency of the process.
-
If successful, over time the complexity will decrease, skill will increase, and the cost will become small.
-
If unsuccessful, or neglected, complexity increases, skill can decrease, and it may be required to re-implement parts of the system, increasing costs.
Improving the process of Architecting is the responsibility of an Architect. To do so they must monitor and understand the current Architecture over time, identify improvements, and leverage the Architecting process to get feedback and influence developers to implement it. Although an Architect can oversee large systems requiring many developers, their effectiveness depends heavily on skill and experience. To be effective, an Architect must:
-
understand the current implementation and the business - costs, pain points, strategy
-
be familiar with relevant patterns, libraries and foundational technologies - including developer familiarity / learning curve
-
communicate complex concepts both en masse and one-on-one with developers
-
have