Some questions don't deserve an hour-long meeting. "Should we ship this behind a flag today?" "Do we roll back the migration?" "Is this risk acceptable to merge as-is?" Teams that answer these by re-litigating the same arguments every week burn calendar time and goodwill. A lightweight, explicit Yes/No workflow — anchored by a single die roll — gives you a defensible answer in under a minute and a paper trail the next morning.
This article walks through how to design that workflow so it stays honest, fair, and reversible. It's aimed at tech leads, staff engineers, release managers, and QA leads who need a decision rule the team will actually use under pressure, not a clever hack that falls apart the first time someone disagrees.
Why "Just Roll a Die" Fails Without a Workflow
A naked roll produces two failure modes.
First, post-hoc rationalization. Someone rolls "Yes," then argues the result in their favor. Someone else rolls "No," and reframes the question until the answer suits them. The roll didn't make the decision — it just dressed one up.
Second, ambiguous framing. "Should we deploy on Friday?" means five different things across five engineers. The roll resolves nothing because the team never agreed on what was being asked.
The fix isn't a better randomness source — it's a stricter contract around the question, the roll, and the follow-up. Treat the roll the way you'd treat a feature flag: a small, well-defined mechanism inside a much larger system.
For background on the basic mechanics of using a single die for binary decisions, the Lizely guide on rolling a dice for Yes or No in one click is a useful companion piece that covers the simpler one-off use case.
Step 1: Write the Question as a Boolean Predicate
Before anyone touches a die, the proposer has to rewrite the request as a statement with a clear truth value. Three rules keep this honest.
- Name the artifact. "Roll out the v2 search indexer to 10% of traffic" beats "ship the search thing."
- Name the deadline. "By 17:00 UTC today" or "before the next on-call handoff." A decision without a clock is just an opinion.
- Name the rollback path. "Auto-revert if error rate exceeds 1% for five minutes." If you can't describe how to undo it, you don't yet have a decision — you have a bet.
A predicate that survives these three tests usually reads like a runbook step. That's the goal: the roll decides whether to execute a step you've already written.
Step 2: Define Who Rolls and When
Most "random" workflows collapse because the trigger is social, not technical. Two designs that hold up:
- Synchronous stand-up roll. At a fixed time (end of standup, start of release review), the on-call engineer reads the predicate aloud and clicks the roller. Everyone hears it. The result goes into the channel immediately.
-
Async pull-request comment roll. The proposer opens a PR titled
DECISION: <predicate>, requests a roll via a comment, and pastes the outcome into the thread. The PR either merges (Yes) or closes (No) based on that outcome.
The async version is friendlier to distributed teams, but it loses the social pressure of "we all watched." Pick by team topology, not by preference.
Step 3: Pick the Mapping Rule and Stick to It
A six-sided die has six outcomes. You need a mapping to {Yes, No} that no one can game after the fact. Three options, in increasing strictness:
- Odd = Yes, Even = No. Symmetric. Easy to remember. Works fine for low-stakes decisions.
- 1–3 = Yes, 4–6 = No. Equivalent statistically, but feels less "fair" to people who prefer even splits. Document it anyway.
- Threshold of two rolls. Roll twice; both must land in the Yes range. Halves the false-positive rate and adds a small "consensus" feel. Useful for decisions above a defined cost ceiling.
Whatever you pick, write it next to the predicate in the same message. Auditing "what did we actually decide, and how?" should require zero tribal memory.
Step 4: Capture the Result in a Decision Record
This is the part most teams skip, and it's the part that makes the whole practice defensible six months later. A minimal record fits in one chat message:
DECISION: roll out v2 indexer to 10% traffic by 17:00 UTC
MAPPING: odd = Yes, even = No
ROLL: 4 (No)
OUTCOME: No — postpone to Monday standup, revisit with canary metrics
REVERT: N/A (no change deployed)
RECORDED: 2025-08-12, by @oncall
For higher-stakes decisions, store the same fields in a decisions.log file in your infra repo or in a dedicated channel that's pinned in your team docs. Treat it the way you'd treat post-mortem notes: short, factual, time-stamped.
Step 5: Audit Outcomes Quarterly
A workflow that can't be reviewed will drift. Every quarter, pull the last 30–60 decisions and ask three questions:
- Distribution. Did Yes/No come out roughly where intuition says it should? A 95% Yes rate means the predicate isn't actually contested — and the roll is theater.
- Reversal rate. Of the Yes outcomes, how many were rolled back within 48 hours? A high reversal rate means your predicate is missing real risk, not that the roll is broken.
- Predicate quality. Look for decisions where the team spent more time arguing the question than the answer. Those are candidates to rewrite, not to re-roll.
The point of the audit is to pressure-test the workflow, not to second-guess individual rolls. If a particular roll looks bad in hindsight, that's a lesson about the predicate, not about randomness.
Trade-offs Engineers Should Expect
No workflow is free. A few honest ones:
- Social cost of "No." Some teams treat a No as a personal verdict. Pre-write how No outcomes are phrased ("the roll said No, so we wait until Friday") so the result lands on the question, not the proposer.
- Pressure to "just decide." A roll is a tiebreaker, not a substitute for judgment. If the room is already 90% aligned, don't roll — just decide. Save the mechanism for the 50/50 splits where discussion is stalling.
-
Tooling dependence. A browser-based roller is convenient but introduces a tiny surface for "the page was down, so I rolled in my head." Pin the tool or bookmark it in the team's runbook. The MDN page on the
Window.cryptoAPI is a good reference if you ever need to verify that a browser tool is using a sound entropy source under the hood.
For teams that want a stricter statistical underpinning — say, to defend the workflow during a compliance review — the Wikipedia overview of pseudorandom number generators explains why browser-provided randomness is sufficient for non-cryptographic decisions and where its limits sit.
A Pre-Roll Checklist You Can Paste Into Your Runbook
Before any roll, the proposer confirms each item:
- The predicate names a specific artifact, change, or action.
- A deadline is attached, in UTC, and visible to all participants.
- The rollback path is written down, even if it's "revert the merge commit."
- The mapping rule (e.g., odd = Yes) is stated in the same message as the predicate.
- The chosen roller and the exact moment of the roll are recorded.
- A named owner is responsible for posting the decision record within ten minutes.
- The decision record lands in a durable location (chat thread, repo file, or ticket comment).
If any item is missing, the roll is postponed. That single rule is what keeps the practice from degrading into noise.
Frequently Asked Questions
Won't a random roll undermine engineering rigor?
Not if the roll is the last step, not the first. Engineering rigor goes into writing the predicate, identifying the rollback path, and choosing the mapping. The roll only resolves the residual disagreement that can't be settled by data in the available time.
What if the team disagrees about the mapping rule after seeing the result?
That's a process bug, not a randomness bug. The mapping must be declared before the roll, in the same message as the predicate. If anyone proposes changing the rule after seeing the outcome, treat that as overturning the decision entirely and start over with a new predicate.
How is this different from just flipping a coin?
It isn't, statistically — and that's the point. The workflow's value is not in producing a fairer answer than a coin; it's in producing a legible, auditable one. A coin flip in a meeting leaves no record. A roll with a documented predicate, mapping, and outcome gives the next on-call engineer something to learn from.
What should we do when a Yes roll turns out wrong?
Run the rollback path you wrote in Step 1, then add a line to the decision record: "Outcome: rolled back at HH:MM, reason: ." Use the quarterly audit to figure out whether the predicate was wrong, the mapping was wrong, or the world simply changed. Don't blame the roll.
This article was drafted with AI assistance and reviewed for technical accuracy before publishing.
Top comments (0)