Module 91: Introduction to System Design
Goal: learn to design a software system before building it: turn needs into clear requirements, including the "how well" ones, break the system into components, draw it so others understand, weigh trade-offs honestly, and design a small booking system from start to finish.
You'll need: a notebook or a diagram tool (draw.io / diagrams.net, Excalidraw, or Mermaid in Markdown). In this level your running example is a tutor-session booking platform: students find tutors, book and pay for sessions, and get reminders; tutors manage their availability.
Lessons
- 1Functional requirements15–25 minutes✓
- 2Non-functional requirements15–25 minutes✓
- 3Components and C4 diagrams15–25 minutes✓
- 4Trade-offs15–25 minutes✓
- 5Designing a small system15–25 minutes✓
🛠️Module practice: Project A, part 1, a system design
- Prioritised user stories and use cases with acceptance criteria.
- Measurable non-functional requirements, with the design-shaping ones marked.
- C4 Context, Container and Component diagrams, kept as code in Git.
- Three ADRs with options, trade-offs and consequences.
- The five-page booking-app design document.
✅Module check
Explain in a few sentences, in your own words:
How do you design a software system before building it?
Show a good answer
A good answer mentions: clarifying the problem, users and scale; functional requirements as user stories or use cases with acceptance criteria, prioritised (MoSCoW); measurable non-functional requirements (performance, availability, security, privacy, usability, cost) that shape the architecture; rough estimates; a data model, API list and components with clear responsibilities, drawn at C4 levels with labelled arrows; key flows including failures; cross-cutting concerns; explicit trade-offs recorded in ADRs, preferring the simplest design that meets the requirements; and a review with others.
📝Module quiz
10 questions · 10 marks each · 100 marks in all · pass mark 70% · retry as often as you like ·
