Software Architecture

Table of Contents

Architecture design

Architecture design methods

How an architecture is developed:

Architecture design flowchart by Bosch

Architecture design in the context of other tasks

Architecture in context of other dev tasks by Hofmeister

Attribute-driven design

  1. Choose element to design
    • refinement: breadth first (figure out from high level all aspects) vs depth first (start with one aspect and go in detail)
    • choice driven by: personnel availability, risk mitigation, priorities
  2. Identify ASRs (can use e.g. utility tree)
  3. Generate design solution, e.g. inspired by patterns and tactics
  4. Verify and prepare for next iteration
  5. Repeat steps

Generalized diagram of testing process

Diagram of process in terms of backlog

You choose from backlog by:

Architecture design process

Design proceeds under conditions of great uncertainty: evolving requirements & limited info. How rational are your design decisions?

Reflection-in-action: “thinking on your feet” Reflection-on-action: retrospective reflection, thinking about what happened

Ultimate design is path through space of decisions. Choices at any point affect later (and maybe earlier) decisions.

Can we even make rational decisions?

Prospect theory & fourfold pattern:

Design is a “wicked” problem. There’s no definite formulation, or stopping rule. Solutions are not just true or false (I’ll say this on the exam lol). Decisions lead to new problems, to new decisions, to new problems, etc.

Architectural decisions

Design is series of decisions:

Taking decisions flowchart

Design space:

Technical and non-technical concerns/options are intertwined: architects decide on type of database, management decide on budget.

Types of decisions:

Design rationale: logical reasons given to justify designed artefact

Why document design decisions?

Use of design decisions:

Template for modelling design decision: