Tag: feature flags

  • AI Product Validation: From Promising Demo to Proven Value

    AI Product Validation: From Promising Demo to Proven Value

    You have an AI demo that looks impressive. It answers the happy-path prompt, the latency seems acceptable, and stakeholders can already imagine the launch. The uncomfortable question is whether any of that proves the product is worth building.

    It does not. A useful validation process has to reduce several different risks: whether customers care, whether the workflow helps them, whether the AI performs reliably, whether the economics work, and whether failures remain tolerable. Test those risks in that order and you can make a defensible investment decision without turning production traffic into your debugging environment.

    Define the decision before you design the AI

    The first artifact for an AI initiative should not be a model shortlist or a prototype. It should be a decision contract that states what must become true for the initiative to deserve more investment.

    A practical decision statement has this shape: For a defined user in a defined situation, the proposed capability will improve an observable outcome relative to the current alternative, without breaching named guardrails. If the agreed threshold is met, you will advance. If it is not, you will stop or change a specific assumption.

    Write down these five elements before the experiment begins:

    1. User and job: Name who encounters the problem, when it occurs, and what they are trying to complete. A broad label such as knowledge workers is not precise enough to design a useful test.
    2. Current alternative: Record what the user does now, including manual work, an existing product flow, a rules engine, or simply tolerating the problem. This is the baseline the AI must beat.
    3. Observable outcome: Choose a user or business result, not a model activity. Task completion, time-to-value, corrected routing, rework, repeat use, or downstream resolution can carry more meaning than generations or prompt volume.
    4. Success threshold and guardrails: Decide how much improvement would justify the cost and what must not deteriorate. Safety failures, latency, privacy exposure, retention, and cost per successful outcome can all constrain an otherwise positive result.
    5. Decision rule: State what evidence will trigger expansion, another iteration, a change in direction, or cancellation. Precommitting prevents enthusiasm for a polished demo from moving the goalposts later.

    The threshold is not universal. It should reflect the value of the outcome, the implementation and operating costs, the consequences of errors, and the return available from competing roadmap work. Minimum detectable effect belongs here: define the smallest improvement that would actually change your decision, then size the test to detect that effect. A test that cannot distinguish a worthwhile gain from noise is not a faster test. It is a delayed decision.

    A driver tree helps prevent a common measurement mistake. Start with the desired outcome, connect it to the user behaviors that could produce that outcome, and then connect those behaviors to system-level drivers. For an AI support-triage capability, the outcome might be faster correct routing. Accepted category and priority suggestions are leading signals; downstream corrections, reassignment, and resolution are closer to the outcome. Model classification accuracy matters, but it is only one driver in the chain.

    If the proposal involves an autonomous or semi-autonomous agent, run a precondition check before planning the experiment. Volume, instructions, tolerance, access, and a learning loop expose whether agentic complexity is justified:

    • Volume: Does the workflow happen often enough for automation to create meaningful leverage?
    • Instructions: Can success, constraints, and exceptions be expressed in testable terms?
    • Tolerance: Is the likely failure reversible, detectable, and contained?
    • Access: Can the system use the necessary data and tools with reliable integrations and least-privilege permissions?
    • Learning loop: Can you measure quality, latency, cost, and failures after launch?

    A missing condition tells you what to validate next. Unclear instructions call for more discovery and rubric design. Weak access calls for an integration or data-quality spike. Low error tolerance calls for approvals and a narrower action space. Low volume may mean that a clear workflow, a rule, or better product UX is the better answer. The purpose of validation is not to prove that AI belongs in the solution; it is to discover whether it does.

    Climb an evidence ladder instead of jumping to a pilot

    An oversized pilot often mixes market, usability, model, integration, and operational risk into one expensive test. When the result disappoints, nobody knows which assumption failed. An evidence ladder gives each experiment one dominant question and increases fidelity only after the previous uncertainty has been reduced.

    Question to answerLean experimentEvidence to inspectWhat it does not prove
    Do users care enough to act?Painted door, landing page, waitlist, concierge offer, preorder, or deposit where appropriateClick-through intent, qualified sign-ups, willingness to pay, and continued requestsUsability, AI quality, or scalable delivery
    Can the proposed workflow help?Wizard-of-Oz flow or realistic interactive prototypeTask completion, time on task, errors, material friction, and repeat useWhether an AI system can deliver the experience reliably
    Can the system perform the job?Offline evaluation on a curated golden set plus targeted technical spikesRubric results by case type, failure patterns, latency, and costWhether the complete product changes user behavior
    Does the product improve the target outcome?Feature-flagged A/B test or holdoutPrimary outcome, leading indicators, cohort effects, and guardrailsLong-term stability under every operating condition
    Can it operate within acceptable risk?Capped rollout with approvals, audit logs, monitoring, and rollback controlsHarm and privacy events, reversals, escalations, reliability, and cost per successful outcomeThat future changes will remain safe without continued evaluation

    Use the first row when demand is the dominant risk. A painted-door click is a signal of curiosity, not proof of durable value. A qualified sign-up asks for more commitment. A preorder or deposit, when honest and operationally appropriate, tests willingness to pay. Repeated use of a manually delivered service provides stronger behavioral evidence. Do not collapse these signals into a single conversion metric; they represent different levels of commitment.

    Once demand appears credible, use a prototype or Wizard-of-Oz flow to learn whether the proposed interaction helps. Pretotyping should answer whether the product deserves to exist, while prototyping should answer how it needs to work. Keeping those questions separate prevents a polished interface from disguising weak demand and prevents a crude early interface from killing a valuable idea before its workflow has been understood.

    These experiments still owe users honest expectations. A painted door should reveal that the capability is unavailable after the user expresses interest, rather than pretending it already exists. A concierge or Wizard-of-Oz flow should be explicit about how data will be handled and what follow-up the participant can expect. Deception can manufacture a metric while damaging the trust the eventual product will need.

    Advance when the evidence changes the dominant uncertainty. Strong demand does not authorize a production launch; it authorizes a workflow test. A usable workflow authorizes a system evaluation. An offline pass authorizes limited exposure. Each rung earns the next investment without pretending to answer questions it was not designed to answer.

    Separate model quality from product value

    A model can produce better answers while the product creates less value. Added latency can interrupt the workflow. A retrieval failure can ground an otherwise capable model in the wrong context. A user may spend more time checking and rewriting an answer than doing the task manually. This is why a single accuracy score cannot validate an AI product.

    Build a golden set from the work users actually do

    Eval-driven development starts before production traffic. Build a curated set of cases that reflects real user complexity, then turn your definition of good into a reproducible scoring process.

    1. Define the evaluation unit: Score the completed job whenever possible, not merely an isolated response. An agent that drafts a correct message but sends it to the wrong destination has failed the job.
    2. Represent meaningful variation: Include normal cases, longer and shorter inputs, ambiguous requests, important customer segments, and known edge conditions. A convenience sample of clean happy paths measures demo readiness.
    3. Tag each slice: Label cases by intent, complexity, risk, input type, or other distinctions that could conceal a concentrated failure. Aggregate performance can improve while a critical slice gets worse.
    4. Write a multidimensional rubric: Score correctness, completeness, groundedness, safety, tone, policy compliance, and any task-specific requirements separately. Add latency and cost as system measures rather than blending everything into an opaque average.
    5. Choose a real baseline: Compare the candidate with the current product, manual workflow, rules-based approach, or incumbent model. The relevant question is not whether the candidate looks capable in isolation; it is whether switching produces enough value.
    6. Preserve regression evidence: Keep a stable set for comparisons and add newly discovered failures to an evolving challenge set. This turns production learning into protection against recurrence.

    Keep the measurement layers visible in every readout:

    • Output quality: correctness, completeness, groundedness, tone, safety, and compliance.
    • System performance: retrieval quality, tool execution, policy enforcement, latency, reliability, and cost.
    • User outcome: task completion, time-to-value, edits, rejection, rework, escalation, and repeat use.
    • Business consequence: the downstream result the initiative was funded to improve, along with retention or other core guardrails where relevant.

    Each layer diagnoses a different problem. If output quality is weak, work on context, prompts, retrieval, tools, policies, or the model. If output quality passes but completion does not improve, inspect the interaction and workflow. If users succeed but the cost per successful outcome is unacceptable, narrow the use case or revisit the architecture. A composite score can hide these distinctions at exactly the moment you need them.

    Test the behavior distribution, not a lucky response

    AI output is variable, so a candidate should not pass because one run happened to look good. Use two evaluation modes. A regression configuration should be as controlled as the system allows, with model, prompt, retrieval, tool, temperature, top-p, and seed settings documented where they apply. A production-like configuration should match the variability users will experience and repeat cases often enough to reveal unstable behavior and tail failures.

    • Run candidate and baseline systems on the same cases under comparable settings.
    • Inspect results by slice and failure type, not only the overall average.
    • Repeat stochastic cases so the team sees consistency, variance, and severe outliers.
    • Automate clear rubric checks, but retain human review for ambiguous or high-consequence judgments.
    • Version the model, prompt, retrieval configuration, tools, policies, and evaluation set so a change can be reproduced.

    This creates a release gate instead of a demo contest. Offline evaluation will not prove market value, but it can prevent known regressions, unsafe behavior, and obviously weak variants from consuming customer trust in a live experiment.

    Make the production test answer a business decision

    Production exposure is justified when demand, workflow, and offline performance have enough evidence behind them. The live test should then answer a narrow causal question: does access to this capability improve the intended outcome for the eligible population, compared with the current experience, without violating the operating constraints?

    Instrument the complete causal chain

    Your event schema should connect eligibility to exposure, interaction, system behavior, task completion, and downstream consequences. At minimum, distinguish these moments:

    • The user or account became eligible for the test.
    • The treatment was actually shown or made available.
    • The capability was invoked, whether explicitly or automatically.
    • The system succeeded, failed, timed out, or triggered a safeguard.
    • The output was displayed, accepted, edited, rejected, reversed, or escalated.
    • The target task was completed or abandoned.
    • The downstream outcome occurred, such as a correction, reassignment, reopening, or successful resolution for a support workflow.

    Attach the cohort and the relevant model, prompt, retrieval, tool, and policy versions to the trace. Capture latency, cost, and safety results without indiscriminately logging sensitive payloads. Privacy-by-design and data governance determine which data may be retained, who may inspect it, and how long it should remain available.

    Missing links create predictable misreadings. Without an exposure event, low adoption can be confused with low visibility. Without version information, a regression cannot be tied to a system change. Without the downstream event, acceptance can be mistaken for value even when users later undo the AI’s work.

    Choose the design and sample around the decision

    • Randomization: Choose user, account, workflow, or time window based on where contamination can occur. If people in one account share outputs, user-level assignment may mix treatment and control experiences.
    • Population: Define eligibility before launch. Balance or stratify meaningful groups such as new accounts and power users when their behavior or exposure differs.
    • Primary metric: Select one outcome that can settle the main question. Treat diagnostic measures as supporting evidence, not a menu from which to pick a winner later.
    • Guardrails: Monitor core experience, retention where relevant, time-to-value, safety, privacy, reliability, and cost. Write rollback conditions for unacceptable movement before exposure begins.
    • Effect size and power: Set the minimum detectable effect from the business decision, estimate the required sample, and acknowledge when available traffic cannot support the desired conclusion.
    • Exposure control: Use feature flags, a capped rollout, and a holdout so you can stop quickly and preserve a valid comparison.

    Standard A/B testing fits many product changes. Ranking and retrieval changes can benefit from interleaving when alternatives can be compared within the same experience. Switchback designs can help when time, seasonality, or shared operating conditions make simultaneous assignment misleading. Match the design to the interference in the workflow instead of defaulting to the experiment template you use for deterministic UI changes.

    AI variability also changes the readout. Aggregate outcomes across the multiple interactions users have, compare cohorts, and track confidence intervals over time. A snapshot p-value should not overrule an underpowered test, an unstable effect, or a concentrated safety failure. A statistically inconclusive result means the test did not resolve the decision; it does not prove that the feature has no effect.

    Prewrite the scale, iterate, and stop rules

    I prefer four explicit decision states because they force the readout to connect evidence to action:

    • Scale: The primary outcome clears the meaningful threshold, guardrails hold, important cohorts do not show an unacceptable reversal, and reliability and cost remain viable.
    • Iterate the AI system: User intent is strong, but a defined output or system failure blocks value. The next test should target that failure rather than repeat the same broad pilot.
    • Change the product experience: Offline quality passes, but users cannot discover, trust, control, or efficiently use the capability. Treat this as workflow evidence, not an automatic reason to swap models.
    • Stop or reframe: Demand is weak, the economics cannot work, the necessary data or access is unavailable, or credible risk remains outside tolerance.

    Risk must be part of the launch rule, not a review added after a positive metric appears. Include toxicity and personally identifiable information checks where relevant, enforce least-privilege access, retain appropriate audit logs, and make rollback operational before exposure. For irreversible financial actions, sensitive regulatory decisions, or any workflow where the acceptable error rate is effectively zero, keep a qualified human approval step or defer autonomy. Faster execution does not compensate for an unacceptable blast radius.

    Autonomy should be earned in stages. Begin with assistance that the user can inspect. Move to required approval before actions. Allow autonomous execution only for narrow, low-stakes, reversible actions after stability is demonstrated. Expand permissions and exposure only when monitoring shows that the earlier guardrails continue to hold.

    The experiment does not end at launch. Model behavior, retrieval content, user mix, prompts, tools, and operating costs can change. Continue tracking quality, latency, cost per successful outcome, safety, and cohort behavior. Feed new failures into the evaluation set and keep a holdout when the decision warrants one. A weekly readout should identify what changed, which assumption the evidence affected, and what decision follows; it should not become a tour of every available dashboard.

    Key takeaways

    • Start with a precommitted decision contract: user, job, baseline, outcome, threshold, guardrails, and next action.
    • Validate demand before usability, usability before system capability, and system capability before broad production impact.
    • Compare the AI with the user’s current alternative, not with an abstract standard of impressive output.
    • Measure output quality, system performance, user outcomes, and business consequences separately so failures remain diagnosable.
    • Treat stochastic behavior as a distribution: document configurations, repeat runs, inspect slices, and watch severe outliers.
    • Use feature flags, holdouts, exposure caps, auditability, and prewritten rollback rules to contain risk while learning.

    At your next AI review, ask for the experiment contract instead of another demo. If the team cannot name the dominant risk, current baseline, meaningful threshold, guardrails, and action for each possible result, the next step is not production exposure. It is a sharper test.

    Start with the smallest experiment that could credibly invalidate the idea. Evidence that survives that test earns the right to spend more, increase fidelity, and expose more users.

    References

  • Stop Misleading A/B Tests: Master Sample Size Assumptions for Reliable Results

    Stop Misleading A/B Tests: Master Sample Size Assumptions for Reliable Results

    I’ve learned the hard way that sample size calculators can be both empowering and deceptive. They feel wonderfully precise, but they’re only as trustworthy as the assumptions you feed them. When I lead A/B testing at scale, I treat the calculator as a planning tool, not a verdict—then I systematically validate the assumptions behind it so our decisions stay rigorous and our roadmap stays credible.

    At a minimum, most calculators assume you know your baseline rate, your “minimum detectable effect (MDE),” your desired statistical power, and your significance level. They also quietly assume independent observations, clean randomization, stable traffic quality, and a fixed test horizon with no peeking. If any of those break, the “right” sample size can be wildly wrong—and the test conclusions can nudge teams toward the wrong product or go-to-market bet.

    Baseline and variance come first for me. I estimate the baseline conversion (and volatility) from recent behavior using behavioral analytics, sanity-check it across key segments, and look for seasonality. Tools like Amplitude analytics help me spot anomalies, bots, or instrumentation drift. If baseline is unstable or highly skewed, I either stabilize it with longer lookbacks or narrow the target segment to reduce noise.

    Setting the “minimum detectable effect (MDE)” is where product strategy meets statistics. I work backward from an outcome that actually matters: the revenue, retention, or activation uplift that justifies the opportunity cost of building and running the experiment. If that effect size is implausible given historic lift and variance, I rethink the scope or stack changes into a sequenced set of learning experiments rather than overpromising a single moonshot.

    For power and alpha, I default to 80–90% power and a 5% significance level unless the downside risk of a false positive is unusually high, in which case I tighten alpha. I choose one-tailed tests only when we would not act on a negative result and we’ve explicitly pre-registered that decision; otherwise, two-tailed is safer for real-world ambiguity.

    Randomization and independence are where many tests quietly fail. I randomize at the user level (not session or pageview), guard against cross-device contamination, and ensure consistent exposure via feature flags. If there’s shared context—say, team-based usage or geographic clustering—I account for it via cluster randomization or acknowledge the inflated variance it can introduce.

    Traffic allocation integrity is non-negotiable. I monitor for sample ratio mismatch by comparing observed group splits to the intended allocation and immediately pause if they drift. When SRM appears, the root cause is often instrumentation gaps, eligibility filters applied asymmetrically, or caching layers. Fixing that early preserves trust in every test that follows.

    Fixed-horizon math assumes no peeking. If stakeholders need continuous reads, I use sequential testing methods with alpha spending or always-valid approaches designed for ongoing monitoring. If we commit to a fixed horizon, we stay disciplined: no early looks, no midstream metric swaps, no retrofitted hypotheses.

    Multiple comparisons can quietly inflate false positives. I predeclare one primary metric to decide, define guardrail metrics to protect experience and revenue, and apply appropriate corrections (for example, controlling the false discovery rate) when testing many variants or slicing results by numerous segments.

    Duration and seasonality matter more than most roadmaps admit. I run through full business cycles (at least one complete week for daily patterns, longer for B2B buying rhythms), plan for novelty effects, and watch for behavior settling after initial exposure. If the intervention changes long-run behavior, I extend the measurement window or add a post-test holdout to capture durable impact.

    Not all metrics are binomial. For revenue, time-on-task, or heavy-tailed distributions, I confirm variance assumptions, use robust estimators or bootstrapping, and consider variance reduction methods like CUPED to improve power without overextending duration. The calculator’s simplicity should not mask the data’s complexity.

    Finally, I connect experimentation to product outcomes. I map hypotheses to a driver tree, ensure each test ladders to activation, retention, or monetization, and document assumptions up front so we learn even when results are null. The result is a culture that respects the math and moves faster precisely because we trust our reads.

    Here’s the practical checklist I use before pressing “Start”: validate baseline and variance from recent behavior; set an MDE tied to meaningful business impact; choose power and alpha explicitly; confirm user-level randomization and stable exposure; watch for sample ratio mismatch; align on fixed-horizon vs sequential testing; predeclare a single primary metric and guardrails; run long enough to cover seasonality; use robust methods for non-binomial metrics; and write a brief pre-read so the whole team commits to the plan.

    When we honor these assumptions, sample size calculators become sharp instruments rather than blunt ones. You’ll ship fewer misleading wins, avoid costly false negatives, and build a repeatable experimentation engine that compounds learning—and results—over time.


    Inspired by this post on Amplitude – Perspectives.


    Book a consult png image
  • Unlocking Impact: What Amplitude’s MCP server and experimentation platform teach product leaders

    Unlocking Impact: What Amplitude’s MCP server and experimentation platform teach product leaders

    In my role leading product management at HighLevel, I study the architectures and operating models behind high-velocity learning. I often reference "Amplitude's MCP server and its experimentation platform" as a benchmark for how to operationalize scale, reliability, and speed of insight across complex product ecosystems. That lens informs how I design processes, data flows, and decision loops that turn ambiguity into measurable outcomes.

    Experimentation is the heartbeat of eval-driven development. In practice, that means running disciplined A/B testing, deploying targeted feature flags to de-risk rollouts, and sizing experiments with a clear minimum detectable effect (MDE) so we avoid vanity wins. When teams internalize these habits, we shift from opinion-led debates to evidence-led decisions—and that’s where product-led growth compounds.

    I'm an AI enthusiast, so I think a lot about how experimentation accelerates AI roadmaps. The same rigor that validates UI changes should govern prompts, retrieval strategies, and policy settings for LLM-backed features. By treating AI behaviors as first-class experiment surfaces—and tying them to user activation, retention analysis, and value proposition metrics—we move faster without compromising safety, privacy-by-design, or customer trust.

    Making this work in production demands clean instrumentation and a unified analytics platform. I look for stacks that combine Amplitude analytics with robust observability and CI/CD to ensure we can ship, measure, and iterate continuously. When platform scalability and data governance are baked in from the start, product trios can focus on product discovery rather than firefighting pipelines or reconciling metrics.

    My playbook is straightforward: define decision-worthy questions, map them to crisp success metrics, run right-sized experiments with feature flags, and use consistent analytics to close the loop. Do this well, and you create a durable advantage—faster learning cycles, sharper product positioning, and a culture that lives by outcomes over output. That’s the real lesson I take from platforms that execute experimentation at scale: process and technology are table stakes; what wins is the discipline to learn relentlessly.


    Inspired by this post on Amplitude – Perspectives.


    Book a consult png image
  • How to Run AI-Accelerated Product Discovery and Delivery

    How to Run AI-Accelerated Product Discovery and Delivery

    Your team can turn a behavioral anomaly into a polished prototype within hours rather than over weeks, yet still stall when it is time to choose a problem, approve a test, or act on the result. That is the central trap in AI-accelerated product development: producing artifacts faster does not automatically produce better decisions.

    The useful unit of acceleration is the complete learning loop: detect a meaningful signal, frame the opportunity, explore distinct hypotheses, validate the riskiest assumptions, ship with controlled exposure, and use production evidence to decide what happens next. You need one operating model across that loop, not a collection of disconnected AI shortcuts.

    Key takeaways

    • Optimize for time from signal to a decision backed by evidence, not the number of analyses, prototypes, or tickets generated.
    • Give every investigation an outcome contract: the customer behavior, target cohort, primary metric, guardrails, and decision that the work is intended to inform.
    • Use AI to create alternatives that represent different value hypotheses. More cosmetic variants usually create more review work without expanding what you can learn.
    • Carry the same cohort, metric definitions, hypothesis, and constraints from discovery into the production experiment. This prevents the handoff from silently changing the question.
    • Let agents act only where their permissions, thresholds, audit trail, and rollback path are explicit. Autonomy should expand with evidence, reversibility, and trust.

    Design one loop from a product signal to a decision

    Most teams first apply AI to individual tasks. An agent summarizes a dashboard. A model drafts a product requirements document. A design tool generates a flow. A coding assistant implements it. Each task becomes faster, but the work still waits between tasks because nobody has defined what evidence is sufficient, who can make the next decision, or what outcome the change should affect.

    An agent that discovers more anomalies while the product trio reviews opportunities through the same overloaded process has created a longer inbox. The bottleneck has moved; it has not disappeared. The remedy is to treat a decision-ready hypothesis, rather than an AI-generated artifact, as the unit of product work.

    A practical discovery loop has the following sequence:

    1. Write the outcome contract. Name the customer behavior you want to change, the cohort in which it matters, the primary outcome metric, the metrics that must not deteriorate, and the decision this evidence will support.
    2. Map the driver tree. Break the outcome into observable behavioral drivers. This gives the agent a bounded search space and prevents a broad metric movement from producing an equally broad list of possible features.
    3. Issue an investigation brief. Tell the agent which definitions, segments, releases, and time comparisons it may use; which data it may access; what it should monitor; and whether it may only recommend or may also initiate an approved workflow.
    4. Require an evidence packet. An anomaly should arrive with the affected cohort, direction and materiality of the movement, relevant timing, instrumentation checks, plausible alternative explanations, and the next question worth answering.
    5. Record the decision. The product trio should accept, reject, defer, or refine the hypothesis and state why. That decision becomes context for the next investigation instead of disappearing into a meeting.

    For an onboarding problem, the outcome contract might identify accounts attempting their first meaningful setup, define the activation behavior precisely, name downstream retention and support demand as guardrails, and authorize the agent to investigate friction without changing the customer experience. That is much more useful than asking AI to find onboarding insights. The broad request has no stopping condition and no decision attached to it.

    The driver tree then narrows the investigation. Activation might depend on starting setup, completing required configuration, reaching an initial value-bearing action, and returning to use that value. The point is not to make the tree exhaustive. It is to show which behaviors could plausibly explain the outcome and which are observable in your product data.

    This is where continuous agents can provide real leverage. They can monitor established metrics, inspect funnel and cohort movements, and surface material changes such as an activation decline in a valuable cohort or a retention change following a release. They can also compare segments and assemble supporting context without waiting for a fresh manual analysis request.

    But the alert is not yet an opportunity, and correlation is not a causal explanation. A broken event, a changed identity rule, a traffic-mix shift, or a simultaneous release can resemble a change in customer behavior. Make instrumentation confidence and alternative explanations mandatory fields in the evidence packet. If either is weak, the next action is to improve the evidence, not to generate a feature.

    The product trio still owns the consequential judgment: whether the problem is worth solving, what tradeoff is acceptable, which customer evidence is missing, and whether the likely value justifies the delivery cost. AI should remove investigative toil and expose overlooked evidence. It should not hide a strategic choice inside an automated recommendation.

    Use AI to expand hypotheses without expanding waste

    Generative design changes the economics of exploration. Once a measurable opportunity is clear, high-fidelity flows can be produced in hours instead of stretching across weeks. That makes it practical to inspect several possible mechanisms before production code is written.

    Cheap variation also creates a new failure mode. If every stakeholder can request another screen, the team spends its saved production time reviewing undifferentiated options. The prompt should therefore ask for distinct value hypotheses, not a gallery of cosmetic alternatives.

    Build the prototype brief from the evidence packet. It should contain:

    • Target user and context: the affected cohort, the job it is trying to complete, and the point at which friction appears.
    • Observed evidence: the behavioral signal, qualitative context if available, instrumentation caveats, and alternative explanations that remain open.
    • Value hypothesis: why a proposed mechanism should change the target behavior, stated in a form that can be rejected.
    • Meaningfully different mechanisms: alternatives that change how value is delivered, explained, sequenced, or experienced rather than merely changing visual treatment.
    • Outcome and guardrails: the primary behavior to influence and the accessibility, privacy, brand, reliability, and business constraints that every variation must respect.
    • Instrumentation needs: the events and properties required to tell whether people encounter, understand, use, and benefit from the proposed experience.

    A useful review question is: If these alternatives perform differently, will you learn something about customer value? If the answer is no, the variations probably differ in presentation but not in hypothesis. Asking AI for more of them will not improve the decision.

    Match the validation method to the uncertainty:

    • Concept validation addresses whether the intended user understands the proposition and considers it relevant.
    • Usability validation addresses whether the user can recognize the next step, complete the flow, and recover from confusion.
    • Production experimentation addresses whether exposure changes actual behavior under real product conditions.
    • Cohort-level follow-through addresses whether an immediate movement is accompanied by the activation, retention, or expansion outcome the team ultimately cares about.

    Do not ask a prototype to answer a production question. A polished interaction can expose comprehension and usability problems, but it cannot establish that the experience will improve retention. Conversely, do not consume production capacity to answer a basic usability question that a prototype could resolve before engineering begins.

    Define the decision rule before each validation step. State what evidence would cause the trio to advance the hypothesis, revise it, or stop. This prevents a compelling AI-generated design from becoming the default simply because it exists. High fidelity is a communication advantage, not proof of value.

    Carry the discovery contract into production

    The discovery-to-delivery handoff often introduces more error than the tools remove. A metric is renamed, a cohort becomes broader, a design constraint disappears from the ticket, or an experiment is configured to answer a slightly different question. The team ships quickly and then debates what the result means.

    Prevent that translation loss by treating the outcome contract as a living production artifact. Keep the same definitions and segments across pre-launch discovery and post-launch evaluation. If a definition must change, document the change and revisit the hypothesis rather than pretending the evidence is still directly comparable.

    Before implementation begins, the trio should be able to point to a compact delivery contract containing:

    • The customer problem, target cohort, and value hypothesis.
    • The primary outcome metric and the metrics that protect against unacceptable side effects.
    • The exact event, property, identity, and segment definitions needed for evaluation.
    • The minimum detectable effect, meaning the smallest change that would be consequential enough to alter the product decision.
    • The planned exposure controls, eligibility rules, rollback conditions, and owner.
    • The accessibility, privacy, data-governance, reliability, and brand constraints inherited from discovery.
    • The result that would lead to shipping, iteration, further investigation, or rollback.

    Set the minimum detectable effect before examining experiment results. The question is not merely whether a statistical difference can be found. It is whether the experiment can detect an effect large enough to matter to the decision. If realistic exposure cannot provide decision-worthy power, acknowledge that limitation. Consider a more substantial intervention, a longer evidence path, or a different validation method instead of asking an underpowered test for certainty it cannot provide.

    Risky changes should be gated behind feature flags and delivered through a controlled CI/CD path. A flag limits exposure and creates a rollback mechanism; it does not, by itself, make a release an experiment. You still need stable assignment, defined eligibility, trustworthy instrumentation, and a predeclared interpretation plan.

    Not every change is suitable for an A/B test. Some changes are required, too interconnected for clean isolation, or exposed to too little eligible traffic for a decision-worthy test. The discipline still applies: state the expected behavioral change, release progressively when possible, validate the instrumentation, inspect guardrails, and choose the review point before launch.

    When production data arrives, evaluate more than the aggregate primary metric. Confirm that exposure and events behaved as intended. Inspect the cohorts named in the original opportunity. Check whether the result varies across important segments. Then follow the downstream activation or retention signal that justified the work. Production conditions include latency, reliability, real data, competing tasks, and repeated use; prototype enthusiasm does not remove any of them.

    Finally, record the product decision and feed it back into the system. The agent should know which hypothesis was accepted, what actually shipped, what the experiment showed, and why the team chose to scale, revise, or stop. Without that context, the next automated investigation starts from activity rather than accumulated learning.

    Give agents decision rights, guardrails, and a balanced scorecard

    Agentic workflows become risky when a team discusses autonomy as a general capability. Decision rights need to be assigned to a defined action in a defined context. The same agent may safely monitor an established metric, recommend an investigation, prepare a prototype, and still require explicit approval before changing a customer experience.

    Use the following as a starting policy, then tighten it to your data sensitivity, product risk, and operational controls:

    WorkAgent roleHuman decision gateRequired control
    Monitor an established metricRun continuously within approved read accessMetric definitions and alert conditions approved in advanceAccess boundaries, instrumentation-health checks, and an audit log
    Investigate an anomalyAssemble evidence and recommend hypothesesProduct trio decides whether the signal represents a meaningful opportunityCohort context, alternative explanations, confidence, and traceable queries
    Generate a prototype or implementation draftPrepare alternatives and supporting artifactsDesign and engineering approve customer experience and technical choicesAccessibility, privacy, brand, architecture, and data-use constraints
    Launch a customer-facing experimentPrepare configuration; execute only when policy explicitly permits itNamed owner approves exposure, success criteria, and rollback pathFeature flag, eligibility rules, MDE, guardrails, monitoring, and rollback
    Trigger a CRM or in-app workflowAct only inside preapproved conditionsOwner approves audience, message, frequency, and stop rulesConsent-aligned data, bounded actions, suppression logic, and reviewable history

    The key distinction is not human versus autonomous work. It is whether the action is bounded, observable, reversible, and aligned to an approved outcome. An agent can be highly autonomous inside a narrow monitoring job and strictly advisory when a decision affects customers, commitments, or sensitive data.

    Three governance questions should appear in every agent brief: What may the agent observe? What may it decide? What may it change? Add the owner who reviews its reasoning, the evidence it must preserve, and the mechanism that stops or reverses an action. This turns broad principles such as decision rights, reasoning transparency, and outcome alignment into enforceable operating rules.

    Measure flow, quality, outcomes, and risk together

    A scorecard focused only on speed will reward premature action. A scorecard focused only on business outcomes will hide whether the operating system is actually improving. Track four dimensions:

    • Flow: time to insight, time to action, manual analysis effort, and waiting time between investigation, decision, validation, and release.
    • Decision quality: whether investigations include instrumentation checks and alternative explanations, and whether experiments have a hypothesis, MDE, guardrails, and interpretation rule before launch.
    • Customer and business outcomes: the relevant movement in activation, retention, expansion, or another outcome named in the contract, including differences across the target cohorts.
    • Risk: actions outside approved permissions, privacy or access violations, misleading analyses caused by instrumentation problems, customer-impacting errors, and rollbacks.

    The relationships between these measures are diagnostic. Shorter time to insight with unchanged time to action means the decision queue is now the bottleneck. More agent-initiated initiatives with flat activation or retention means the organization has increased automation, not product value. Lower manual analysis effort paired with weaker evidence packets means the work became cheaper by discarding necessary scrutiny.

    The percentage of initiatives initiated by agents can be useful as an adoption indicator, but it is a poor destination metric. The meaningful result is a shorter, more reliable path to customer and business impact. Keep outcome measures beside time-to-insight, time-to-action, agent-initiated work, and manual analysis effort so local efficiency cannot masquerade as progress.

    Start with one bounded learning loop

    Do not begin by making every product workflow agentic. Choose one recurring, measurable problem in a trusted part of the data, such as onboarding friction, activation, or retention for a defined cohort. Then roll out the operating model in sequence:

    1. Timestamp the current stages from signal detection through decision, validation, release, and post-launch review. This establishes where work actually waits.
    2. Stabilize the outcome, cohort, event, and segment definitions. If the instrumentation is not trustworthy, repair it before automating interpretation.
    3. Run the agent in read-only, recommendation mode. Require the standard evidence packet and audit whether its conclusions can be reproduced.
    4. Connect approved investigations to the prototype brief. Ask the product trio to select among distinct hypotheses and document why.
    5. Carry the selected hypothesis into the delivery contract, feature flag, instrumentation plan, and evaluation rule.
    6. Permit automated actions only after the team has defined bounded permissions, monitoring, stop conditions, ownership, and rollback.
    7. Review whether the loop became faster without weakening decision quality, customer outcomes, or governance. Expand the model only where that balance holds.

    If an agent cannot show how it reached a conclusion, keep it in an investigative support role. If the team cannot state what result would change its decision, pause the experiment design. If cycle time falls but no relevant outcome improves, revisit the opportunity selection and hypothesis quality rather than adding more automation.

    For your next active product problem, write the outcome contract before requesting an AI analysis or prototype. Give the agent a bounded investigation brief, require the trio to compare meaningfully different hypotheses, and move the chosen hypothesis into production without changing its metric or cohort. That single end-to-end loop will tell you more about your AI readiness than a long inventory of tools.

    The test is straightforward: if AI helps you reach a consequential, auditable product decision sooner and learn from the result, it has accelerated product development. If it merely creates more things to review, it has accelerated output.

    References

  • An End-to-End AI Product Workflow From Discovery to Deployment

    An End-to-End AI Product Workflow From Discovery to Deployment

    You have customer interviews, an AI prototype, and a launch request. What you may not have is a defensible chain connecting them. The prototype can look convincing while the team still disagrees about the customer problem, the acceptable failure rate, the limits of automation, and what should happen when the model or a connected tool fails.

    A durable AI product workflow makes those decisions explicit. It connects customer evidence to a bounded opportunity, the opportunity to an interaction model, that model to an evaluation contract, and the contract to a guarded production release. You should be able to trace every automated action backward to a customer need and forward to a metric, an owner, and a recovery path.

    Turn interviews into an opportunity map, not a feature request

    AI products often go wrong before anyone writes a prompt. A customer describes a slow or frustrating task, someone proposes an assistant, and the proposed interface quietly becomes the problem definition. The team then tests whether it can build the assistant instead of whether solving that part of the workflow changes the customer’s outcome.

    Start by defining the discovery boundary. Name the user, the workflow, the outcome the user is trying to reach, and the part of that outcome your product could reasonably influence. Keep interviews in the same outcome or product space when you synthesize them. A small batch of three interviews can be enough to produce a useful first draft, but it is not a universal saturation threshold or proof that you understand the market.

    The sequence of synthesis matters. Analyze each interview on its own before looking for patterns across interviews. That preserves the situation, sequence, and meaning around each customer’s comments. If you combine transcripts immediately, repeated vocabulary can appear more important than the underlying context, and an unusual but consequential problem can disappear into the average.

    1. Write the outcome anchor. State whose behavior or result should change. Avoid a feature-shaped outcome such as “increase use of the AI assistant.” A better outcome describes progress in the customer’s work.
    2. Create one snapshot per interview. Capture the customer’s goal, the relevant sequence of events, key moments, obstacles, current workaround, and evidence supporting each inferred opportunity.
    3. Separate observation from interpretation. Preserve what happened and what the customer said separately from the team’s explanation of why it happened. Label uncertainty instead of filling gaps with generated prose.
    4. Synthesize across snapshots. Look for shared opportunities, meaningful differences, dependencies, and contradictions. Similar wording does not automatically mean the same need.
    5. Organize opportunities before proposing solutions. Build an opportunity solution tree or equivalent map that connects the product outcome to customer opportunities. Keep solution ideas outside the opportunity labels.
    6. Review the generated structure as a team. Ask what was merged incorrectly, what was missed, what lacks evidence, and which branch reflects a solution disguised as a need.

    AI is useful here as a first-pass analyst, not as an authority. It can extract moments, propose opportunity statements, and suggest a hierarchy. Human reviewers contribute product context, recognize important exceptions, and challenge confident-looking inferences. The strongest practical model is an AI-generated draft that the team refines.

    Your exit gate for discovery is not a polished tree. It is agreement on a selected opportunity, the evidence behind it, the customer outcome it should influence, and the opportunities deliberately excluded from the current scope. If the team cannot explain those choices without mentioning a model or interface, it is not ready to prototype.

    Choose assistance or autonomy before choosing the architecture

    The next decision is not which model to use. It is what responsibility the product will accept. An LLM can generate or classify content. An agent wraps model behavior in a workflow that plans, uses tools, retains relevant state, and attempts to complete an outcome. That difference changes the customer promise, the evaluation plan, the permission model, and the consequences of failure.

    DecisionCopilotAgent
    Best task shapeHigh-context work that benefits from judgment, nuance, or brand voiceBounded, tool-heavy work with a verifiable completion state
    Customer promiseDrafts, explains, recommends, or acceleratesCompletes an agreed task within a defined scope
    Human roleReviews and commits the resultSets policy, handles exceptions, and approves sensitive actions
    Default permissionsRead, retrieve, and proposeNarrowly scoped tool access, including only the writes required for the task
    Primary proofUseful, grounded output that improves the user’s workEnd-to-end task success without unacceptable actions or loops
    Failure consequenceA poor suggestion reaches the reviewerA poor decision can propagate into another system

    When the task still depends on tacit knowledge or subjective review, start with a copilot. When it is bounded, tool-heavy, and objectively checkable, consider an agent. The safer product progression is to start assistive and grant autonomy only after success is measurable. Autonomy should be earned capability by capability, not declared at the product level.

    You can make that progression concrete without redesigning the entire experience. Let the product draft first. Then let it recommend a plan and show the evidence behind the recommendation. Next, allow reversible actions through a narrow tool whitelist. Keep approval immediately before actions that affect customers, money, permissions, or durable data. Expand the scope only when production evidence supports the previous boundary.

    Once the responsibility is clear, define the architecture around it:

    • Authoritative context: retrieve relevant product, account, policy, or workflow information before asking the model to decide. A retrieval-first pipeline reduces dependence on whatever happens to be encoded in model weights.
    • Explicit scope: state the role, allowed objectives, prohibited actions, and conditions that require escalation.
    • Controlled tools: expose only the operations needed for the selected job. Apply unit limits and validate tool inputs outside the model.
    • Deliberate memory: separate temporary working state, durable customer facts, and governing policy. Do not treat the entire conversation history as an undifferentiated memory store.
    • Visible checkpoints: show the user what will happen, what data will be used, and which action requires approval.
    • Traceable execution: record retrieval results, model and prompt versions, tool calls, approvals, guardrail events, and final task status.

    This architecture is more durable than a large prompt because each component has a distinct failure mode and owner. Retrieval can be evaluated for evidence quality. Tools can be tested deterministically. Policy can be reviewed independently. The model remains important, but it no longer carries responsibilities that ordinary software can enforce more reliably.

    The exit gate is a written responsibility boundary. The team should be able to say what the product may read, what it may write, what it must never do, when a person intervenes, and how successful completion is verified. If any answer is “the model will decide,” the boundary is still incomplete.

    Write the evaluation contract before optimizing the prompt

    A compelling demo proves that a path can work. It does not establish how often it works, which inputs break it, whether its evidence is trustworthy, or whether it completes the customer’s job at an acceptable cost. Prompt iteration without an evaluation contract tends to optimize whatever the last reviewer noticed.

    Write the contract in product language. For each target task, define the eligible input, the expected outcome, the evidence the product may use, allowed actions, prohibited outcomes, completion criteria, escalation conditions, and fallback. Add latency and cost limits chosen for your product economics. There is no universal threshold that makes an AI workflow production-ready; the important discipline is setting the threshold before seeing launch results.

    Build the evaluation set from discovery evidence. Include representative customer inputs, important workflow variations, ambiguous cases, missing context, conflicting instructions, tool failures, and requests the product must refuse or escalate. Remove or protect sensitive data according to your governance rules. Every case should identify the acceptable outcome, not merely an ideal sentence, because multiple responses may solve the same job.

    For copilots, measure the quality of assistance

    • Time to first token: how long the user waits before the response begins.
    • Response latency: how long the useful result takes to complete.
    • Groundedness: whether material claims are supported by the authoritative context supplied to the model.
    • User satisfaction: whether the assistance was useful in the actual workflow, not merely fluent.
    • Task impact: whether the user completes the selected job faster, with less effort, or with fewer corrections, using the outcome defined during discovery.

    For agents, measure the whole execution

    • Task success rate: successfully completed eligible tasks divided by all eligible attempts. Define completion in the customer’s system of record where possible.
    • Steps per task: the number of model and tool steps required to finish. A rising count can expose inefficient planning or repeated work.
    • Tool error rate: failed, rejected, or malformed tool calls relative to attempted calls.
    • Loop detection: executions stopped because the agent repeated actions or failed to make progress.
    • Guardrail triggers: attempts blocked or redirected by policy. A trigger is diagnostic evidence, not automatically a success or a failure.
    • Human escalation: tasks handed to a person because the agent lacked permission, confidence, context, or a valid recovery path.
    • Cost per successful task: total execution cost divided by successful completions. Cost per request can hide expensive retries and failed runs.
    • Containment rate: eligible tasks completed within the automated workflow without human handling. Publish the eligibility and escalation rules with the metric so teams do not improve containment by narrowing the denominator invisibly.

    These agent analytics complement rather than replace end-to-end task success. A fast response can still be wrong. A low tool error rate can coexist with a bad plan. High containment can be harmful if the agent completes the wrong task. Choose one outcome metric, pair it with quality and safety constraints, and retain the diagnostic metrics needed to find the cause of failure.

    Route failures to the component that can fix them. Unsupported claims point first to retrieval and grounding. Correct plans with failed actions point to tool integration. Repeated steps point to orchestration or stopping logic. Frequent, legitimate escalations may mean the autonomy boundary is too broad. High model scores with low customer satisfaction should send the team back to the opportunity definition or user experience.

    The exit gate is a versioned evaluation suite with release criteria, prohibited outcomes, an approved cost ceiling, and named escalation rules. Run it against every material change to the model, prompt, retrieval configuration, tool contract, or policy. Treat prompts and evaluation cases as product assets under version control, not as text pasted into a dashboard.

    Release through gates and design the failure path

    Deployment is where an AI capability becomes a product promise. The team now has to manage model variability, external tool behavior, changing knowledge, permissions, cost, and customer expectations at the same time. A launch plan that covers only the happy path is unfinished.

    1. Put the capability behind a feature flag. Separate deployment from exposure so the team can stop new executions without waiting for a code release.
    2. Open a gated beta around one bounded job. Limit the eligible users, tool permissions, data scope, and advertised promise. Make it clear whether the product recommends an action or performs it.
    3. Use a canary for broader production traffic. Expand exposure gradually while comparing task success, guardrail events, tool errors, latency, escalation, and cost per successful task with the release criteria.
    4. Change one material layer at a time when practical. Simultaneous changes to the model, prompt, retrieval index, tools, and policy make regressions difficult to attribute.
    5. Expand only after the previous boundary is stable. More users, more tools, and more autonomy are separate risk decisions. Do not bundle them into one rollout.
    6. Keep rollback and fallback distinct. Rollback restores a known model, prompt, policy, or tool version. Fallback gives the customer a safe alternative when the AI path is unavailable.

    Feature flags, gated betas, canary rollouts, incident paths, and rehearsed fallbacks are ordinary operational controls, but they carry unusual weight in AI products because model and tool behavior can drift independently of an application release.

    Design specific degraded states before launch:

    • Model unavailable: preserve the user’s work, explain that automation is unavailable, and offer the established manual path.
    • Retrieval unavailable or evidence missing: do not silently generate an ungrounded answer. Ask for the missing context, provide a limited response, or escalate.
    • Write tool fails: stop, report the actual system state, and reconcile before retrying. Blind retries can duplicate durable actions.
    • Execution stops making progress: terminate the loop at the configured limit and hand over the trace rather than consuming resources indefinitely.
    • Policy or permission check fails: block the action, preserve the audit record, and route the user to an authorized path.
    • Tool behavior changes: disable the affected capability until its contract and evaluation cases pass again.

    Privacy and auditability belong in the release gate, not in a later compliance review. Document what customer data enters prompts, retrieval, memory, and logs; who can access it; how long each class is retained; and how deletion propagates. For actions affecting customers, money, permissions, or durable data, preserve enough detail to reconstruct the input, retrieved evidence, model and prompt version, tool parameters, approval, guardrail result, and final system state.

    The operating stack also needs an ownership decision. Build the workflow logic, data model, and user experience that encode your differentiated value. Consider buying undifferentiated capabilities such as observability, prompt versioning, red-team infrastructure, and policy enforcement when an external component meets your control and governance needs. This build-versus-buy boundary keeps product attention on the parts customers actually choose you for without treating commodity infrastructure as strategically unique.

    The production exit gate should require a visible scope statement, passing evaluations, a feature flag, a rollback target, a customer-safe fallback, usable audit traces, an incident owner, and a tested escalation route. If the team cannot explain what the customer sees during failure, it has not finished designing the feature.

    Keep discovery, evaluation, and production in one learning loop

    Once the product is live, production behavior becomes new discovery input. That does not mean replacing customer conversations with dashboards. Metrics show where the workflow breaks; customer evidence explains what the break means and whether fixing it matters.

    Review failures against the original opportunity map. Concentrated escalation around one scenario may reveal an opportunity that was hidden during initial synthesis. High groundedness with low satisfaction may indicate that the product answered accurately but tackled the wrong job. A growing step count may expose orchestration waste, while a rising tool error rate points to integration reliability. If cost per successful task increases, inspect failure and retry paths before making the model cheaper; optimizing unit cost cannot rescue an unsuccessful workflow.

    Every meaningful production failure should produce at least one durable change: a corrected opportunity assumption, a new evaluation case, a narrower permission, a tool-contract test, a policy update, a clearer interaction, or a revised fallback. That is how customer discovery and operational learning remain connected instead of becoming separate product and engineering rituals.

    Key takeaways

    • Synthesize each customer interview separately before looking across interviews, then review the AI-generated opportunity structure with human judgment.
    • Select a customer opportunity before selecting the AI interface. A fluent prototype is not evidence that the underlying job matters.
    • Use a copilot for judgment-heavy work and consider an agent only for bounded, tool-heavy tasks with verifiable completion.
    • Define task success, prohibited outcomes, escalation, cost, and fallback before optimizing prompts or choosing a model.
    • Measure copilots as assistance and agents as end-to-end execution. Do not mistake latency, containment, or tool-call success for customer success.
    • Release behind flags, expand through gated exposure, and rehearse rollback, fallback, and incident paths before granting more autonomy.

    At your next AI product review, ask to see the outcome and opportunity map, the responsibility boundary, the evaluation contract, and the rollout and recovery plan. If one is missing, pause the launch decision at that handoff. Closing that gap is usually more valuable than adding another prompt, tool, or autonomous step.

    References

  • The Safety of Speed: 180 Deploys a Day, 12‑Minute Releases, 99.8%+ Availability

    The Safety of Speed: 180 Deploys a Day, 12‑Minute Releases, 99.8%+ Availability

    “Speed is not the enemy of safety; it is the prerequisite for it.” I live by this principle. In our organization, the average time from merging code to it being used by customers in production is just 12 minutes, and that short window is fundamental to how we build, ship, and learn.

    In January 2026, we are averaging 180 ships per workday – roughly 20 deployments every hour. Conventional wisdom suggests that to increase stability, you must slow down. I believe the opposite. Speed is not the enemy of safety; it is the prerequisite for it. Accumulating code creates risk; shipping small batches minimizes it. Shipping is our company’s heartbeat.

    Maintaining this frequency while targeting 99.8+% availability has required over a decade of focused investment in systems, principles, and processes. We protect the integrity of our systems through three layers of defense: an automated pipeline that is simple, reliable, and removes the need for manual intervention, a shipping workflow that promotes ownership and uses guardrails as accelerants, and a recovery model that optimizes for mitigating inevitable failures. Here’s how we’ve built each layer so that velocity is our greatest source of stability.

    While our platform consists of various services and frontend applications, I’ll focus here on our Ruby on Rails monolith. It is our core application and the one we deploy most frequently; we also deploy it to three different data‑hosting regions with independent pipelines. Our other services follow similar pipeline principles and safeguards, but the Rails monolith is the clearest example of how we ship at scale.

    The automated pipeline is designed to move code from merge to production as fast as possible while enforcing strict safety checks. It is fully automated, and the vast majority of releases require no human intervention—critical for CI/CD at high deployment frequency.

    Once an engineer merges code to GitHub, two things happen immediately. First, the build: we compile the Rails application and its dependencies into a deployable asset (a slug) in about four minutes. Second, parallel CI: our test suite runs alongside the build; through extensive optimization, parallelization, and test selection, the vast majority of CI builds finish in under five minutes.

    As soon as the slug is built, it’s deployed to a pre‑production environment. CI does not block the progression of the slug to pre‑production. Deploying to pre‑production takes around two minutes. This environment serves no customer traffic, but it is connected to our production datastores, mirrors our production infrastructure variants (e.g., web serving, asynchronous worker), and is configured so that requests exercise the pre‑release code and workers.

    Immediately after deployment, we run and await several automated approval gates. We verify that the application boots cleanly on hosts (boot test), confirm the parallel test suite passed (CI check), and execute functional synthetics using Datadog Synthetics on critical flows—such as loading or editing a Fin workflow. If any gate fails, the release is halted and does not go to production.

    Once approved, we promote the code to thousands of large virtual machines. A deployment orchestrator triggers these deployments simultaneously, while a decentralized, staggered rollout avoids changing the state of the entire fleet at the same millisecond. Within each machine, a rolling restart mechanism removes a process with old code from the serving path, lets it drain gracefully, and replaces it with a fresh process running the new code. From the moment a deployment starts, first requests are served by new code within roughly two minutes, and the vast majority of the global fleet updates transparently within six minutes. When restarts trigger on every machine, production unblocks so the next deployment can begin.

    We treat a stalled pipeline as a high‑priority incident. If the automated system rejects three consecutive release attempts, it pages an on‑call engineer. These are pre‑production blocks, but if the shipping lane stops moving, changes pile up—and our stability relies on building and shipping in small steps. The on‑call’s job is to restore flow so that tiny, safe, frequent updates continue to keep risk low.

    Our shipping workflow is built on extreme ownership: tools assist, but the engineer is accountable for quality and the decision to merge. I insist that you are present when you ship. The practical benefit of a 12‑minute deployment cycle is that engineers remain in the zone, focused on the problem they just solved, and ready to validate behavior as it goes live.

    Stylized rocket launch piercing dramatic cumulus clouds at sunrise, glowing vapor trail symbolizing fast yet controlled delivery; overlaid headline text reads 'The safety of speed' in the sky.
    A rocket lifts into a luminous sky, a metaphor for shipping code fast without breaking things, where precision, automation, and guardrails power 180 safe deployments a day.

    To support this, our deployment system sends Slack notifications the moment code is submitted and as it advances through stages, embeds direct observability links to relevant dashboards and logs in every PR and message, and prompts verification so engineers actively watch the dials and test features in production. It is not acceptable to rely on green builds. You’re expected to watch your change go live and if you’re not prepared to rollback, you’re not prepared to ship. We maintain a no‑blame culture: quick rollbacks and immediate reverts are signs of vigilance and ownership, not failure.

    We make extensive use of feature flags to turn deployment into a non‑event. By decoupling deployment (moving code to servers) from release (turning features on), we shrink the blast radius of change. Flags can be enabled for all customers, a specific subset, or disabled for everyone in under 60 seconds through our backend UI. Engineers can group flags into beta features and run phased rollouts; we also ensure flags work consistently across non‑monolith applications. In the past three months, we created over 560 flags—and we actively manage them to avoid permanent complexity.

    For complex refactors—especially when behavior should not change—we leverage GitHub Scientist, an open‑source experimentation library. It runs candidate logic (new code) in parallel with existing logic (old code) in production, instruments both paths for result and timing comparisons, and keeps existing behavior user‑visible. That means we can iterate on and validate new code under real load without risking the experience, then switch seamlessly when confident.

    When engineers need to go deeper before merging, they can generate a slug and deploy it to a virtual machine, detaching a running production host from the serving path and connecting for manual testing. They can also put a pre‑release slug on a serving machine that handles a small percentage of jobs or web requests. Single‑host validation lets us slice observability to those hosts, compare against the main release, and make low‑level changes safer. Staging is a simulation; production is reality. Testing on a single production host validates assumptions with real‑world data without risking the fleet.

    Our recovery model starts from a simple principle: stop monitoring systems; start monitoring outcomes. Traditional monitoring tells you if a server is healthy; we care whether customers are healthy. We rely on heartbeat metrics—vital signs that represent the core value our product provides—such as the rate at which messages and comments are created.

    Unlike standard uptime checks, heartbeat metrics are binary in spirit. If message send rates dip below baseline, it does not matter if infrastructure dashboards are green. Down is down, and if customers can’t do their job, uptime percentages are irrelevant. By tracking real‑world success rates as a high‑level signal, we catch subtle degradations that traditional alerting either misses or over‑alerts on.

    Because we ship in small, incremental steps and maintain previous releases on our virtual machines, our Time to Recover (TTR) is generally very fast. If a heartbeat metric drops or a critical anomaly is detected right after a ship, the system can trigger an automatic rollback, reverting to the release that was running 20 minutes ago—often restoring service before an engineer responds. For complex issues, engineers can initiate a manual rollback through our deployment UI; doing so also locks the production pipeline to prevent further releases while we investigate and remove problematic code.

    Resumption of service is not the end. Every incident prompts an incident review, and we don’t just fix the bug. We ask, “How did the machine allow this to happen?” Then we harden the system so it cannot happen again. This loop—fast shipping, fast recovery, rigorous learning—compounds resilience over time.

    This operating model aligns to DORA metrics: high deployment frequency, short lead time for changes, low change failure rate, and rapid time to restore service. It’s a CI/CD and SRE‑informed approach that converts speed into a defensive advantage rather than a liability.

    Shipping 180 times a day isn’t a vanity metric; it’s a deliberate choice to protect the customer experience. With a 12‑minute window from code to customer, the feedback loop is tight and engineers retain context—and accountability—for the immediate impact of their work. Maintaining this pace requires more than fast CI; it requires judgment, extreme ownership, disciplined use of feature flags, and a recovery model that monitors outcomes. We rely on human expertise, augmented by these layers of defense, to catch issues before they turn into customer pain. We don’t ship fast despite our need for stability; we ship fast to stay in control of change.


    Inspired by this post on The Intercom Blog.


    Book a consult png image
  • How to Build a High-Velocity Product Experimentation System

    How to Build a High-Velocity Product Experimentation System

    Your team is shipping more often, yet roadmap debates still drag on and too many releases end without a clear decision. That is not high velocity. It is faster production without faster learning.

    High-velocity product delivery reduces the time between identifying a customer problem, exposing a safe change, reading credible evidence, and deciding what to do next. You get there by treating experimentation and delivery as one operating system, with shared outcomes, explicit decision rules, controlled exposure, reliable instrumentation, and rapid recovery.

    Measure velocity at the decision, not the deployment

    Deployment frequency matters because small, frequent production changes shorten technical feedback loops. It belongs beside lead time for changes, change failure rate, and mean time to recovery as part of a balanced view of delivery performance and reliability. But deployment is only one step in the value chain.

    A deployment puts code into production. A release makes a capability available to users. An experiment exposes a defined population to controlled alternatives so you can answer a question. A product decision uses that evidence to scale, revise, or stop the work. When those actions are treated as one event, teams accumulate large batches, launch cautiously, and struggle to identify what caused the result.

    SignalWhat it tells youWhat it cannot tell you alone
    Deployment frequencyHow often code reaches productionWhether users received value
    Release or exposureWho can use the changeWhether the change caused an outcome
    Experiment decisionWhether evidence changed a product choiceWhether the delivery system is reliable
    Change failure rate and MTTRHow safely the system changes and recoversWhether the product hypothesis was right
    Customer or business outcomeWhether the result that matters movedWhich intervention caused the movement

    I would not call a team high velocity merely because it deploys daily. I would look for a short decision cycle: the elapsed time from accepting a product question to recording an evidence-backed decision. Track that alongside the DORA metrics and the outcome the team owns. This prevents a local improvement in engineering throughput from masquerading as product progress.

    You probably have a decision-flow problem if any of these patterns are common:

    • Features are declared complete at launch, with no owner or date for the readout.
    • Teams run tests but define success after seeing the result.
    • Several unrelated changes enter one release, making attribution difficult and rollback expensive.
    • Product reviews discuss shipped items while customer outcomes remain unchanged or unknown.
    • Deployment frequency rises while change failure rate or recovery time deteriorates.
    • Tests repeatedly end as inconclusive because traffic, detectable effect, or measurement quality was never checked before development.

    Do not respond by setting an experiment quota or a deployment target in isolation. Measure the entire path from question to decision, locate the longest wait state, and remove that constraint. The bottleneck may be test execution, approval, instrumentation, exposure control, analysis, or leadership indecision. More work in progress will only hide it.

    Write the decision before you write the feature

    An experiment should begin with a decision that needs evidence, not with a feature searching for justification. Before implementation starts, write a compact experiment contract. It turns a vague bet into a question the team can actually answer and makes disagreement cheaper because it happens before code is built.

    A reusable experiment contract

    1. Customer problem and population: Name the behavior or friction you are addressing, the eligible segment, and any exclusions. Avoid a target such as all users unless the experience and expected response are genuinely uniform.
    2. Outcome hypothesis: State what behavior should change and why. Use a falsifiable form: If this intervention changes this mechanism for this population, then this outcome should move.
    3. Primary decision metric: Choose the one measure that will decide the test. Diagnostic metrics can explain the result, but they should not become alternate finish lines after the fact.
    4. Minimum detectable effect: Define the smallest effect large enough to change the product decision. Setting the minimum detectable effect before an A/B test begins keeps the team from treating ordinary metric movement as a meaningful win.
    5. Guardrails: Identify customer-experience, reliability, trust, and business measures that must not deteriorate beyond the agreed boundary. A primary metric win is not permission to ignore material harm elsewhere.
    6. Measurement conditions: Record the assignment unit, exposure event, analysis population, start condition, required observation window, and known instrumentation dependencies. If the data cannot distinguish eligibility from actual exposure, fix that before launch.
    7. Decision rule: Specify what will cause the team to scale, iterate, stop, pause, or classify the result as invalid. Name the decision owner and the readout date as part of the same contract.

    The MDE is not the smallest movement you would enjoy seeing. It is the smallest movement worth acting on. It also has to be compatible with baseline behavior, eligible traffic, and the observation window. A tiny MDE may sound rigorous, but if the product cannot gather enough evidence to detect it, the team has designed a waiting period rather than a useful experiment.

    Consider a hypothetical activation test. The problem is that new accounts fail to complete a clearly defined first-value workflow. The proposed intervention is a contextual setup guide shown after first login. The primary metric is completion of the activation event. Reliability errors and a relevant customer-friction signal are guardrails. The team scales only if the primary effect meets the pre-agreed MDE and the guardrails hold. Every field points to a future decision; none merely describes the interface being built.

    Use an A/B test when controlled alternatives, stable assignment, and sufficient eligible traffic can answer the question. Use progressive exposure when the immediate question is operational safety or blast radius. Use discovery methods before either of those when the team still cannot state the customer problem or plausible mechanism. Calling every release an experiment does not make it one.

    If assignment breaks, events are missing, or exposure is contaminated, classify the test as invalid. If the data is valid but the primary metric does not meet the success rule, the hypothesis did not earn further investment in its current form. That distinction protects the team from rerunning weak ideas under the label of a measurement problem.

    Decouple deployment, exposure, and rollback

    High-velocity experimentation needs a delivery system that can put code into production without exposing it to everyone. Feature flags, canary releases, and blue-green deployment make that separation practical. Automated tests, observable pipelines, and fast recovery make it responsible.

    At HighLevel, I have helped products move from a weekly release train toward safe daily and eventually on-demand deployments without increasing incident volume. The important lesson was not to search for one breakthrough tool. Smaller batches, tests that fail when they should, immutable artifacts, flags, progressive delivery, and recovery controls had to work as a system.

    A safe experiment-release path looks like this:

    1. Merge a narrow change through trunk-based development, behind a flag that defaults to off for users.
    2. Build and verify one immutable artifact so the tested artifact is the artifact promoted through the pipeline.
    3. Deploy to production and check technical health before beginning customer exposure.
    4. Expose an internal population, canary cohort, or other deliberately limited group appropriate to the blast radius.
    5. Start experiment assignment only after exposure and measurement checks pass.
    6. Monitor the primary metric and guardrails without rewriting the success rule in response to early movement.
    7. Expand, pause, revert, or stop according to the contract. Preserve the result and rationale in the decision record.
    8. Remove the flag after the rollout or rollback path no longer requires it. Give every flag an owner and cleanup trigger when it is created.

    This sequence separates three kinds of failure that demand different responses:

    • Delivery failure: The change causes errors, incidents, or unacceptable system behavior. Reduce exposure, roll back or disable the path, and restore service before investigating.
    • Measurement failure: Assignment, event capture, or eligibility logic is unreliable. Stop interpretation, repair the measurement path, and rerun only if the decision still matters.
    • Product-hypothesis failure: The system is healthy and the data is valid, but the intervention fails the pre-registered decision rule. Stop or revise the bet instead of blaming the pipeline.

    Large batches make all three failures harder to diagnose. Split work so a change can be deployed, observed, and reversed independently. Long-lived branches and release trains increase the amount of unverified work moving together; fast test feedback, contract testing between services, and preview environments reduce the pressure to accumulate that work.

    A calendar restriction can reduce immediate exposure, but it does not create a safe delivery capability. If the organization cannot tolerate a routine deploy on a particular day, treat that as evidence that detection, rollback, staffing, or blast-radius controls need attention. The goal is not reckless release timing. It is a system in which an ordinary, narrow deployment is uneventful and recovery does not depend on heroics.

    Give empowered teams a learning cadence, not a feature quota

    Technical capability will not create velocity if every decision crosses several management and functional handoffs. Durable product trios should own a customer problem from discovery through delivery and readout. Leaders provide the outcome, strategic context, capacity, and non-negotiable constraints; the trio chooses how to learn and what solution, if any, deserves scale. That is the practical value of empowered teams organized around outcomes rather than output.

    Make the operating contract explicit:

    • Leadership owns direction: Define the few outcomes that matter, the time horizon, material constraints, and where evidence could justify reallocating capacity.
    • The product trio owns the learning loop: Frame the problem, choose the method, write the experiment contract, deliver the change, interpret the evidence, and record the decision.
    • Platform and engineering leadership own the paved road: Provide CI/CD, test infrastructure, feature flags, progressive delivery, observability, and recovery mechanisms that teams can use without bespoke negotiation.
    • Data partners own measurement integrity with the team: Standardize event definitions, validate critical events, and make assignment, eligibility, and exposure auditable.
    • Governance owns clear boundaries: Use privacy-by-design defaults, pre-approved experiment patterns, and a short escalation path for work that changes data use, legal exposure, or customer risk.
    • Portfolio forums own reallocation: Use experiment decisions and outcome movement to continue, stop, or redirect investment. Do not turn the forum into a recital of completed tickets.

    A unified analytics platform helps only when teams can trust and compare its events. For every decision-critical event, record the event name, exact trigger, required properties, owner, and validation status. Review taxonomy changes before launch and inspect live data before starting the experiment clock. Otherwise, the organization gains a shared dashboard but not shared truth.

    Keep one visible record for every active bet. It should show the owned outcome, hypothesis, current state, exposure, decision date, result, and next action. Limit final states to scale, iterate with a stated reason, stop, or invalid. This makes abandoned readouts visible and prevents an endless backlog of tests that technically ran but never influenced a decision.

    Planning and learning operate on different clocks. A roadmap may allocate capacity over a longer horizon, while an experiment can invalidate a bet much sooner. Connect them through regular decision reviews and use QBRs to move resources based on accumulated evidence. Do not force a team to continue a disproven initiative merely because the planning document has not reached its next revision date.

    Judge the system with a balanced scorecard:

    • The customer or business outcome the team is accountable for.
    • Decision cycle time from accepted question to recorded action.
    • The share of launched experiments that reach a decision, separated from invalid tests.
    • Deployment frequency and lead time for changes.
    • Change failure rate and mean time to recovery.
    • Guardrail breaches, rollback quality, and unresolved measurement defects.

    No single number should become a target detached from the rest. Faster deployment with rising failures is not healthy. More experiments with weak decisions is not learning. Better short-term conversion with damaged trust is not value.

    Reset the system in 30 days

    You do not need a company-wide transformation program to begin. Use a four-week reset on one product area and two services. The delivery work follows a practical sequence of baselining, reducing batch size, strengthening the pipeline, and publishing a balanced dashboard; the product work adds an explicit question and decision to that same flow.

    • Week 1: Map the real loop. Baseline production deployments by service, lead time, change failure rate, and MTTR. Trace one recent bet from initial question through release and readout. Mark every queue, approval, handoff, manual step, and missing event. Select one owned outcome and one active question for the pilot.
    • Week 2: Make the work smaller and the decision explicit. Choose two services and cut batch size in half. Enable feature flags for new code paths. Write the pilot experiment contract, including its population, primary metric, MDE, guardrails, exposure event, decision rule, owner, and readout date.
    • Week 3: Prove controlled exposure. Improve the fastest relevant test feedback in the pipeline. Add canary or blue-green delivery for one critical service. Deploy the pilot behind a flag, validate telemetry in production, and begin the smallest safe exposure that can support the test design.
    • Week 4: Close the loop. Publish one dashboard showing deployment frequency beside change failure rate and MTTR, plus the pilot outcome and experiment status. Hold the readout, record a scale, iterate, stop, or invalid decision, and run a retrospective focused on the next constraint to remove.

    At the end of the month, success is not a dramatic improvement in every metric. Success is evidence that the operating loop works: a baseline exists, a narrow change can move independently, exposure is controlled, decision data is trustworthy, one bet reaches an explicit disposition, and the next bottleneck is visible. That is enough to choose the next product area without pretending the system is already mature.

    Key takeaways

    • Define velocity as time to an evidence-backed product decision, then use deployment frequency as one enabling signal rather than the goal.
    • Pre-register the hypothesis, primary metric, MDE, guardrails, measurement conditions, and decision rule before implementation begins.
    • Separate deployment from user exposure with feature flags and progressive delivery so changes can be small, observable, and reversible.
    • Pair delivery speed with change failure rate and MTTR; pair experiment results with customer, reliability, and trust guardrails.
    • Give a durable product trio authority over the full learning loop, while leaders set outcomes and governance supplies clear boundaries.
    • Start with one product area, complete one question-to-decision cycle, and remove the bottleneck that cycle exposes.

    Take one active roadmap bet tomorrow and ask for its decision rule, MDE, guardrails, exposure plan, and readout owner. If the team cannot write them, do not accelerate the build yet. Fix the question first. Then ship the smallest reversible change that can answer it, record the decision, and use what you learn to make the next cycle safer and shorter.

    References