River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Technical Program Management Plan

Six documents and four sheets, including a dependency register that carries the giving team's date and the receiving team's last usable date on every handoff.

Free download  ·  No account needed

Dependency Register, one row

D-NN. What one team hands another, named as a thing that arrives

Giver: team and person  ·  Receiver: team and person  ·  A team cannot confirm a date

Giver Date

The date the producing team says it lands, in their own words, from their own plan.

Receiver Need By

The last date the consuming team can take it and still hold their own commitment.

Handoff Float Working days between the two, derived rather than typed. Zero or below is a programme problem on the day the row is written.

Last Confirmed / Confirmed By The day the giver last said this date in writing, after the current plan was drawn, and who said it.

Shock Result What moved when this date was pushed out fifteen working days. Propagates, absorbed by float, no link, or pinned.

Status

Confirmed, unconfirmed, at risk, or broken. Four values, no colours, and broken is arithmetic: the giver date has passed the need-by.

Notes

What the receiving team does on the first morning the input has not arrived.

A cross-team handoff has two dates, and almost every register records one. The producing team's date is not the consuming team's deadline, and the working days between them are the only float that handoff has. Every row in this pack carries both, with the float derived rather than typed in. The US Department of Energy's guidance on reviewing a programme schedule asks reviewers the same question directly: was there an agreement between the sender and the receiver on the date of this handoff.

The worked example follows one row at Marchmont Logistics, a freight firm moving customs declarations onto a new broker interface before the old one is switched off on 26 February 2027. The credential store handoff read green in eight consecutive weekly updates. Its confirmation was 69 days old, and the real date turned out to be 20 working days later. Five sat inside the handoff float. The other 15 moved the programme finish from 5 February to 26 February, which was the whole buffer.

Then the register gets shock tested: each giver date pushed out 15 working days, one at a time, with whatever moves downstream recorded. At Marchmont, 14 of 23 handoffs moved nothing. Six were genuine float. Five had no join between the two teams' plans and three were pinned behind fixed dates, so eight slips would have landed nowhere and been absorbed in silence. What the register finds feeds the engineering status update the same week.

One handoff, both dates, and what the shock test said about the other 22

The Dependency Register, the shock test tally, and the Critical Path.

Dependency Register  ·  Marchmont Logistics  ·  review of 12 November 2026

IDGiverReceiverGiver dateNeed byFloatConfirmedAgeStatusShock
D-11Platform, Ines KovacDeclarations, Tom Aylward13 Nov 2620 Nov 2654 Sep 2669unconfirmedPropagates
D-03Platform, Ines KovacCarrier Int, Rafi Oyelaran19 Nov 2620 Nov 26110 Nov 262confirmedPropagates
D-15Client Web, Marta BielikPlatform, Ines Kovac15 Jan 2718 Dec 26-204 Nov 268brokenNo link
D-14Data, Wen ZhaoDeclarations, Tom Aylward15 Jan 2722 Jan 27511 Sep 2662unconfirmedPropagates
D-19Data, Wen ZhaoPlatform, Ines Kovac11 Dec 268 Jan 272030 Sep 2643unconfirmedPinned
D-13Platform, Ines KovacData, Wen Zhao20 Nov 264 Dec 261011 Nov 261confirmedAbsorbed by float

Six of twenty-three rows. Float and confirmation age are in the sheet as derived columns, never typed.

Shock test, every giver date pushed out 15 working days, one at a time

ResultRowsWhat it means
Propagates9Something downstream moved. The link is real and the plan carries it.
Absorbed by float6Nothing moved, and the recorded float is at least as large as the shock.
No link5Nothing moved and the float does not explain it. Neither plan joins the two ends.
Pinned3The successor is anchored to a calendar date, so it holds whenever the input lands.

Fourteen rows moved nothing. Six were float. The other eight are slips the plan would absorb in silence.

Critical Path  ·  measured back from the broker switch-off on 26 February 2027

StepWhat happensFinishesDays to switch-off
D-11Platform hands over the tokenised credential store20 Nov 2670
M1Declarations proves filing in the broker sandbox4 Dec 2660
M2Production credential and certificate path live18 Dec 2650
 Production dry run of the filing path, across the change freeze15 Jan 2730
