Software Development with AI 12 min read Updated Jul 16, 2026

How to Plan a Staged Rollout With AI

Turn a release into a staged rollout plan you can defend — cohorts built from your risk rather than round numbers, gates that widen on evidence instead of a timer, and a written difference between pausing and rolling back.

Get the Staged Rollout Prompt

The flag has been at ten percent since March

Nobody decided to stop there. The first two stages went fine, the numbers were unremarkable, and then a quarter happened — an incident somewhere else, a reorg, a launch that mattered more — and widening the rollout stopped being anybody's Tuesday. Ask the team and the answer is honest and slightly embarrassed: it's fine, we just haven't got back to it.

Meanwhile a tenth of your users are on one product and the rest are on another. Support answers questions about both and has learned to ask which one you're on. Every feature built since has to work with either. The flag is now load-bearing, and the branch it guards has quietly become a permanent fork that somebody will be reasoning about in eighteen months. This is the most common way a staged rollout fails, and it never looks like failure — the stages that ran, ran fine. What was missing was a sentence saying what finished meant, and somebody whose job it was to notice it hadn't happened.

Exposure is a separate decision from deployment

The deploy is one event: the code reaches an environment, and either it's there or it isn't. Exposure is a schedule — who meets the new behavior, in what order, and what has to be true before the next group does. Different documents, because they fail differently and have different owners. Conflating them produces the plan everyone has seen, which is a deploy procedure with "start with a canary" at the top and nothing underneath about how the canary gets read.

The reading is the whole difficulty. A deployment step verifies something deterministic: the health check returns 200, the row count is zero, the version string matches. A rollout stage asks a statistical question — is this group doing worse than they were? — and the honest answer is often that you cannot tell yet, because the metric that would tell you needs a week to arrive and this cohort is too small to move it. A plan that can't say "we don't know yet" will instead say "looks fine," which is the same sentence with the uncertainty deleted.

A model will draft one of these from what you give it — the change, the population, the segments you already know are strange, the signals you already collect, and what you cannot undo. That is real help, and a draft is where it stops. It has never seen your traffic, does not know your enterprise accounts have contractual guarantees about result order, and cannot know your outcome metric is attributed on a seven-day window. NewPrompt's part is narrower still: it builds the prompt, in your browser. It doesn't deploy, doesn't touch a feature flag or a traffic router, doesn't pick which users are in a cohort, doesn't change anyone's exposure, doesn't read your telemetry or analytics, doesn't watch a rollout, and doesn't advance, pause, or reverse anything. Cohorts, percentages and bake times that come back in a draft are guesses in a confident font. You run the prompt in your own AI tool, and the release owner checks every number against real data and real system behavior before one extra person sees the change.

Step 1: Draw the line around what you are exposing

Write what changes from the user's side, not the repo's. "The ranker behind job search" is a rollout subject. "PR #4412" is not — a stage boundary has to be something you can describe to support in two sentences.

Then, before any cohort: who is eligible, and who is carved out. The exclusions are where the work is, and they are rarely technical. Accounts with contractual guarantees about how your product behaves. Users already inside another experiment, because two changes on one population produce two results that mean nothing. Internal accounts doing QA, whose searches are not demand. Each exclusion needs a reason and an owner — and one thing more that almost every plan misses: an end. An exclusion is a promise that somebody keeps making, usually with the same flag you're trying to remove, and an exclusion with no resolution path is how a rollout acquires a permanent branch while looking complete.

One sentence more, and it shapes everything: what do you actually believe might go wrong? Not "it might be worse" — the specific asymmetry. A better order for the median searcher can be a worse order for a narrow one, and the people who can't find anything won't file a ticket, they'll leave. That sentence determines which signal you watch and which cohort goes first. Written down, it also survives the meeting where somebody suggests starting at fifty percent.

Step 2: Build cohorts from your risk, not from round numbers

One percent, ten, fifty, a hundred. Everybody writes it; almost nobody derives it. It isn't wrong so much as unearned: those cuts encode a claim about how much exposure your signals can pay for, and that arithmetic usually hasn't happened. A percentage nobody derived is still a percentage people will defend in a meeting.

