The Design Process

The high level structure of a system is heavily influenced by early design decisions.
Lower level stuff is often determined by later stages.

Designing is difficult but it can be made easier through a variety of techniques:

  • Reference models contain generalised ways to decompose a system
  • Cloning can be used to borrow existing code and designs with minor changes

Generic solutions for software architectures are known as architectural styles

Design patterns, principles and convention/idiom can be used to evaluate a chosen design.

flowchart LR
    modelling --> analysis
    analysis --> documentation
    documentation --> review
    review --> sad["softwware architecture document"]

    analysis --> modelling
    review --> modelling

Agile Architectures

The agile process is useful when there is a lot of uncertainty about requirements

Agile architectures are of course, based on principles from the agile manifesto

Agile has challenges when it comes to changes and refactoring, however

Modelling Architectures

There are many ways to use architectural models

  • Understand the system
  • Determine what can be reused from other systems and how this system is reusable
  • Provide a blueprint for the development of a system
  • Analyse system dependencies
  • Evaluate risks