D-14Data hands over the reconciliation job22 Jan 2725
M6Legacy filing path switched off, programme finish5 Feb 2715

Fifteen working days of programme float, which is what the 15 day slip on D-11 consumed exactly.

What is in the pack

01

Dependency Register

One row per handoff with the giver's date, the receiver's need-by, the float derived between them, and the day it was last confirmed.

02

Milestone Interlock

One row per milestone, rolling up the handoffs that feed it: how many are confirmed, the worst float among them, and the oldest confirmation.

03

Critical Path

The chain from today to the finish, each step carrying its duration and the working days left against the one date nobody can move. Whether that finish is actually safe to ship is a separate question the launch readiness review answers, not this register.

04

Risk Register

Everything that will not resolve into a dated commitment, each row with a named decision, a fallback, and the day after which choosing stops helping. A risk that needs its own checkable indicator rather than a line in this programme's register belongs in the dedicated technical risk register.

05

Dependency Standard

How a handoff gets recorded here: the two dates, the two named people, the four status values, and what is a request rather than a dependency.

06

Running the Shock Test

The twenty minute exercise that separates a dependency register from a dependency plan, with what each of the four results means and who fixes it.

07

Escalation Path

The four options two leads have before anything goes up, written before it happens, so it is about a date rather than about the people. A team's pattern of slipping commitments is a separate, ongoing conversation, not something this path re-litigates per handoff.

08

Status Format

A weekly page written as a diff against last week's, leading with what moved and ending with the handoffs nobody has data on.

How it works

  1. 1

    Open it in River, or download it

    Edit with AI installs the pack as a private Space with the agent primed to fill it in. Download gives you the same documents as Word files and the sheets as CSV, with no account.

  2. 2

    Send the plans and the threads

    Team plans, roadmap exports, design docs and the conversations where two engineers agreed a date. The threads usually hold more real dependencies than the documents do.

  3. 3

    Get both dates on every handoff

    River asks the producing and consuming teams separately, derives the float, and records when each date was last confirmed and by whom. Four counts come back before any commentary.

  4. 4

    Shock test before you trust it

    Every giver date gets pushed out in turn and what moves is recorded, so the handoffs written down but joined to nothing are found before a slip finds them for you.

Frequently asked questions

Is this template free?

Yes. The zip is Word documents and CSV sheets, and it needs no account and no card. Edit with AI is the optional half: the agent reads the plans you already have, builds the register, and runs the shock test. The rest of the template library works the same way.

What format are the downloaded files?

The six documents come as .docx and the four sheets as .csv, so nothing needs converting. Word, Pages, Google Docs, Excel, Numbers and Sheets all open them directly. The register, interlock, critical path and risk sheets arrive with the worked example already in them.

What does Edit with AI actually do?

It reads whatever you send and writes one row per cross-team handoff, with both dates and both named owners. Then it shock tests the register and reports four counts: total handoffs, how many carry both dates, how many were confirmed this cycle, and how many sit at zero float today.

Why does every handoff need two dates?

Because the gap between them is the only float that handoff has, and a single Due Date column has already averaged the producer's date and the consumer's deadline into one number. Afterwards nobody reading the row can tell which team it came from or how much room is left.

What does a pinned shock result mean?

The successor holds its date however late its input arrives, because it is anchored to a calendar date. Microsoft documents that inflexible constraints override task dependencies, and Oracle is blunter: the system lets you record the dependency and then does not enforce it.

Does this replace the weekly exec update?

No. This pack runs the programme and holds the handoffs between teams, and the engineering status update is the reporting surface above it, reporting variance against the dates this register keeps. An incident postmortem covers the outage that is not a missed handoff.

Where do the design decisions themselves live?

Not here. A programme space holds dates and owners, so the argument that produced a date belongs in an RFC and design doc register and the settled outcome in an architecture decision record. What this register keeps is the handoff those decisions created, and the day somebody last confirmed it.

Put both dates on every handoff

Edit with AI