
Oleksandr TytarenkoA software project roadmap template: a milestone table with dates, effort ranges, dependencies and linked requirements, plus a filled-in example.
A software project roadmap at the end of discovery is a table of milestones, each with a start date, a target date, an effort range, the milestone it depends on and the requirements it delivers, plus a short list of the assumptions behind it. It answers "what gets built in what order, and roughly how long will it take". Below is the table to copy, how to find the critical path, and a filled-in example with a month-scale timeline.
The word "roadmap" covers two different documents, and mixing them up causes trouble.
| Discovery (delivery) roadmap | Product roadmap | |
|---|---|---|
| Question it answers | How and when do we build this agreed scope? | Where is the product heading over the next year or more? |
| Unit | Milestones with dates and effort | Themes, outcomes, bets |
| Time horizon | Weeks to a few months | Quarters to years |
| Tied to | Specific requirements | Goals and strategy |
| Audience | Sponsor, delivery team, budget holder | Leadership, customers, the wider company |
| Changes when | Scope, team or a dependency changes | Strategy or the market changes |
A discovery roadmap is concrete on purpose. Each milestone should be traceable to requirements, so that when someone asks "why is this taking ten weeks?" the answer is a list of things, not a feeling. It is closer to a delivery plan than to a vision deck. If the project later becomes a long-lived product, a product roadmap can sit above it; the discovery roadmap covers the first release or two.
Use one row per milestone. Seven columns are enough:
| Column | What goes in it | Rule of thumb |
|---|---|---|
| ID | M1, M2, M3… | Never reuse an ID, even if a milestone is removed |
| Name | What exists when it is done ("Offline inspection forms") | A result, not an activity ("Development") |
| Start | Calendar date | Real dates, not "week 3", so holidays show up |
| Target | Calendar date | Not before the start |
| Estimate | Low–high in person-weeks | A range; see below |
| Depends on | The milestone that must finish first | One is usually enough; more means the split is wrong |
| Requirements | IDs of the requirements it delivers | Every Must requirement appears somewhere |
Add a status column (Not started, On track, At risk, Done) once the build starts, and keep a separate list of assumptions next to the table: team size, the date a vendor delivers an API key, a holiday freeze, who tests. Assumptions are what the dates rest on, so they belong on the same page.
Two checks catch most gaps in a draft:
The roadmap section of our discovery phase template sums up the same contents in four lines:
A dependency says one milestone cannot start until another is done. The chain of dependent milestones with the longest total duration is the critical path: any delay on it delays the release, while a delay elsewhere may not. The idea comes from the critical path method, used in project scheduling since the 1950s.
To find it on a small roadmap:
Watch for two warning signs. A milestone that starts before the one it depends on ends is either a mistake or a sign the dependency is partial and should be split. A cycle (M3 depends on M4, which depends on M3) means the work is not really sequenced at all. In software projects, the critical path very often runs through integrations and data migration, because they depend on people outside the team.
Put a low and a high figure on every milestone, in person-weeks, and add them up for the total. A single number at this stage hides how much is still unknown. Steve McConnell's "cone of uncertainty" describes estimate error that narrows as a project's decisions get made (Construx); at the end of discovery the range is narrower than at the first conversation, but it is still a range.
Practical habits:
An invented project: a mobile inspection app for a utilities company, with requirements numbered REQ-1 to REQ-24. Team assumption: three developers and one designer, with a two-week holiday freeze in late December.
| ID | Name | Start | Target | Estimate (person-weeks) | Depends on | Requirements |
|---|---|---|---|---|---|---|
| M1 | Sign-in, roles and device setup | Nov 3 | Nov 28 | 6–8 | — | REQ-1, REQ-2, REQ-3 |
| M2 | Offline inspection forms | Dec 1 | Jan 30 | 14–20 | M1 | REQ-4 to REQ-12 |
| M3 | Billing system integration | Jan 5 | Feb 27 | 8–12 | M1 | REQ-13 to REQ-17 |
| M4 | Reports and supervisor dashboard | Feb 2 | Mar 13 | 6–9 | M2 | REQ-18 to REQ-22 |
| M5 | Pilot and hardening | Mar 16 | Apr 10 | 4–6 | M3, M4 | REQ-23, REQ-24 |
Total: 38–55 person-weeks, target release April 10. M5 waits for two milestones here, which breaks the "one dependency" rule of thumb on purpose: the pilot needs both the integration and the reports. On a real plan you might split M5 so each part has a single predecessor.
The same plan on a month scale (each column is half a month):
Nov Dec Jan Feb Mar Apr
M1 ##
M2 #### ##
M3 ####
M4 ## ##
M5 ## ##
^ release Apr 10
The critical path is M1, M2, M4, M5: the forms are the longest chain, and the holiday freeze sits inside M2. The billing integration (M3) has some slack, unless the billing system owner is slow to provide test access, which goes on the assumptions list.
A roadmap stays useful only if it is updated when the facts change:
Here is how a finished roadmap reads in our example report, made for an invented project called Fieldwise: the total estimate as a range, the release date, a month-scale timeline, the milestone table with status and linked requirement counts, and the assumptions underneath.
In Discovery Phase AI, the roadmap stage holds the same fields: milestones with an ID, dates, a low–high person-week estimate, status, one dependency and linked requirements, a month-scale timeline, and a list of assumptions.
I build Discovery Phase AI, a tool aimed at the writing-and-assembling side of discovery: it drafts the early stages from the decks, documents and call transcripts you already have, and exports one report. Your team still runs the interviews, reviews every draft and makes the decisions.
If you just want to see what a finished discovery looks like, here is a complete sample report for an invented field-service app. No signup needed.
The original of this post is on our blog. Questions or corrections are welcome in the comments.
This post was drafted with AI assistance and edited by a human before publishing.