Every workstream in your program is reporting green, but you are fairly sure the program is going to miss its date. What is going on, and what do you do?
5 min readUpdated 2026-08-15
0
Answer
Short answer
Workstream status is reported against local scope while the date depends on the integration between them, so a program can be green everywhere and still miss. Track the joins - handoffs, shared environments, the first end-to-end run - and change what green is defined against.
Was this answer helpful?
Likely follow-ups
→A lead tells you their workstream is green because everything in their own backlog is done. Is that a defensible use of green?
→What is the earliest signal available to you that integration is behind, given no end-to-end test has run yet?
→How would you introduce a program-level exit criterion without it being received as a vote of no confidence in the leads?
→You reset the program to amber and a director asks who is at fault. How do you answer that?
The arithmetic that produces this situation is simple and almost universal. Each lead reports status against the work inside their own boundary, because that is the work they own and can see. The program date, though, depends on the work between those boundaries: the handoff from the API team to the mobile team, the shared schema both need to agree on, the first time the whole thing is run end to end, the migration rehearsal, the security review that no single workstream scheduled. None of that sits inside any one lead's scope, so none of it is represented in any one lead's colour, and a roll-up that averages six greens produces a green with the riskiest work in the program entirely absent from it.
This is why a program can be green for months and then go red in a single week. It is not that six teams simultaneously discovered a problem. It is that the joins finally got exercised, and the joins had never been on anyone's status report.
Loading diagram…
The point of that shape is the missing arrow. There is no edge from the unowned work into the roll-up at all, which is why the roll-up is not wrong so much as it is answering a narrower question than the one leadership thinks it answers.
Test the green rather than asking for it again
Sending a message asking every lead to confirm they are really green produces six confirmations and no information, because you have asked them the same question against the same scope. What changes the picture is inspecting artefacts instead of asking for assertions. The distinction is between a claim and its evidence, and each kind of claim has an evidence form you can go and look at.
Claim from a lead
Evidence that settles it
What its absence means
The API is done
The consumer team is calling it against a deployed instance
Done means merged, not usable
Integration is on track
A run of the end-to-end path, even a partial one
On track means planned, not exercised
Migration is ready
A rehearsal on production-shaped data with a measured duration
Ready means scripted, not timed
Performance is fine
A load test at the committed concurrency
Fine means nobody has looked
We have the people
Named individuals with allocation, not headcount
The named person is on two programs
The right-hand column is the substance of this question. In every row the word the lead used is true within their scope and false at the program level, and that gap is where the missed date lives. A TPM's edge is knowing which words to push on.
The single highest-yield probe is the date of the first genuine end-to-end run. If it is scheduled in the last fifth of the program, the program has no evidence of integration and is green on the strength of hope. Pulling that run earlier, even in a crippled form with stubs for the parts that are not built, converts an unknown into a finding while there is still time to act on it.
Change what green is defined against
Challenging one week's report fixes one week. The durable fix is that program status stops being a roll-up of workstreams and starts being measured against program-level exit criteria that no individual team owns: the end-to-end path runs, the migration rehearsal has completed inside its window, the security review has signed, the shared contract is version-frozen. Each gets an owner, a date and evidence, and each is reported alongside the workstreams rather than inside them.
Sample phrasing for the change, delivered to the leads rather than about them:
From next week the program report carries seven lines instead of six. The seventh is integration, and I own it. It is amber, because the first end-to-end run is scheduled for week fourteen and we have no evidence before then. Your own workstream colours are unchanged and I am not asking you to re-baseline. What I need from each of you is the earliest date you could take part in a partial run with the other side stubbed.
That framing matters because the alternative reads as an accusation. The leads were not lying; the reporting structure genuinely did not have a slot for the work you are now surfacing, and saying so plainly keeps you able to ask them for the thing you actually need.
The incentive that keeps the greens coming
There is a second cause worth naming, and a candidate who names only the scope problem gets a partial mark. Status colours carry consequences. In many organisations an amber triggers a review meeting, a request for a recovery plan, and questions from a director, all of which cost a lead a day they would rather spend on delivery. That makes rounding a marginal amber up to green individually rational, especially if the lead believes they can recover it quietly before anyone notices.
You cannot fix that with a request for honesty. It is fixed by making amber cheap: an amber that produces help rather than scrutiny, and a norm that a workstream declaring a problem early is treated as having done its job. Whether a candidate reaches for the reporting incentives as well as the reporting scope is a fair test of whether they have run a program or only reported on one.
A green roll-up is a statement about six boundaries and silence about the five joins between them, and the date lives in the joins.