Skip to content
Authoring Milestones
AutoXXS (320px)XS (375px)SM (640px)MD (768px)LG (1024px)XL (1280px)XXL (1536px)
SketchMaterialiOSTamagui
DataInjectionKeyPatternsServiceTransactionProcessResearchProductQualityPerformanceSpecDomainFunctionTechnologyArchitectureConfigMiddlewareDataDatabaseDrizzleMigrationModelop-sqliteSchemaSQLState ManagementDraftKeystoneMergePatchPatchesPersistenceReactiveRedoStoreUndoTestingDeviceFactoryIsolationTypeScriptZodTopicsCommunicationBidsNVCDesignDesign ImplicationsEducationPedagogyFoundationsPsychologyAttachmentFloodingRelatingAuthentic RelatingUIEditorReact Native

Authoring Milestones

Fragment reference Authoring Milestones
tags
guidemilestone

The mental model

A milestone is a versioned release boundary β€” it groups features and flows into a coherent unit that ships together. It answers: β€œWhat does this release contain, when does it ship, and what is its purpose?”

Milestones are a planning tool, not a project management system. They communicate scope and intent, not task assignments or sprint velocity.

What milestones contain

A milestone has three essential elements:

  1. Identity β€” a name, a target release date, and a status (planned, in-progress, done)
  2. Purpose β€” a {% tldr %} explaining what this release achieves and why it matters
  3. Scope β€” a set of {% includes %} references pointing to features and flows
{% includes ref="feature/add-bookmark" /%}
{% includes ref="feature/remove-bookmark" /%}
{% includes ref="flow/add-bookmark" /%}

The includes references create bidirectional links: the milestone page shows what it contains, and each feature/flow page shows which milestones reference it.

Deciding what ships together

Good milestone scoping asks:

  • β€œCan a user get value from this set of features alone?” β€” a milestone should be independently useful
  • β€œDo these features depend on each other?” β€” co-dependent features should ship together
  • β€œIs the scope achievable in the target timeframe?” β€” over-stuffed milestones slip

The ideal milestone is the smallest set of features that delivers a coherent experience. It is better to ship three focused milestones than one sprawling one.

Relationship to other document types

  • Features β€” milestones include features; features do not know about milestones
  • Flows β€” milestones can include flows when a specific interaction is release-critical
  • Stories β€” stories may span milestones (a journey imagined early may only be completable in a later release)
  • Domains β€” milestones do not directly reference domains; the relationship is implicit through features

Status lifecycle

Milestones move through three states:

  1. planned β€” scope is defined, work has not started
  2. in-progress β€” active development underway
  3. done β€” shipped and closed

Update status as work progresses. A milestone stuck in planned with a past release date is a signal that scope needs revisiting.

Writing the TLDR

The milestone’s TLDR should communicate:

  • What this release enables (in user terms, not technical terms)
  • Why this grouping matters (strategic rationale)

Good: β€œThe first shippable version β€” users can save, organize, and retrieve bookmarks across devices.”

Weak: β€œImplements features 1-5.”

Common mistakes

MistakeWhy it hurts
Milestone per featureIf every feature gets its own milestone, you have no meaningful grouping. Milestones exist to show what ships together.
No clear scopeA milestone without includes references is just a date on a calendar. It communicates nothing about what is planned.
Scope creep without updateAdding features without updating the milestone document creates drift between plan and reality.
Past dates, still β€œplanned”Stale milestones erode trust in the spec. Update or revise when dates slip.
Too largeA milestone with 20 features is not a release plan β€” it is a wish list. Keep scope tight.
Missing TLDRWithout a purpose statement, readers cannot evaluate whether the scope makes sense.

Evolution

Milestones are the most mutable document type. Scope changes as priorities shift, dates move as reality intervenes, and new milestones are added as the roadmap extends. When a milestone is done, keep it in the spec as historical record β€” it documents what shipped and when.

When features slip from one milestone to another, update both documents. The spec should always reflect current intent, not original plan.