So build the sequence from what each stage is for. The first group exists to find out whether the thing works at all — usually internal, and worth being clear-eyed about, because staff are not your users and a cohort that can't produce your outcome signal can't advance on it. The second exists to find out whether it's better, which means a real population, big enough to move the metric inside the bake, ideally one that complains loudly. Later stages exist to find out whether it survives scale and the segments you were nervous about, which is why the ones you're nervous about go last rather than never.

When the model hands you a size and you don't have the traffic number to check it against, that's not a gap to fill with a plausible one. Write TBD, name the owner, and say what would settle it — not just "the segment's share" but the arithmetic underneath: the base rate, the smallest change worth catching, the variance. A pilot whose size you can't justify has a specific failure mode: too small to read, so the stage bakes, produces nothing, and advances on the absence of bad news.

Step 3: Say what each stage has to prove before the next one opens

Three gates per stage, and they're different objects:

Two rules the three-gate structure needs, and most plans leave both implicit. First, precedence: gates fire on independent signals, so two can be true at once — latency bad, outcome good — and the plan has to already know which wins. Rollback beats pause beats advance, written once, at the top, because the alternative is discovering you disagree during the thing the gates existed to prevent. Second, the advance gate is the one that gets written as a duration and shouldn't be. "Bake for three days" is not a criterion, it's a wait; a stage widens on evidence, and time is only how long the evidence takes to arrive.

And a fix does not inherit the stage it broke. If a stage pauses, gets a fix, and resumes, that stage bakes again from zero — the version that baked is not the version you're now running, and the temptation to skip the second bake is strongest exactly when the fix felt small.

  • Entry — what must already be true before this stage opens at all. Usually the previous stage advanced, plus something specific: the baseline exists, the exclusion is confirmed, last time's fix baked.
  • Advance — what this stage must prove to earn the next one. Evidence, not elapsed time.
  • Pause and rollback — the two ways it stops, and they are not the same thing. Step 5.

Step 4: Pick signals that can decide, and know when they cannot

Four kinds, doing four jobs. An outcome signal — did the thing get better for users. Limits — the lines that are not traded against the outcome, whatever the outcome does, and there are usually two or three rather than one. And an operational signal, which is normally your support queue and is normally the first to know. Four signals that all move together aren't four signals; they're one, with three witnesses.

Then the part that gets skipped, and it decides whether any of this works: write down what your metric can't do. When is it attributed — and do the arithmetic rather than adding a few days, because a bake of ten days against a seven-day attribution window contains three days of readable data, which is exactly the number you rejected, wearing a bigger one. How much traffic does it need — a cohort under some size produces a flat line whether the change is good or catastrophic. And what's the baseline, precisely: the four weeks before this stage on the same weekday mix, not "last month," because your traffic is seasonal and January is not November. Note those two constraints interact — a sample too short to contain a weekday mix can't be compared to a weekday-matched baseline at all.

You are reading signals that already exist. Deciding which signals should exist, what they should page at, and who gets woken up is monitoring design — a different job with a different document. Where a gate draws its line on a signal you already have is this one's. If a gate needs a signal you don't collect, that's a finding for that other document and a reason this stage isn't ready.

Step 5: Separate holding from undoing

Most rollout plans have one stop, and it's the rollback. That's one state too few, and the missing one is the state most incidents actually want.

A pause stops the widening. The people already on the new version stay on it, nothing reverses, the measurement keeps running, and you've bought time to think. Latency regressed and you know why? Pause. The fix is a day away? Pause. Nobody is being hurt and the number is merely bad? Pause, and go and look properly. A rollback returns exposure to zero, and it costs: you lose the cohort's measurement, you may reverse data, and you pay the point-of-no-return tax if you've passed one. Reaching for it when a pause would do is how a fixable regression becomes a lost fortnight.

So write both, with different triggers, and note that a rollback condition almost always satisfies the pause condition too — which means the rollback line has to name a level pause has already failed to hold, or the two are the same gate with different names. They answer different questions: a pause asks "should this go further?", a rollback asks "should this exist right now?" Users can't complete the core job, or the change is costing something you can't get back: that's a rollback. And what a rollback actually does — the reverse steps, the data, the point of no return, how you confirm it worked, who executes it — is not this document. It's the rollback plan, it has its own owner, and this plan's job is to say when it fires, not how.

