Friday, September 23, 2022

Software Architecture in DevOps Age


I started my architecture journey designing and solutioning a monolithic system. It was the era of layering software architecture where system was separated as data layer, business layer, application layer, and presentation layer. Lengthy design phases for software architecture was a norm back then. I as an Architect, mainly involved in collecting high-level requirements, creating governance model, reviewing enterprise standards, documenting, communicating through architecture diagram, identifying design patterns, and designing components to use in the software development process. Software development only started after all that elaborative design process. There was a strong belief that architecture and design must completely end to start the implementation process. The high coupling resulted by this model created dependencies between teams and eventually slowed down the deliveries.

During 2013-14, when our team introduced to Agile, we had concerns and questions. As an architect my apprehension was to know if traditional architecture fit in agile space. The concerns I had were:




  • How to refactor if latter sprints changes architecture?
  • Will short term plan introduce major structural changes in future? How to handle them?
  • How can architect effectively communicate with small but more number of Agile teams?
  • How do we get long term client requirement road map visibility?

Service Oriented Architecture
As our product was much stable and there was not many architectural changes till the end of 2014, newly introduced Agile teams had not many challenges like architecture refactoring. This period of transition helped me to work on my fears. During this time, I got introduced to domain driven design which helped me decomposing the layers system further into services. This was my first level discovery to work on multiple functional aspects in parallel which would fall into different logical categories. Helped me in shifting from large programs toward multiple autonomous teams. 

DevOps Journey
The year 2017 got an opportunity to architect a large scale solution from scratch. I started this work with group of Architects, and Engineers who were ready adapting to Devops model. 
The architecture process I explored with DevOps model are: 
1. Priorities : Planning scope was primarily focused on the our high priorities based on assessed business capabilities. This helped us to start with simple solution and refining that incrementally and iteratively. The essence was to do enough architecture to get through the next sprint. The architecture design is iterative based on comments from the planning ecosystem of organization and also based on new information and changes that may occur in the organization’s environment while planning and architecture are occurring.
2. Automation Everywhere : Right from infrastructure provisioning till running testcases helped removing error prone manual efforts 
3.  User Oriented Design : By focusing on the user journey, it helped collecting the non functional requirements. 
4. Collaboration : As an Architect, I was part of every squad owning their delivery commitments. 
5. Architecture Review Board : The board comprising of Architects, and Product Owners as committee members, did review every new feature and epic to provide 360 degree feedback and perform impact analysis. 


Paradigm Shift in Design Process 

Thinking from old styled complete up-front design to priority based minimum viable architecture brought various changes in the design process. The challenges in terms of non clarity in roadmap, unknown usage requirement, changing requirements, cost and system’s evolvability introduced risks in the design. This called for a design that provides cushion to all the above challenges. The design strategies helped are: 

  • Separation of concerns: Separating a software system into distinct solutions, such that each section addresses a separate concern
  • Modularization: Decomposing a system into modules driven by information hiding and separation of concerns
  • Loosely coupled interfaces: Interaction of the systems were based on open standards like API to reduce the interdependence between the systems.
  • Event driven: Real time data flow between the loose coupled systems
  • Distributed Systems: Taking full advantage of modern multi core processor technologies, systems are distributed to run concurrently to support horizontal scaling and elasticity to varying workloads.  
  • Non-functional requirements:Considering important aspects of non functional requirements is the key in designing a system for long term with minimal core changes. 
  • Meta-modeling: Modeling the concepts and relationships of a modeling language/notation
  • Augmented Intelligence: Rule engines to lower the cost of changing the behavior of the system



Technology to adapt Devops effectively
It would have been harsh Devops journey without the support of great set of modern technology and tools.  Some of the tools immensely helped me are:
  • Cloud Native Stacks
  • Containerization
  • Test Automation Tool
  • Pipeline Management Tool
  • Code Scanning Tools
  • Deployment Automation Tool

Out of control areas

There are numerous aspects that are not under direct control of Architects. Changing business dynamics, customer interests shift, disrupting technologies etc. can happen anytime and architecture should be able to consume it with minimal refactoring effort. Few areas that I experienced design refactoring are for: 

  • Core feature replacements or new additions
  • Obsolete technologies replacement
  • The sunset of external system that we were depending for data


Summary

Just like everyone in the Devops team work across the entire application lifecycle, from development to deployment, Architects also plays key role in every aspects of software lifecycle in DevOps culture. As an Architect, by managing change and complexity, I ensured the objective of Devops to deliver the software end product quickly and efficiently are successfully met. As I mature with Devops, focus is low on the tools, automation, and orchestration. Instead, it is more about communication, collaboration, and a collective effort to remove bottlenecks.



Cool DevOps industry leaders I follow
@danielbryantuk
@JayneGroll