Task: Develop the Architecture
Make concrete decisions about the architecture to provide guidance and direction to the development work for the iteration.
Disciplines: Analysis & Design
Purpose

Provide a skeletal design to enable more comprehensive design activities to be performed coherently by the team.

Relationships
RolesPrimary Performer: Additional Performers:
InputsMandatory: Optional:
  • None
Outputs
Main Description

This task builds on the work performed during Analyze Architectural Requirements to produce a concrete approach for the main development work to follow.

The objective is to resolve the overarching issues which affect the design and development activity for the current iteration. These are:

  • To specify common mechanisms or patterns to be used.
  • To specify what, if any, use will be made of existing software assets and how they will integrate with the overall solution.
  • To specify what, if any, new software needs to be developed.
  • To ensure that the appropriate hardware and software resources are specified to support the development and testing of the solution.
  • To ensure that the architecture is useful to the project team
  • To ensure that the architecture is used by the project team

The products of this task are generally termed "high level" (in that they are applied in broad terms across solution). They are also specific (in that the technical decisions are concrete and unambiguous).

Steps
Identify architectural drivers and scenarios

Use the Vision, Supporting Requirements and Use Cases to evaluate the objectives for the architecture. You should balance the objectives for the current iteration against the overall project objectives, ensuring that the architecture can support current and future needs. Leverage developers, analysts, and testers to gain insight on balancing priorities across the team. 

Architecture drivers can take the form of one or more Architectural Mechanisms brought into scope by association to the use case scenarios prioritized for the current iteration. Other drivers may also be apparent. For example, it may be necessary to move certain aspects of the architecture from prototype to production quality implementation; or explore certain aspects of the architecture to inform future iterations.

Identify design mechanisms

Develop each architectural Mechanism into a Design Mechanism by looking at the requirements in context, refining your understanding of the requirements and capturing detail in the architecture as you go. Include each architecturally significant use case in scope. Look for commonality across scenarios as they are being analyzed and designed, then propose common components and patterns for their solution. Work with the developers and analysts to refine the understanding of the requirements and gain consensus on design mechanisms.

Identify business patterns

Analyze the use cases and identify areas of related or similar behavior and propose any appropriate generic designs. See Business Pattern. Work with the stakeholders to assure the business patterns are based on  sound knowledge.

Identify reuse opportunities

Leverage reuse of existing components by evaluating their interfaces and the behavior that they provide. Work with developers to gain consensus on the suitability of using existing components.

Identify architecturally significant design elements

Refine the key abstractions to decide on the important design elements (such as classes and subsystems) that make up the architecture, and provide at least a name and brief description for each. Add them to the Design. Gain consensus with the developers on architecturally significant design choices.

Define development architecture and test architecture

Decide on additional architecture elements that will be required for the development and test activities. Work with the developer(s) and Tester(s) to ensure that their requirements are addressed.

Evaluate results

Work with the whole team, particularly developers, stakeholders, testers, project managers, and testers, to verify that the architecture decisions are appropriate for their purpose.

Communicate and document decisions

Ensure that those who need to act upon the architectural work understand it and are able to work with it. Make sure that the description of the architecture clearly conveys not only the solution but also the motivation and objectives related to the decisions that have been made in shaping the architecture. This will make it easier for others to understand the architecture and to adapt it over time.

Key Considerations

The architect should perform this task through collaboration with the whole team to promote consensus and a common understanding of the overall solution. The architect should be working to coordinate and guide the technical activities of the team, rather than seeking to do all the work alone. The architect should place emphasis on involving the developer(s) throughout this task.

More Information