Step 6: Write down what finished looks like

One hundred percent is not finished. One hundred percent with the flag still in the code is a permanent branch, a second implementation you now maintain, and a conditional every future change has to reason about. Finished is: everyone eligible has it, it held for a bake, the flag is out, the old path is deleted, and the dashboard is retired.

Which is where Step 1's exclusions come back with a bill. One hundred percent of eligible is not one hundred percent, and the difference is whoever you carved out — and if the flag is the thing enforcing that carve-out, you cannot remove the flag. So a rollout with a permanent exclusion has a permanent flag, and every clause after "held for a bake" is unreachable. That's a legitimate outcome, but only if somebody decides it: this ends in a scoped flag with an owner and a review date. Nobody deciding it produces the same artifact and calls it finished.

Then exposure needs somewhere to live that isn't a Slack thread — which stage, which cohorts, since when, readable on a Monday by someone who wasn't in the room. Rollouts don't stall loudly. They stall by everyone assuming somebody else is watching, and the tell is always the same: the person who could tell you what percentage it's at is on holiday. And look again after the watching stops. The fortnight when everyone is staring at the dashboard is not a representative fortnight.

Common mistakes

The pattern in most of these: the plan produces a decision it hasn't earned the right to make.

  • The internal cohort standing in for users. Staff don't behave like customers, don't share their incentives, and often can't generate the outcome metric at all. Internal answers "does it work", never "is it better", and a stage that advanced on staff enthusiasm advanced on nothing.
  • The stage that advances because nothing bad happened. Absence of a signal isn't evidence when the cohort was too small to produce one, or the metric hadn't landed yet. Silence and safety look identical on a dashboard.
  • Trading a limit against an outcome. Conversion is up and latency doubled, so it widens. A limit that can be outvoted by good news isn't a limit, it's a preference — and writing it down beforehand matters precisely because in the moment, with a green outcome metric on screen, it will feel eminently tradeable.
  • The gate with no margin. "Above baseline" fires half the time by construction, because a baseline is an average. Without a margin and a sustained window you haven't written a gate, you've written a coin flip that pages somebody.
  • One dashboard for the whole rollout. The cohort's numbers are diluted by everyone not in it, so a real problem for the ten percent shows up as a rounding error in the aggregate and the stage advances.
  • Reading the plan as a rollout. It's a candidate somebody has to check against real data — NewPrompt doesn't move traffic, read your metrics, or decide anything about who sees what.

Rolling out a new search ranking model

A jobs marketplace replaces the ranker behind search. The code is deployed already, dark, behind a flag at zero — this document is only about who meets it. Interesting because its outcome metric is slow and noisy, which is the ordinary case and the one where rollout plans quietly fail. Everything below is fictional.

One flag at zero, opened across four stages and an exclusion nobody had scheduled: a bake length that had to be recomputed twice, an internal cohort whose outcome panel reads 0.0%, a limit and an outcome that can never appear on screen together, six numbers left at TBD with names against them, and a definition of finished the exclusions make unreachable
STAGED ROLLOUT — new search ranking model, jobs marketplace
                                              plan v2, nothing exposed yet

WHAT IS CHANGING
  The ranker behind job search. Same query box, same filters, different order.
  Deployed behind a flag that is already live at 0%. The deploy is done; this
  document is about who meets it.

RISK HYPOTHESIS  (the sentence the whole plan is built to test)
  A better order for the median searcher can be a worse order for a narrow one.
  If it is wrong, the people who cannot find jobs will not tell us — they leave.

ELIGIBLE            All job seekers using search. ~1.1M searches/week.
EXCLUDED            - Employer accounts previewing their own listings. Their
                      searches are QA, not demand; they would skew every
                      number below.
                    - The 9 enterprise accounts with contractual result-order
                      guarantees. Legal, not technical. See S4 — this one does
                      not just sit in a list.
                    - Anyone in the active onboarding experiment. Two changes
                      on one population and neither result means anything.

──────────────────────────────────────────────────────────────
BASELINE           The 4 weeks before S0, same weekday mix. Not 'last month' —
                   hiring is seasonal and January is not November.

