Materials· Lesson 08 — Design· Six shapes · pick one

Synthetic Task Analogues

One per shape the capstone commonly takes. Each is built to the structure of the real thing, including the parts that are annoying, so a capstone built on one of these is a complete capstone.

Task selection in the capstone is real — you pick a tedious thing you actually do. What you feed it is your decision. If your material can't leave your systems, or you'd simply rather not, take the analogue below whose shape matches your task and build against that. Nothing is withheld from this path. Every step works, every grading criterion applies, and the design record you produce describes the structure of your real task either way.

How to use one of these

Do step 1 — the task description — about your own task. Its inputs, its outputs, its consumer, what good looks like, how you'd know it went wrong. That is structure, not contents, and it needs nothing confidential in it.

Then pick the analogue whose shape matches, and run steps 3 to 7 on that. Your build, your test set and your iteration log are all about the analogue. Your handoff note is about the analogue too — and it will still tell you most of what you need to know about the real one, because the limitations you find are properties of the shape rather than of the data.

Specimen · constructed for teaching

All six analogues are written, not captured. They use the same fictional companies as the rest of the course. They are deliberately untidy: inconsistent naming, contradictions, missing entries, dates without months, values stated three different ways. A tidy analogue would let every build succeed and would teach you nothing about your own inputs, which are not tidy either.


Shape 1 · The recurring roll-up

Yours is this shape if: several people send you something in whatever format suits them, on a schedule, and you merge it into one document with a fixed structure that somebody else acts on.

Analogue 1 · Northwind Consulting — this week's six workstream updates
[Slack, Thu 18:42, Dev] wave 2 basically fine. mapping thing is done ✅ waiting on client for the sign-off doc, been waiting 2 wks. amber I guess? oh also Priya's out all next week [Email, Fri 09:15, R. Okonkwo — subject: RE: RE: status] > can you send me your update by thurs Integration: API cutover COMPLETED Tuesday. All 14 endpoints migrated, zero rollbacks. Remaining work is decom of the old gateway, scheduled for the 14th. No blockers. Rob [Email, Thu 16:03, QA team mailbox] Test pass 3 remains blocked — we cannot run the regression suite until the API cutover lands. Blocked since Monday, so that's 4 days. We need a date from Integration. Separately the test environment fell over twice, raised with infra as INF-4471, no response yet. [Slack, Fri 11:50, Marcy] data piece — 60%? maybe 65, hard to say. extract job ran clean twice this week which is new for us. will know more mon [My notes from the Thursday call, Tomas] Reporting workstream: nothing this week, whole team pulled onto the Meridian escalation. Expects to restart the 20th. Wants to know whether the client is ok with that — says he needs an answer before he can commit the restart date. [Change & comms — nothing received]

The output template: four headings in this order — Progress this week, Decisions needed, Risks, Next week. One page. Sent to the client's programme director, who builds Monday's agenda from Decisions needed.

What good looks like. All six workstreams named, including Change & comms, which sent nothing. Every decision phrased as a question with an owner and a date. No internal shorthand. The client calls Dev's workstream "Wave 2" and Marcy's "Data migration" — the note uses the client's names.

The hard case is already in there. Rob says the cutover completed Tuesday; QA says it has been blocked pending that cutover since Monday. One of those is stale and the material doesn't say which. A build that picks a winner has failed; a build that surfaces both under Decisions needed has passed.

Where the anti-criteria bite on this shape. Usually the second one: an omitted item is expensive and invisible, because you'd be scanning for something that isn't there. The standard repair is to force the absence to become a sentence — name every workstream, and write "no update received" rather than saying nothing.


Shape 2 · Explain the numbers

Yours is this shape if: a table arrives on a schedule and you write a line of commentary per row, some of which the table supports and some of which it doesn't.

Analogue 2 · Harbourview — weekly usage exception export
account,prev_wk,this_wk,pct,plan_code,plan_changed Ashgrove Retail,41200,52900,+28.4%,PRO-3, ashgrove retail ltd,1180,1490,+26%,PRO-3, Bellweather Foods,88400,22900,-74.1%,ENT-1, Calder & Sons,15600,19100,+22.4%,PRO-2,Y DEEPWELL LOGISTICS,7420,9880,+33%,STD-1,Y Everstone Group,64000,64000,0%,ENT-2, Fenwick Media,2310,3050,+32%,, Garrick Health,55100,41300,-25%,ENT-1, Halloway,9900,,,PRO-1, Ivorydale Partners,33800,44700,+32.2%,PRO-3,Y [Separate file, not always attached — reclassification log, this week] Bellweather Foods: metered API calls moved from "usage" to "platform" billing category effective Monday. No change in actual consumption. [Column meanings, from the data team] plan_changed = Y means the account moved plan during the week. Blank means either no change, or the flag wasn't set. The flag is set by hand and is not reliable.

