Architecting a software system is an intricate and multifaceted process that extends far beyond the mere creation of diagrams or the application of conventional architectural styles like n-tier or event-driven architectures. This complexity is rooted in the fact that designing a robust software architecture demands a harmonious blend of technical acumen, strategic foresight, and, importantly, creativity. In this article, we explore the nuanced process of architecting a software system, emphasising the critical role of creativity, the iterative use of views and perspectives, and the importance of aligning with ISO and IEEE standards to produce a high-quality architectural description. Moreover, we discuss the placement of architectural description within the software development lifecycle, underscoring its significance during the discovery and alpha phase to prevent its often overlooked value in product-led development.
Contrary to the common perception that software architecture is solely about drawing system diagrams or adhering to predefined patterns, the process is inherently creative. It involves envisioning a system that not only fulfills the current requirements but is also adaptable to future changes. Creativity in software architecture manifests through the exploration and prototyping of innovative solutions and architectural patterns tailored to the unique needs of each project. It requires architects to think beyond traditional boundaries, incorporating emerging technologies and methodologies to design systems that are both resilient and scalable.
Iterative Views and Perspectives Approach
One of the core principles in creating a high-quality architectural description is the iterative application of views and perspectives. This approach, advocated by standards like ISO 42010 and IEEE 1471, involves developing a series of architectural views that address the concerns of various stakeholders. By iteratively refining these views based on stakeholder feedback, architects can ensure that the architecture accurately reflects the system’s requirements and constraints. This process promotes a deeper understanding of the system’s goals and challenges, leading to a more comprehensive and aligned architectural description.
Adherence to ISO and IEEE standards in the architectural process is paramount for ensuring the quality and consistency of the architectural description. These standards provide a framework for documenting architecture in a manner that is clear, coherent, and comprehensive. By aligning the architectural description with these standards, architects facilitate better communication among stakeholders, reduce ambiguities, and ensure a shared understanding of the system’s architecture. Furthermore it ensures continuity. Several times I have been contracted for a short time to produce an architecture, and following this approach ensures that other architects can pick up where I left off. This alignment is crucial for the successful implementation and evolution of the software system.
Architectural Description in the Software Development Lifecycle
The Government Digital Service (GDS) in the UK provides a framework for developing digital services, which is broken down into distinct phases: Discovery, Alpha, Beta, and Live. This phased approach ensures that digital services are designed to meet user needs and are technically feasible, financially sustainable, and scalable. Incorporating architectural description early in the software development lifecycle, particularly during the discovery and alpha phase, is critical. Introducing architectural considerations at this stage ensures that key decisions are informed by a thorough understanding of the system’s architecture. It allows for the early identification of potential risks and challenges, enabling more effective risk management and planning. Neglecting the architectural description until later stages is something I have seen many times before, and can lead to misalignment between the system’s design and its intended objectives, resulting in costly rework and delays.
Discover phase tasks
1. Identifying Stakeholders
The first step in writing an architectural description is identifying the stakeholders of the system. Stakeholders are individuals or organisations with a vested interest in the development and success of the software system. This group can include end-users, developers, project managers, investors, and any party that will interact with or be affected by the system. Understanding who the stakeholders are is crucial for defining the architectural views that will be most relevant and for ensuring that their concerns are addressed in the architectural description.
2. Understanding Business and Technology Drivers
Once stakeholders have been identified, the next step is to understand the business and technology drivers behind the system. Business drivers are the business goals, objectives, and requirements that the system needs to fulfill. These can include increasing efficiency, reaching new markets, or improving user experience. Technology drivers, on the other hand, are the technological requirements, constraints, and opportunities that influence the design of the system. This includes considerations such as scalability, security, and the choice of technologies and platforms. Understanding both business and technology drivers is essential for ensuring that the architectural description aligns with the strategic goals of the organisation and the technical realities of software development.
3. Establishing Architectural Principles
Architectural principles are the fundamental rules and guidelines that dictate the architectural decision-making process. These principles are derived from the business and technology drivers and serve as a framework for making architectural decisions. They ensure that the architecture remains consistent, maintainable, and aligned with the organisation’s goals and constraints. Common principles might include modularity, to ensure the system is maintainable and extensible; security, to protect data and ensure privacy; and interoperability, to ensure the system can work with other systems and technologies.
The outcome of the Discovery phase is a clear understanding of the user needs and the decision on whether to proceed to the Alpha phase to start developing solutions.
Alpha phase tasks
With stakeholders identified, drivers understood, and principles established, the process moves to developing key architectural views. The ISO/IEEE standards suggest structuring architectural descriptions around views or viewpoints that address specific stakeholder concerns. Typically, an architectural description includes several key views:
- Context View: Establishes the scope of the system by identifying and illustrating its relationships with external entities such as users, systems, and external services
- Functional View: Details the system’s capabilities, breaking down how it processes input and delivers output to meet user and stakeholder requirements.
- Information View: Focuses on how data is managed, stored, and utilised within the system. It outlines the data architecture, including data entities, their relationships, and data flow throughout the system.
- Development View: Describes the system’s software architecture in terms of software layers, components, and modules, highlighting the organisation of the software development environment.
- Deployment View: Illustrates how the software maps onto the hardware, showing the distribution of components across different nodes and the physical connections between them.
- Operational view: Focuses on how the system will be operated, monitored, and maintained post-deployment. This view includes operational processes, monitoring tools, and maintenance procedures to ensure the system’s reliability, performance, and security over time.
The creation of these views is generally an iterative approach informed by the creation of prototypes, technical exploration and testing with users. The outcome of the Alpha phase should be a decision on the best solution to develop into a working service captured in an architectural description, which is then taken forward into the Beta and Live phases.
The Beta phase
During the development of software systems it is important to understand that the iterative approach to the architectural description continues. The integration of architectural efforts with Agile and DevOps practices presents a unique set of opportunities and challenges. Agile methodologies also emphasise iterative development, customer feedback, and adapting to change, while DevOps focuses on automating the software delivery pipeline to improve efficiency and reliability. To align architectural descriptions with these methodologies:
- Embed Architecture in Agile Cycles: Incorporate architectural planning and review as part of sprint planning and retrospectives. This allows the architecture to evolve iteratively alongside the product, ensuring that architectural decisions are revisited and refined based on the latest project insights and outcomes.
- Use Architectural Runways: Develop an architectural runway that provides the necessary technical foundation for future features without overly constraining development. This approach supports incremental delivery by ensuring that the system’s architecture can accommodate upcoming changes and new functionalities.
- Leverage DevOps for Architectural Validation: Utilise Continuous Integration (CI) and Continuous Deployment (CD) pipelines not just for code but also for validating architectural decisions. Automated testing and deployment can help identify architectural issues early, allowing for quicker adjustments.
- Promote Collaboration Between Architects and DevOps Teams: Ensure that architects work closely with DevOps teams to understand operational concerns and infrastructure capabilities. This collaboration helps in designing architectures that are not only scalable and resilient but also optimised for deployment and operation.
By addressing these challenges and effectively integrating architectural efforts with Agile and DevOps, organisations can create more flexible, robust, and efficient systems that are better aligned with user needs and business goals.
The Architectural Description in Product-Led Development
In product-led development, where the emphasis is on delivering value through the product itself, the architectural description is sometimes forgotten or ignored, but it should play a foundational role. It should act as a blueprint, guiding the development team in aligning features and functionality with the overarching product strategy. A well-defined architectural description ensures coherence and consistency in the product’s development, facilitating scalability, maintainability, and extensibility. Early focus on architectural considerations helps avoid fragmented development efforts and ensures that the product evolves in a manner that aligns with user needs and business goals.
Addressing Challenges in Architectural Descriptions
Creating architectural descriptions is not without its challenges. One common issue is balancing comprehensive documentation with the need for agility in development processes. Architects often struggle with how detailed the architectural description should be, aiming to avoid both under-specification, which leads to ambiguity, and over-specification, which can stifle flexibility. To mitigate this, focus on creating “just enough” architecture — a concept that aligns with Agile principles. This means documenting enough to guide development effectively while leaving room for adaptation and evolution based on emerging requirements and feedback.
Another challenge is ensuring stakeholder engagement throughout the architectural process. Given the diverse interests and technical backgrounds of stakeholders, it’s vital to present architectural descriptions in a manner that is accessible and meaningful to all. Utilising visual diagrams, simplified models, and clear narratives can help bridge the gap between technical and non-technical stakeholders, fostering better understanding and collaboration.
In conclusion, creating architectural descriptions is a critical yet complex part of software development, requiring a balance of technical precision, strategic foresight, and creative problem-solving. By addressing the inherent challenges in this process and strategically integrating architectural work with Agile and DevOps practices, teams can enhance collaboration, adaptability, and alignment with project goals. The iterative approach to developing architectural views, grounded in a deep understanding of stakeholder needs and driven by clear principles, ensures that architecture serves as a living blueprint that evolves with the project. As the software development landscape continues to evolve, the role of architectural descriptions in facilitating a shared understanding, guiding development efforts, and ensuring system quality and sustainability has never been more important. Embracing these practices enables organisations to navigate the complexities of modern software projects, delivering solutions that meet the dynamic needs of users and the market.