Your five agent units can only be tested once the fourth lands — how do you re-cut the plan?
answer
- a boundary with no check is not one
- order by when evidence arrives
- make later units checkable first
- test the load-bearing assumption early
basics
~10 sRe-order so evidence arrives first: open with a behaviour-preserving unit the existing suite already checks, then the smallest unit that settles the riskiest assumption. Merge any unit that cannot fail on its own.
solid answer
~50 sA plan whose first check is in unit four is a one-unit plan with four names. Units one to three cannot fail separately, so they cannot be abandoned separately either. I re-cut it three ways. **Build the seam first**: a unit that routes the module's date work through one internal helper and leaves behaviour alone, checked by the suite that already passes. **Then prove the risky assumption**, in the smallest unit that can — week boundaries near a year end, where the replacement most plausibly disagrees with the library being removed. **Then move the helper's remaining operations a class at a time**, each checked against a report output you already hold. If a unit still has no check until a later one lands, it was never a unit; merge the two and accept the larger piece rather than pretending the boundary is real.
code
text · 18 linesREPORTING MIGRATION - first cut check available?
1 replace the date library in the module no (nothing builds)
2 move the weekly-volume report no (no seam yet)
3 move the month-to-date report no
4 wire it up and run the suite yes <- first evidence
5 delete the old dependency yes
-> units 1-4 are one unit with four names: none fails alone
REPORTING MIGRATION - re-cut, evidence first check available?
1 every date call site routed through one internal yes the existing suite,
helper; helper still calls the old library; unmodified
no behaviour change (the seam)
2 the helper's week-boundary operations onto the yes last year's weekly
replacement, incl. the last week of a year report, recomputed
3 the helper's month and period operations yes last month's
month-to-date output
4 the helper's formatting used by the export yes a stored export
5 delete the old dependency yes the whole suitego deeper
Learn to spot the symptom: if the first thing you can check is the fourth item, the earlier items are not separate units. Say that before proposing a new order.
Explain what a boundary is for. A boundary you can check is a place to stop, to review and to hand over; one you cannot check only makes the plan look finer-grained than the work really is.
Demonstrate the seam-first move and price it. A behaviour-preserving first unit costs a review and ships nothing visible, and it converts an unverifiable sequence into four independently checkable ones.
Own the framing that plans are ordered by evidence, not by effort or by ticket age. Teams that order by what is easy tend to learn the load-bearing fact last, when the cost of being wrong has already been paid.
## The plan that looks cut and is not Five units, in the order they were written down: 1. replace the date library in the module, 2. move the weekly-volume report, 3. move the month-to-date report, 4. wire everything up and run the suite, 5. delete the old dependency. Nothing can be checked until four. That matters more than it looks, because a boundary that carries no check carries nothing else either: units one to three cannot fail on their own, cannot be reviewed against a result, and cannot be abandoned without taking their neighbours with them — and unit four, where their check finally lands, cannot be separated from them either. **Units one to four are one unit wearing four names.** The plan reads as five and behaves as two. ## Order by when evidence arrives The re-cut follows one rule: a unit boundary is a place where evidence exists. That turns into three moves, in order of how often they apply. ### 1. Build the seam first The first unit's job is to make later units checkable, not to deliver anything visible. Route every date operation in the module through one internal helper, leave the helper calling the old library, and require the existing suite to pass untouched. Nothing about the reports changes, which is precisely why the suite is a real check: any difference it reports is a regression this unit caused. After that unit, every later one is a small move behind a seam that already exists, and each can be judged on its own. ### 2. Put the riskiest assumption in the smallest unit that settles it The plan rests on the replacement reproducing what the old library did at week boundaries — near a year end, most of all. That assumption belongs in the second unit, not the fourth, because every unit built before it is work that may not survive contact with the answer. The unit is small: move only the helper's week-boundary operations across, and check them by recomputing a week whose reported output you already hold. The ordering instincts that fight this are all real and all wrong here: - start with the easiest piece, to build momentum; - start with the biggest piece, because it looks like the most risk; - start with whichever ticket has been open longest. None of the three is ordered by evidence, and the first two are usually ordered by effort. ### 3. Merge what cannot be separated If a unit genuinely has no check until a later one lands, join them. A larger honest unit is better than two dishonest ones, because the plan then says what it actually costs to abandon. Pretending a boundary exists is worse than not having it: it hides the real size of the thing in flight. ## The two orders side by side | | first cut | re-cut, evidence first | |---|---|---| | first checkable point | unit four | unit one | | what a failure in unit two costs | units one to four | unit two | | when the week-boundary assumption is tested | unit four | unit two | | what checks unit two | nothing until later | last year's weekly report, recomputed | | what the plan says about abandoning midway | nothing useful | exactly which unit is lost | ## What this does not buy Ordering does not make any unit more likely to be right, and a re-cut plan with a suite nobody trusts is still unchecked — it has simply moved where the trust is misplaced. What ordering decides is **when you learn**, and therefore how much work is standing on an answer you do not have yet. That is worth stating explicitly in an interview, because the confident version of this answer overclaims and the honest one does not. The seam has a price too. The first unit ships nothing a user could notice, and someone has to review it. It pays for itself when several units queue up behind it, and it does not when there are two — in which case you take the bigger unit and the later check. ## Reading a plan for this defect Three questions over any ordered list of units, before the first one starts: 1. For each unit, what fails if this unit is wrong, and does that thing exist before the unit runs? 2. Which unit tests the assumption the whole plan depends on, and how many units are built before it? 3. Which units cannot be abandoned on their own — and are they still being counted separately? A plan that survives those three is usually also easier to hand over, to resume tomorrow, and to stop halfway through without losing the week. ## What a good answer sounds like Say what the symptom means before fixing it: *if nothing can be checked until unit four, I do not have four units.* Then give the re-cut and the reason — seam first so the existing suite becomes the check, risky assumption next so the plan learns early, the helper's remaining operations a class at a time after that. Then concede the cost of the seam. An answer that lists a tidy order without saying what each boundary is for has described a work breakdown, not a scoping decision.
- When is the seam-first unit not worth its cost?When only one or two units queue up behind it. The seam unit ships nothing observable and still needs a review, so it pays when several later units become independently checkable because of it. With two units, take the larger honest piece and accept that the check arrives at the end of it.
- How do you decide which assumption counts as the riskiest?Ask which one, if wrong, invalidates the most work already done. In a library migration that is usually where the two libraries could silently disagree — rounding, boundaries, time zones — rather than where the code is hardest to write. Difficulty and risk often point at different units, and the plan should be ordered by risk.
- What if two units both need the other's output before either can be checked?Then they are one unit and the plan describes a dependency it cannot honour. Merge them, or carve out a smaller piece of one that can stand alone — often a behaviour-preserving move that leaves the interesting decision for the next unit. Keeping the boundary only hides how much work is really in flight.
saying these in an interview costs you the question
- Order the units by which report is easiest to move
- A plan with five entries gives you five places to stop
- Test the risky assumption last, once the rest is stable
- Any ordering is fine as long as every unit is small
- A unit with no check is fine if the next one covers it