What good looks like. One line per row, under twenty words, in the export's order. Rows the data explains cite the column that explains them. Rows the data doesn't explain say so plainly, because those are the rows that get a phone call — "cause not in data" is a correct answer and the most valuable one in the file.

Hard cases to put in your test set. Bellweather's 74% drop, which is a billing reclassification and not a usage collapse, and which is only knowable from the second file. The Halloway row, which has no current-week figure at all. And Ashgrove, which appears twice under two spellings with wildly different volumes — two accounts, or one?

Where the anti-criteria bite. The first: half of what makes a row explicable lives outside the export, in someone's head. The repair is not to guess better — it's to make the output say which rows it couldn't explain. Watch for the over-correction, where everything comes back as "cause not in data" including the rows where the plan-change flag plainly explains it.


Shape 3 · Draft to a house style

Yours is this shape if: you turn source material of wildly varying quality into short pieces that all have to sound the same, and being wrong about the source is worse than being dull.

Analogue 3 · Lumen & Co. — this week's three Partner Spotlight sources
PARTNER 1 — press release extract (2 pages, opening below) "Tessellate today announced general availability of Tessellate Flow, a workflow layer that connects scheduling, dispatch and billing for field service teams. Flow reduces the average dispatch-to-invoice cycle from nine days to under two for early customers, and offers the market's fastest onboarding — most teams are live in 48 hours. 'We built Flow because our customers were re-keying the same job three times,' said co-founder Ana Beltrán. Flow is included at no extra cost for Tessellate Pro customers and is available in the EU and UK from this week." PARTNER 2 — the entire thing they sent @northmoor_io: "big week 🚀 v4 is out. faster, cleaner, and finally does the thing you've all been asking for. link in bio" PARTNER 3 — email, in full From: partnerships@quillard.example Subject: newsletter Hi — happy to be included. Just use whatever's on our site, you know us better than we do! Anything you write is fine. Bea [House voice guide — the relevant extracts] · Second person. Speak to the reader, not about the partner. · Never open with a rhetorical question, a statistic, or the partner's name. · No superlatives and no comparative claims about any partner, including ones the partner has made about itself. · British English. No exclamation marks. Sentences under 25 words. · 60 words is a ceiling, not a target.

What good looks like. Three blurbs that don't read like each other, each saying something specific, each carrying a claims table: every factual assertion in the blurb sitting beside the sentence from the source it came from.

The hard cases are all three, for different reasons. Partner 1 contains "the market's fastest onboarding", which the voice guide forbids repeating — a good build refuses it visibly rather than dropping it silently. Partner 2 supports perhaps 20 words, so a 60-word blurb has been padded or invented. Partner 3 supplied nothing at all, and the only correct output is a statement that there is nothing to write from.

Where the anti-criteria bite. The second, hard: a wrong claim about somebody else's product is expensive and you are the wrong person to detect it. The repair that saves this shape is making every claim traceable, which turns checking from "do I know this product" into "does this quoted sentence say that".


Shape 4 · Structured extraction

Yours is this shape if: free text arrives and you pull the same handful of fields out of it, over and over, into something with columns.

Analogue 4 · Meridian Software — four inbound support tickets
#8841 — from: ops@calderandsons.example Subject: urgent!!! exports Since the update on Tuesday none of our scheduled exports are running. We're on the latest version I think, whatever came out this month. This is holding up payroll for 340 people. Also while I have you — is there a way to change the export filename format? Not urgent, just annoying. #8843 — from: j.mbeki@ashgrove.example Subject: question hi, the reconciliation screen shows a different total to the report for the same date range. report says 41,209.55, screen says 41,209.05. only 50p but our finance team won't sign off. we are on 4.2.1. happy to jump on a call. not blocking anything yet. #8847 — from: ops@calderandsons.example Subject: RE: urgent!!! exports any update? still down. also we've now noticed the API is returning 500s on the /v2/exports endpoint, might be related? #8852 — from: it@deepwell.example Subject: Feature request — SSO We need SAML SSO before we can roll this out beyond the pilot team. Our security review flagged it. Timeline? We're a 900-seat account and this is in our renewal conversation in March. [The fields you extract] ticket · customer · product area · version · severity (P1/P2/P3) · is this one issue or several · does it relate to another ticket · what is the customer actually asking for

What good looks like. Every field filled or explicitly marked unknown. Version stated as it appears, not normalised into a guess. Severity justified by something in the text rather than by tone — #8841 shouts and is genuinely P1; #8843 is calm and is a data-integrity discrepancy, which may matter more than it sounds.

Hard cases. #8841 contains two separate issues, one urgent and one cosmetic, and a version that isn't a version. #8847 is a follow-up to #8841 and adds a new symptom — is that one ticket or two? #8852 isn't a support ticket at all.

Where the anti-criteria bite. Usually the third: severity is a judgement and you may find you can't write the rule. Try writing it three times before deciding. Often the extraction of stated facts hands over cleanly and the severity call doesn't — which is a split, not a rejection.


Shape 5 · Triage and route