SIGNALS            Four, doing four jobs. Not four ways of saying one thing.
  outcome     apply-through rate: searches that end in an application
  limit       p95 search latency          <- not traded against the outcome
  limit       zero-result rate            <- not traded against the outcome
  operational "can't find" support contacts per 1k searches

DATA FRESHNESS     apply-through is attributed on a 7-day window. An
                   application today lands in the metric next Tuesday.
      ^ this one line rewrote the plan twice. First draft: 3-day bakes. But a
        3-day bake cannot read apply-through at all — only the two limits,
        which are instant. Second draft: 10 days. Also wrong, and wrong in a
        way worth sitting with: a bake of B days contains only B minus 7 days
        of fully attributed searches, so 10 days is 7 of lag and 3 of readable
        data — the same 3 we had just thrown out, wearing a bigger number.
        And 3 days has no weekday mix, so it cannot be compared to the
        weekday-matched baseline above, which is the comparison this plan
        mandates. Floor: 7 exposed + 7 to land = 14 days for any stage gated
        on the outcome. Nobody caught any of this until the window got written
        down, and then it had to be caught a second time.

GATE PRECEDENCE    rollback beats pause beats advance. If two fire, the
                   stronger one wins and it is not a discussion. Write this
                   once, here, or you will have it at 3pm instead.

──────────────────────────────────────────────────────────────
S0  INTERNAL                                   40 staff, opt-in. Bake: 3 days.
  Entry      Flag live at 0%. Baseline captured. Dana has confirmed the
             enterprise exclusion holds.
  Advance    No crash. p95 within its ceiling (below). Two people who do this
             job say the results look sane.
  Reads      latency, zero-result. NOT apply-through.
      ^ staff do not apply to jobs, so the apply-through panel at S0 reads
        0.0% — and it would mean nothing even if it moved, twice over: the
        cohort cannot produce the signal, and a 3-day bake sits inside the
        attribution window anyway. This is the false positive the plan exists
        to pre-empt. Without the Reads line, somebody stares at an empty panel
        at 9am Thursday and calls it a regression. An internal cohort tests
        whether the thing works. It cannot tell you whether it is better,
        because staff are not the users.

S1  PILOT SEGMENT                              size TBD. Bake: 14 days minimum.
  Who        Candidate: searches using the remote-only filter. Self-contained
             query mix, no employer-brand exposure, and a population that
             complains loudly, which is a feature here.
  Size       TBD — Priya, with Analytics. Needs the segment's share of weekly
             searches AND the arithmetic underneath it: the apply-through base
             rate, the smallest drop worth catching, and the variance. If the
             segment cannot reach a readable sample in 14 days, the segment is
             the wrong pilot — not the bake the wrong length.
  Entry      S0 advanced. The segment's own 4-week baseline exists.
  Advance    apply-through within a band of segment baseline. Band TBD — Priya.
             It is the largest drop we are willing to not notice.
  Pause      p95 above its ceiling for a sustained window. Ceiling TBD, window
             TBD — Ana. Same class of decision as the band: the ceiling is the
             slowest we are willing to ship, and the window is long enough that
             a deploy blip does not trip it and short enough that a real
             regression does not bake.
             Zero-result rate above baseline by a margin, sustained. Margin TBD
             — Ana. It must be a margin: baseline is an average, and a metric
             sits above its average half the time by construction. 'Above
             baseline' with no margin is a gate that fires on Tuesday, forever.
  Rollback   Zero-result rate above a level strictly worse than the pause
             margin — level TBD, Ana. The ordering is the point: every rollback
             condition already satisfies the pause condition, so rollback has
             to name a level that pause has demonstrably failed to hold.
             Or: any result-order complaint from an excluded account, which
             would mean the exclusion leaked.
      ^ six TBDs on this stage and not one of them is coyness. Every one is a
        number somebody has to derive from data this document does not contain,
        and each has a name against it. Note what is NOT TBD: that latency is a
        limit rather than an input to a trade. That part is a decision, not a
        measurement, and it is made here while it is cheap.

      ^ THE CASE THIS GATE EXISTS FOR: p95 goes 180ms -> 850ms in the first
        hour. The pause fires on latency alone, and here is the thing — the
        outcome metric has no opinion yet and will not have one for two weeks.
        When it finally lands at +6%, the pause is eleven days old. Those two
        numbers are never on screen together, and that is the only reason this
        plan is not tempted by them. Put them side by side and +6% is a
        genuinely persuasive argument for shipping 850ms to everybody. The
        limit is written down precisely because the moment it matters is the
        moment it will feel tradeable.

