HomeJournalThis post

The production handoff starts in the spec

A useful spec carries state, data, ownership, analytics, QA paths, rollout, and cleanup before engineering receives the ticket.

JP
JP Casabianca
Designer/Engineer · Bogotá

The production handoff starts before anyone opens a pull request.

A spec that only describes the happy path is not ready for engineering. It may be enough for a prototype, but production work needs more. It needs state, data, permissions, analytics, rollout, QA paths, ownership, and cleanup notes before the team is under implementation pressure.

This is where product, design, and engineering overlap. A good spec does not remove judgment from the builder. It gives the builder enough context to make better decisions without guessing the product intent.

IntentWhat should change?

User job, current pain, desired behavior, and non-goals.

ContractWhat must be true?

Data, states, permissions, analytics, copy, and system boundaries.

ProofHow will we know?

QA paths, release signals, support notes, rollback, and cleanup.

Figure 1: A production spec needs intent, contract, and proof. Screens alone are not enough.

Screens are the middle, not the whole handoff

Screens are important because they make decisions visible. But a screen cannot carry every production rule.

A settings page screenshot will not always explain:

  • which users can edit the setting
  • what happens while saving
  • what happens if the API fails
  • whether old accounts have a default value
  • which analytics event defines success
  • whether support needs a note
  • whether the release has a flag
  • what cleanup follows the migration

If those rules are missing, engineering fills the gaps during implementation. Sometimes that is fine. Often it creates product drift, because the person building the feature has to infer intent from a static artifact.

Write state before components

I like specs that name states before naming components.

The state list is simple:

  • loading
  • empty
  • populated
  • invalid
  • saving
  • saved
  • failed
  • permission denied
  • stale data
  • long content
  • mobile compression
Data state UI response QA path If the spec names the state, engineering can choose or build the right component with less guessing.
Figure 2: State maps make the handoff more useful than a static screenshot.

Once the states are named, component choices get easier. The engineer can decide whether the existing empty state is enough, whether the form needs optimistic behavior, whether the error belongs inline or at page level, and whether the button should disable or stay active during save.

This is also where design systems become useful. A good system gives the team existing answers for repeated states. A good spec tells the team which states matter in this product moment.

Data rules belong in the product conversation

Data rules are often discovered too late.

Examples:

  • The API returns null, not false.
  • Existing records do not have the new field.
  • The event stream is delayed.
  • The permission model differs between owner and admin.
  • The integration can be connected but unhealthy.
  • The object can be deleted while the drawer is open.

These details shape the UI. They are not backend footnotes. If the interface treats unknown as false, it may lie. If it treats stale data as current, it may erode trust. If it cannot distinguish disconnected from temporarily unavailable, it may send users to the wrong recovery path.

A production-ready spec should include the data states that matter, even if the final API shape is still being discussed.

Analytics should answer the release question

Specs often include analytics as an afterthought: track page viewed, button clicked, modal opened.

That is usually too generic. The better question is: what decision will this release need later?

If the feature is onboarding, the event should tell us whether users reached activation. If the feature is billing, the event should tell us whether plan comparison became clearer. If the feature is admin permissions, the event should tell us whether sensitive changes were completed and recoverable.

QuestionDid behavior improve?

Name the product question before naming the event.

EventMeaningful boundary

Track the action that changes state or commitment, not decorative clicks.

PropertyDebuggable context

Include source, object, role, variant, and failure reason when useful.

Figure 3: Analytics belongs in the spec because it defines how the release will be read.

Include rollout and cleanup

The handoff should say how the feature enters production.

Does it need a flag? Is it all users at once? Is there an old path? What should happen if the new path fails? Who watches first traffic? What temporary code needs removal?

Cleanup is part of the spec because temporary work has a habit of becoming architecture. If a feature needs duplicate components, bridge logic, or a manual migration step, write the cleanup condition before shipping.

The handoff is a trust artifact

A strong spec makes engineering faster because it removes ambiguity. It also makes the product safer because the team has already talked about states, data, and release behavior.

The handoff is not a wall between design and engineering. It is the first production artifact.

Make the handoff meeting shorter

A good spec should make the handoff meeting boring in the best way. The team should not spend the whole conversation discovering states, permissions, analytics, and data assumptions from scratch. The meeting should confirm the important decisions and expose the few things that remain genuinely open.

I like handoff meetings that move through the same sequence every time:

  • user job
  • non-goals
  • data states
  • interaction states
  • analytics question
  • rollout shape
  • QA paths
  • unresolved risks

That sequence keeps the conversation out of taste-only territory. It also gives engineers permission to challenge the product plan early. If the spec cannot explain stale data, partial failure, or old records, the meeting should surface that before the branch exists.

Leave implementation room

A production spec should not over-control the implementation. It should name the constraints and the intended behavior, then leave room for engineering judgment.

For example, the spec should say that invalid field errors need to preserve user input and focus the first failed field. It does not always need to dictate the exact internal helper used to manage that state. The spec should say that the dashboard needs to distinguish zero from unknown. It does not need to prescribe every query detail before engineering validates the data model.

The handoff is strongest when it defines product truth and lets the implementation find the cleanest path to that truth.

Companion artifacts

Use this after reading.

Practical downloads and templates that turn the article into something you can bring into a product review, implementation pass, or agent workflow.

TemplateJun 2026

Product Spec Agent Template

A pasteable agent-context template for product specs, constraints, states, acceptance criteria, and QA.

ProductAI agentsSpecs
View details
TemplateJun 2026

Handoff Notes Template

A build-ready handoff format for scope, states, interactions, open questions, analytics, and QA.

HandoffEngineeringQA
View details