Software Design in the Lifecycle (FIT2099)

Context: FIT2099_MOC Β· where design sits in the broader development process Β· answers when and why to design (the how is separate)

Quick Revision

  • 🎯 Objective: locate design between requirements (what to build) and implementation (the build) βž” design answers β€œhow should we build it?”
  • ⚑ Key Constraint: the neat phase boxes are misleading β€” requirements/analysis/design overlap heavily in practice; and per Lean you should decide as late as responsibly possible so choices rest on fact, not speculation.

πŸ“ The lifecycle (Waterfall recap)

  • Five phases βž” Requirements (β€œwhat should we build?”, β†’ requirements doc) βž” Design (β€œhow should we build it?”, β†’ architecture) βž” Implementation (β†’ software) βž” Verification βž” Maintenance.
  • Analysis between βž” a realistic refinement inserts Analysis (β€œwhat do the requirements mean?”) between Requirements and Design.
  • Overlap is real βž” hard to separate requirement elicitation from analysis, or understanding the domain from modelling it; the boxes are a simplification.

⏱️ Just-in-time, just-enough design (Lean)

  • Origin βž” Toyota’s 1970s just-in-time manufacturing; absorbed into Lean/Agile.
  • 7 Lean principles βž” eliminate waste Β· amplify learning Β· decide as late as possible Β· deliver as fast as possible Β· empower the team Β· build integrity in Β· optimise the whole.
  • Decide as late as possible (#3) βž” the longer you wait to commit, the more information you have; the earlier you commit, the less flexible you are. Best decisions rest on fact, not speculation.

🎯 When to do conscious (deliberate) design

  • Project inception βž” architectural big decisions β€” hard/expensive to change, so get them right early (e.g. a VR system’s client/server/view layering).
  • Before something complex or risky βž” design ahead of a tricky implementation.
  • When refactoring βž” the design may have been bad from the start, or was good and decayed β€” see Refactoring (Java).
  • Unconscious design βž” the opposite: code shaped by unexamined earlier commitments (e.g. treating a Dictionary as a list with index loops) β€” needlessly complex.

⚠️ Common Mistakes

  • πŸ’‘ Diagrams are a means, not the end βž” the goal is a good design and a shared understanding in the heads of stakeholders (designers, implementers, maintainers, reviewers, client-code users). Documents/diagrams only serve that β€” they are not objectives in themselves.
  • πŸ’‘ Deciding too early βž” premature commitment locks in choices before the facts are in (violates Lean #3) and breeds rework.

🧠 Active Recall