S2  BROAD                                      share TBD. Bake: 14 days.
  Entry      S1 advanced. If S1 paused, the cause is closed and the fix has
             baked through S1 again from zero. A fix does not inherit the
             stage it broke.
  Advance / Pause / Rollback  As S1.

S3  ALL ELIGIBLE                               Bake: 14 days.

S4  EXCLUSION RESOLUTION                       No exposure change. Owner: Dana.
  The 9 enterprise accounts are the only thing standing between this rollout
  and a deleted flag. Either the guarantee gets renegotiated, or it is
  confirmed permanent — in which case COMPLETE below is a lie and this plan
  ends in a scoped flag with an owner and an annual review. That is a decision
  somebody makes on purpose. The alternative is the one every stalled rollout
  arrives at by not deciding.

      ^ on the numbers generally: 1% -> 10% -> 50% -> 100% is a folk sequence.
        Not wrong — unearned. Those cuts encode a claim about how much exposure
        your signals can pay for, and nobody here has done that arithmetic yet.
        A percentage you did not derive is a number you will defend anyway.

──────────────────────────────────────────────────────────────
PAUSE IS NOT ROLLBACK
  Pause    exposure stops widening. The people on it stay on it. Nothing is
           reversed, the measurement keeps running, and you have bought time.
  Rollback exposure returns to zero. Reverse steps, verification, the point of
           no return and who executes it live in the rollback plan, not here.
           This document says WHEN. That one says HOW, and it has its own owner.
      ^ most of what goes wrong in a rollout wants a pause. Reaching for the
        rollback is how a fixable latency regression turns into a day of
        reverse-migration and a lost fortnight of measurement.

OWNERSHIP
  Rollout owner   Priya. Advances stages. Calls pauses.
  Rollback call   Ana (on-call). Does not need Priya, and should not wait.
  Exclusions      Dana. It is a legal boundary and S4 is hers.

COMMUNICATION
  Support gets the S1 date, the segment, and the two sentences describing what
  changed — before S1, not with it. They are the operational signal; a signal
  you did not brief arrives as a surprise ticket.

EXPOSURE TRACKING
  Which stage, which cohorts, since when, in one place somebody reads on a
  Monday. Every rollout that stalls, stalls quietly.

COMPLETE means
  100% of eligible, held 14 days.  AND  S4 closed.  AND  the flag is removed
  from the code.  AND  the old ranker is deleted.  AND  this dashboard is
  retired.
      ^ 100% of eligible is not 100%, and the gap is nine accounts with a
        contract. The flag is what enforces that exclusion — so without S4,
        this plan executed perfectly still terminates in a permanent flag
        guarding a permanent second ranker, which is the exact thing the last
        three lines exist to prevent. A rollout can be run flawlessly and still
        never finish, and it will not feel like failure while it is happening.

POST-ROLLOUT       Two weeks after COMPLETE: did the outcome hold once the
                   novelty and the watching stopped.

This plan changes nobody's exposure. It is a document about who meets what and
when you stop. The flag, the traffic, the numbers and every decision above
belong to the people whose names are on them. Fictional throughout.

Where this fits in NewPrompt

The Staged & Canary Rollout Prompt is the closest thing to a starting point: a copy-paste prompt that takes your release and asks for stages with cohorts and percentages, the gating metrics per stage, the bake time, the halt condition, and the segments to exclude or save for last. It also carries the two rules that separate a canary from a countdown — each stage widens only on evidence and never on a timer alone, and the halt condition must be objective and agreed before it fires. What it doesn't carry is the arithmetic underneath: baselines, how long your metric takes to attribute, how much traffic it needs before it can say anything, the difference between holding and undoing, and what finished means. Those are Steps 3 through 6, and they're yours.

