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

To 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 Task: Define the Architecture 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 (for current iteration)

Identify the architecture priorities for the iteration. These can take the form of one or more Concept: Architecture Mechanism 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.

Identifying these drivers will enable the Role: Project Manager to allocate the resources needed.

Identify common solutions accross scenarios

Look for commonality across scenarios as they are they are being analyzed and designed, then propose common components and patterns for their solution. The use of patterns includes covers both the technical and business domains (see Concept: Design Mechanism and Concept: Business Pattern).

Identify Design Mechanisms

Refine Concept: Architecture Mechanisms into Concept: Design Mechanisms by looking at the requirements in context. 

Identify Business Patterns

Identify areas of related or similar behaviour and propose any appropriate generic designs.

Identify Components from existing assets

Identify reuse opportunities: Leverage reuse of existing components by looking to their interfaces and the behavior they provide.

Identify how to interface to existing components: Existing code and database definitions can be 'scavenged' to make work done on previous projects or iterations available to the current project/iteration. By using potential reuse opportunities as a filter, the work that is reverse engineered can be focused on just the components which are reusable for the current iteration.

Identify Components from the problem space

Consider each high priority use case in turn, mapping use case scenarios onto the architecture. Walk through the actions that the use case initiates, highlighting the areas of the architecture that participate in realizing the use case.

Define development and test architectures

Decide on additional architectural elements required to support the development and test activities.

Evaluate results

Verify that the architectural decisions taken are fit for purpose. This may take the form of such activities as verifying the success of exploratory prototypes; peer review of documentation; or formal assessment reviews.

Communicate and document decisions

Ensure that those who need to act upon the architecture work are aware of what they need to know.

More Information