Software architecture design is the work of deciding a system’s major boundaries, responsibilities, data flow, and operational constraints before implementation details take over.

Questions to explore:

  • Which decisions are difficult or expensive to change later?
  • What should a design document make explicit before coding starts?
  • How can a system stay simple while leaving room for likely change?