Yours is this shape if: a queue arrives and each item needs a category, a priority and a destination, and the cost of the wrong destination is that it sits unread.

Analogue 5 · Meridian Software — this fortnight's inbound requests
R-201 "Can we get bulk edit on the approvals screen. Doing 60 of these by hand every Friday." — Harbourview, 40 seats R-202 "Dark mode 🙏" — anonymous, in-app feedback R-203 "The date picker won't accept 29 Feb. Had to work around it all last week." — Calder & Sons, 120 seats R-204 "Bulk actions on approvals — currently a manual slog" — Ivorydale, 15 seats R-205 "Does the API support pagination on /v2/exports? Can't find it in the docs." — Deepwell, 900 seats R-206 "We need this to be SOC 2 compliant" — Deepwell, 900 seats, flagged by their account manager as renewal-critical R-207 "please make it faster" — anonymous, in-app feedback R-208 "Export to Excel keeps producing an empty file when the range is over 90 days" — Ashgrove, 40 seats [Routing rules as they exist today, such as they are] Bugs → engineering triage. Feature requests → product board. Questions → support. Compliance/security → the security queue, not product. Priority is customer size × how blocked they are. Nobody has ever written down what "blocked" means.

What good looks like. Every item categorised and routed, with the phrase from the item that justifies the category. Duplicates linked rather than counted twice. Items that can't be categorised from what's written land in a "needs a human" bucket rather than getting a plausible guess.

Hard cases. R-203 and R-208 are described as annoyances but are bugs. R-201 and R-204 are the same request from two customers. R-205 is a question wearing a feature request's clothes. R-207 says nothing at all. R-206 is a compliance item that a naive read routes to product, which is the one misroute here with a commercial consequence.

Where the anti-criteria bite. The third and the second together. Priority depends on "how blocked they are", which nobody has defined — so either you define it now, in writing, or you hand over the categorisation and keep the priority. And a misroute is cheap unless it's R-206, which is expensive and silent: nothing tells you a security item is sitting in the product backlog.


Shape 6 · Assess against a rubric

Yours is this shape if: several submissions arrive and you score each against criteria that already exist on paper, and the reason for the score matters as much as the score.

Analogue 6 · Harbourview — three vendor responses to two rubric criteria
RUBRIC C1 — Data residency. 0: no EU option. 1: EU option, unclear scope. 2: EU-resident primary and backups, stated. 3: as 2, plus contractual commitment not to transfer, and a named sub-processor list. C2 — Incident response. 0: no stated SLA. 1: SLA stated, no severity definitions. 2: SLA per severity with definitions. 3: as 2, plus published historical performance against it. VENDOR A C1: "All customer data is hosted in our Frankfurt region. Backups are replicated for resilience." C2: "We commit to a 4-hour response for critical incidents and best efforts otherwise. Severity is assessed by our on-call engineer." VENDOR B C1: "We are fully GDPR compliant and take data protection extremely seriously. Our infrastructure is world-class and audited annually." C2: "Our uptime last year was 99.98%." VENDOR C C1: "Primary and backup storage are both EU-resident (Frankfurt, Dublin). Our MSA clause 8.3 prohibits transfer outside the EEA without written consent. Sub-processor list attached as Appendix D." C2: "P1 (service unavailable): 1h response, 4h mitigation. P2 (degraded): 4h/1 business day. P3: next business day. Definitions in Appendix B. We do not publish historical performance."

What good looks like. A score per criterion per vendor, each with the sentence it rests on quoted. Where the response doesn't address the criterion, the score reflects that rather than being inferred from the surrounding confidence.

Hard cases. Vendor A's backups are "replicated for resilience" — replicated where? The response doesn't say, which is a 1 and not a 2. Vendor B's C2 answer is about uptime, which is a different question entirely, and its C1 answer is reassurance rather than information. Vendor C is strong and still not a 3 on C2, because it says outright that it doesn't publish historical performance — a build that rounds a good answer up to full marks has failed the case.

Where the anti-criteria bite. The fourth, quietly: if checking a score means re-reading the whole response anyway, you've saved nothing. The repair is the quoted sentence, which turns verification into a scan. And the second, if a score feeds a real decision: a wrong score on a criterion nobody re-reads is expensive and silent.


If none of these is your shape

That is a useful finding rather than a gap. Two things it usually means.

Your task is more than one shape. Most real tasks are. A weekly report that extracts fields, scores them and then writes prose is shapes 4, 6 and 1 stacked. Build one layer, test it, and only then decide whether the next layer belongs in the same handover — that's the Lesson 4 decomposition move, and stacking shapes without testing each is the most common way a promising capstone stops being diagnosable.

Or the thing that makes your task tedious isn't the text handling at all. If the tedium is opening eleven tabs, waiting for an export, or chasing people for their input, then no arrangement of these six shapes touches it. That's a fit test returning no, for the first anti-criterion, and it is worth writing up as exactly that.