Part of my role at work is ‘software architecture’ which is a somewhat nebulous term and often crosses in to software design. In an agile environment it can’t cross that boundary, however, because it is up to the teams delivering the feature to buy into and create the design for the software. So with the help of the book “Software Systems Architecture” we’re now defining the architecture as a process to find unwritten requirements, constraints, questions, and assumptions that will restrict the design space to only those designs that meet all the criteria and constraints.
The book is quite good, although it is written from a more ‘waterfall’ type mentality. The ideas it presents are geared towards how to effectively communicate an architecture. The authors present a set of six distinct 'views' of the system. Each view is targeted at a different set of stakeholders (which may include the end user, operators, developers, installers, third party developers, etc.) and the intent is to present only the information the stakeholder cares about in the view. The book describes a template for each view including examples of what one is to consider, a checklist, and a section of common mistakes and pitfalls which is quite useful.
The views they describe are:
- Functional: Describes the systems functional elements, their responsibilities, interfaces and primary interactions
- Information: Describes how the system stores, manipulates, manages and distributes data
- Concurrency: Maps functional elements to concurrency units to identify where parallelism can and will occur
- Development: Describes how the architecture supports the development process including building, testing, and maintaining the system
- Deployment: Describes the target environment into which the architecture will be deployed including processing nodes, network interconnections, bandwidth availability, and disk storage requirements
- Operational: Describes how the system will be operated, administered, upgraded and supported after initial deployment.
So I'm experimenting with this format by trying to describe a current feature (EPG Data Delivery) along with an upcoming required enhancement to that feature. We'll see how it goes...