Skip to content

FTM302 · The FTM Domain

Learning materials — teaching, weekly quizzes, weekly tests. Examination paper — timed paper with marking guide.

Credits 4 · Hours 40 · Prereqs FTM301 · Semester 3

No external course exists. The primary sources are the code, the KB articles, and the prod data:

  • backend/booking/models.py — Enquiry, EnquiryBand, EnquiryBandMember
  • backend/payments/ — invoices, deposits, Wise, payouts
  • backend/bands/search*.py — ranking and blending
  • backend/geography/ — regions, points, OSM import
  • KB: payments, messaging, state machines, venue intelligence

This module exists because engineering without it produces confidently wrong work.

  • Narrate a booking from first enquiry to band payout, naming the model and guard at every step.
  • Apply the money rules: 18% booking fee, no VAT, FTM is agent not principal, the band sees only its band fee, owed = band net fee − band paid amount, Invoice.band_paid_amount is the only ledger.
  • Say how a search result is ordered, and why.
  • Name what is never shown to a band, and where that is enforced.
WkTopic
1–2enquiry lifecycle; progressive (soft) auth for anonymous clients
3quotes, client replies, the invoice coupling
4BOOKED and its guards — every state transition and where it is enforced
5–6money: fee arithmetic, deposits, Wise recipient accounts, payout batches, admin-only finality
7–8search: FTS, embeddings, blended scoring, rank tiers, local-first, the single-booking inflation trap
9–10geography: regions, OSM import, synthetic regions, place IDs, venue vs region classification
11adjacent domains: forms/questionnaires, venue intelligence, reviews, channels
12disclosure rules: is_direct, directly_enquired_at, budget fields, raw requirements
  • L1 draw the enquiry state machine from the code; list every guard and its enforcement point.
  • L2 account for every message in one real prod enquiry thread — sender, channel, which job processed it.
  • L3 find a reachable state that violates a stated rule.
  • L4 compute owed for five scenarios and reconcile against the ledger.

The domain law tests — fee arithmetic, band-visible field set, payout owed — as executable specifications the team keeps.

There is no textbook for FTM’s domain. These three are for the general shape of the problem, not the specifics.

BookAuthor, yearUseFree
Designing Data-Intensive Applications, ch. 2–3Martin Kleppmann, 2017Data models and schema evolution; why the enquiry graph looks like thisNo
Domain-Driven DesignEric Evans, 2003Ubiquitous language, bounded contexts, invariants as first-class — read ch. 1–6 onlyNo
Implementing Domain-Driven DesignVaughn Vernon, 2013Aggregates and consistency boundaries, if the DDD framing landsNo

For the FTM-specific facts, the source of truth is the KB, not a book. Every claim in this module must be verifiable against backend/ or a real message thread.

Coursework 45% (L1–L4) · Project 35% · Check-off viva 10% · Exam 10%.

Deferred: induction and invariants (MIT 6.042J) — read after the first money defect, not before.