Markdown Output Builder assembles a prompt like that in your browser, and it pays to know precisely what it does before you click through. It ships a real staged-rollout preset — not an empty form — and a good one: five sections mirroring the prompt's own items, tables required, and a strict instruction that the model use every heading in the given order. Two gaps, though. It emits a document contract with no input slot: what comes out says in as many words that there is no source text to summarize, so the release has to go into its goal field or get pasted in afterwards. And it has no rules channel of its own — the rule blocks it emits are markdown, table and consistency rules from fixed lists, none of which can hold a claim about your rollout, and the preset's goal doesn't carry the two either. You can type them into the goal field yourself. Do that deliberately rather than intending to: evidence-not-timer is exactly the rule that erodes under launch pressure, and a rule you have to remember to paste back is a rule that won't survive the third rollout.

Two neighbours, and the seams matter because "deployment" is a crowded word. The Rollback Plan Prompt owns the undo — the trigger, the reverse of every forward step, the data, the point of no return, who makes the call, and how you confirm it worked. This plan says when a rollback fires; that one says what happens next. And the Monitoring & Alerting Plan Prompt is where signals get designed: which exist, what they page at, who they wake. A rollout gate reads signals that already exist and draws its own line on them. If yours needs a signal that doesn't exist, that's a finding for that document and a reason this stage isn't ready.

Zooming out, this plan lives inside a larger arc that the AI Deployment & Release Workflow lays out — readiness, then the deploy and its rollback, then the monitoring and launch checks. Read its shape honestly: there's no staged-rollout step in it, which is the gap this guide fills, and it's worth noticing rather than glossing. NewPrompt supplies the prompts and the order; you run them.

The reason to write the stop conditions down while the flag is still at zero is that you will not agree with yourself later. At 3pm on a Wednesday, with conversion up six percent and latency doubled and a launch date behind you, the case for widening will be genuinely persuasive, and the person making it will be you. A plan written in advance isn't smarter than that person. It just hasn't met the launch date yet, and it's the only version of you that gets to decide what a limit means before there's something to lose by meaning it.

Tools for this guide

Each generates the prompt described above — you run it in your own AI assistant.

Ready-made resources

Reusable prompts and templates for the exact steps in this guide.

Take it further

When this task is one step inside a larger workflow or build.

FAQ

Where do the percentages actually come from, if not from the model?

From your traffic and your metric, and the arithmetic runs backwards from what you need to read. Start at the signal: how much traffic before it can distinguish a real change from a normal Tuesday, and how long until it's attributed? That gives you the smallest cohort a stage can be and still say anything. The stages step up from there at whatever multiple keeps the next one readable while limiting how many people meet a problem before you see it. One percent might be exactly right for you. The point is that it should be an answer, and the reason the model can't supply it is that it needs two numbers only you have.

The first stage passed and I still don't know if it's better. Is that a fail?

It's the normal result, and it's a fail only if you can't say which. An internal stage answers "does this work" — no crashes, nothing absurd, the people who do this job all day think the output looks sane. It cannot answer "is this better", because staff aren't your users and often can't even produce the outcome metric. Advancing out of it on that basis is correct. What's not correct is quietly carrying "passed stage zero" forward as evidence about quality, which is how a rollout arrives at fifty percent having never once tested the thing it was worried about.

We paused two weeks ago and never restarted. What now?

Decide whether to finish it or reverse it, because the state you're in has a cost and it's compounding. A held rollout is two products: two code paths every subsequent change has to work with, two things support has to ask about, and a flag that reads as permanent to anyone who joined after today. Neither answer is embarrassing — a rollout that stops because you learned something is the process working. What's expensive is not answering, and it's why finished needs a definition and an owner from the start: the stall is never a decision, it's a decision nobody noticed they were making.

Do I need a staged rollout for every change?

No, and treating it as a default is its own failure mode. Staging costs real time, real complexity, and a flag somebody has to remove later. It earns that when the change is hard to reverse, when it touches something you can't easily measure in a test, when the population is varied enough that the average hides a segment, or when being wrong is expensive and quiet. A copy change behind three stages is theatre. The question is what you'd learn from the first stage that you couldn't learn otherwise — if the honest answer is nothing, ship it and watch the dashboard like anyone else.