Last month in ICSA 2019 in Hamburg, Germany, Eoin Woods, CTO at Endava, gave a speech about how we can democratise software architecture.
Starting from a historical perspective, Woods described how software systems have evolved in the past three decades. In the 80’s we were all using monolithic architectures, which evolved into distributed monoliths in the next decade. With the rise of the Internet, connectivity prevailed software architecture in the 2000’s leading into our current decades software architecture where Internet is the System. The next step with IoT’s rise will be intelligent connected software architectures. The defining characteristic in modern architectures is not only defining an architecture or adhering to quality properties, but more importantly, how architecture can react and evolve to rapid business requirements changes.
Historically, software architecture was mostly completed before implementation ended or even started. It was defined by a central small group of experts, whose task was to organise large architectural components with relatively static connections between them. These experts were taking key decisions like technology choices, code structure, processes, and managing stakeholders.
Contrasting this to today’s landscape, we now have a more fluid evolving architecture. This has happened because of the rise of devops, microservices, cloud computing and agile programming which have all contributed to shorter release cycles and faster reaction to changing requirements. Smaller teams, more independently thinking and developing, and evolving constantly in an agile manner means that there is less certainty and value in making decisions early in the lifecycle.
Software architecture is still needed because stakeholders are still around; we need to decide on design tradeoffs and we have several cross cutting concerns in software. In practice, what happens nowadays is having more empowered cross-functional teams and using more lightweight descriptions for architecture than in the past. Difficult-to-understand and evolve architecture diagrams are now replaced by lightweight C4 and Architecture Decision Records diagrams. Code static and runtime analyses combined with informal documentation in the form of Wiki or powerpoint documents can substitute complex static documents. Tools like sonarqube for static code analysis or jaeger, zipkin, ELK, prometheus/grafana and NewRelic for distributed monitoring and tracing services in production can give an accurate and real time view of code and its architecture.
In contrast with the current status quo, Woods is proposing a new approach. In his opinion, architecture should be viewed as more of a skill than a well-defined role. Architecting "little and often" in a manner of a continuous stream of decisions rather than "one off" architectural diagrams is in the core of this new approach. Architecture work should be integral to every sprint and as close to the actual code as possible. An inclusive architecture group should be delivering the relevant decisions as they are needed, together with practical tests to validate them.
Overall, Agile and devops have changed how we work within the software industry, whereas cloud computing and software containers have changed the way we deploy software. From this point of view, an architect is a trusted leader and advisor in a team. This new perspective can lead to software architecture suited for the current and upcoming intelligent connected software systems era.