Recurring Decisions
This page catalogues a series of decisions you will want to make in a product team, spanning the why, what, and how. To make those decisions I've given a set of possible signals you can observe. These are exactly the same signals as in the field guide, but organised under the decisions, and repeated if necessary. Which ones you pay attention to will be a function of history, emphasis, and ability to collect. The signals are ordered from early to late, and it is important to keep an eye on signals from different time horizons.
Build
Can we make the thing?Is this change technically correct, and safe to merge?
Extremely important for AI coding agents to apply many of the deterministic and automatic signals here. Each of the earlier signals you incorporate into your development lifecycle, if you apply them correctly, will tend to save you bugs and issues in the longer term.
- 300msIDE inline feedbackhighpush
- 500msSyntax / parserhighpush
- 2sType systemhighpush
- 3sHot reload / REPLmedpush
- 30sLint / static analysismedpush
- 1minRuntime schema validationhighpush
- 1min◆ Pair / mob programmingmedpush
- 1minSecrets detectionhighpush
- 2minUnit testshighpush
- 5minAI code reviewmedpush
- 10minCoverage / mutation testingmedpush
- 10minIntegration testshighpush
- 10minVisual regression testingmedpush
- 30minE2E testsmedpush
- 30minSAST / code security scanmedpush
- 1hrError monitoringhighpush
- 12hr◆ Code reviewmedpush
- 1wk◆ Bug reportsmedpush
Is production healthy right now?
These loops have to be always on, and typically have to be pushed to you so that if something isn't behaving within the right bounds, you can intervene without constantly looking at dashboards. Take care that the checks are push. If they are pull, customers will be telling you about outages.
- 5minSynthetic monitoring / uptime checksmedpush
- 15minAlerts / on-call pageshighpush
- 1hrRuntime security detectionmedpush
- 1hrAPM / distributed tracinghighpull
- 1hrMemory / resource utilizationmedpush
- 1hrError monitoringhighpush
Can we keep shipping safely?
If we neglect parts of the development process, things can start breaking more. It might be we have a tendency to miss something before a deploy, or the issues may be subtler. If we are getting signal back from these loops, it's a sign there's a gap earlier in the SDLC.
- 30minCanary / progressive rollouthighpush
- 1d◆ Chaos engineering / game dayshighpull
- 1wkSLO / error budget burnhighpush
- 1moChange failure ratemedpull
Could an adversary get in, and would we know?
You can never be certain that a mistake won't be introduced, but you can do all you can to make sure you are staying on secure dependencies and that you don't slip up (or that you find out about your slip-ups before an adversary does).
- 1minSecrets detectionhighpush
- 30minSAST / code security scanmedpush
- 1hrRuntime security detectionmedpush
- 1d◆ Threat modelingmedpull
- 1dSCA / dependency vulnerabilitiesmedpush
- 1dCloud misconfiguration / CSPMhighpush
- 1wkDAST / automated web scanningmedpush
- 2wk◆ Bug bounty / VDPhighpush
- 2wk◆ AI red-teaming / adversarial evalshighpull
- 1moOpen vulnerability age / patch SLAhighpull
- 3mo◆ Pen test / red teamhighpull
What broke, and what do we learn from it?
We want to make sure that we learn from anything that goes wrong, and decrease the time it takes to recover. Ideally we look forward at the shortcomings of our system to work out where we could be exposed.
- 1d◆ Pre-mortemslowpull
- 1wk◆ Incident post-mortemshighpull
- 1moMean time to restoremedpull
Is it fast enough for real users?
End-user performance is exceptionally important for take-up and a pleasurable user experience. Without keeping a close eye on this, it is very likely we'll introduce performance regressions as the system becomes more capable.
- 3minBundle size / asset weighthighpush
- 10minLighthouse / synthetic performancehighpush
- 30minBenchmark testsmedpush
- 1hrModel latency / time-to-first-tokenhighpull
- 1wk◆ Load / stress testingmedpull
- 1moCore Web Vitals (field / RUM)highpull
- 1moCapacity / scaling signalsmedpush
Is our delivery machine healthy?
Often people optimise for resource efficiency (higher utilisation). This works against flow and responsiveness; the overall delivery machine is much more efficient when we drive down batch size and the number of things we work on at once, and permit some amount of slack in the system so items can move through the process effectively.
- 1d◆ Daily standupmedpush
- 1dWIPhighpull
- 1dBuild & CI durationmedpull
- 2d◆ App store review gatemedpush
- 3dWork item agemedpull
- 2wkTask cycle timemedpull
- 2wkThroughputmedpull
- 1moPR cycle timemedpull
- 1moDeployment frequencymedpull
- 1moLead time for changesmedpull
- 1moSprint predictability (say:do ratio)lowpull
- 1moFlow efficiencymedpull
Where should we invest in the codebase?
If we're often reworking the same piece of code, it's a sign that one area of code has multiple reasons for change, and there may be an opportunity to tease apart those multiple concerns into separate components. It is gratifying on the occasions when this makes the codebase more capable than it was.
- 5minUnused code / dead exportsmedpull
- 10minCode complexity & coupling metricsmedpush
- 1wkRework rate / code churnmedpull
- 1moHotspot analysis (churn × complexity)highpull
- 1moDependency freshness (libyear)highpull
- 1yr◆ Tech debt accumulationlowpull
Can we even build this?
Sometimes we simply can't tell off the top of our head whether something will work, and we need to get a bit further along. This gives us sharper visibility.
- 1d◆ Feasibility spike / throwaway prototypehighpull
- 1wk◆ Technology / model evaluationmedpull
- 1wk◆ Design / RFC reviewmedpull
Can downstream consumers trust the data?
It may be that our abstraction mistakenly conflates data modelling and data transport, or we have an error with codecs/marshalling. If we're interacting with important systems to deliver our service to customers, we can improve reliability by automatically testing the requirements of those systems.
- 15minData quality testshighpush
- 1hrPipeline freshness / data SLAshighpush
- 1dData anomaly detectionmedpush
Is the AI feature actually good?
The non-deterministic nature of LLM-based features introduces new failure modes. If a model is changed or quantised, this can wreck useful functionality. Where several parts make up a prompt, changing one can impact the whole result. If input or prompt data can be influenced by the customer, we can get completely unanticipated results due to the way the parts of the prompt interact.
- 30minEval suite / golden-set regressionmedpush
- 1hrToken / cost per requesthighpull
- 1hrLLM-as-judge scoringmedpull
- 1dThumbs up/down on AI outputlowpull
- 1wkModel & output driftmedpull
- 2wk◆ AI red-teaming / adversarial evalshighpull
Value
Is it worth making?Should we build this at all?
It is very easy to fall in love with a solution. I've lost count of the number of times I've done it. But the best thing you can do is treat your solution as a series of theories or bets that you have to validate. The moment you interact with real people (or find out that you can't find them), you'll get feedback on those theories.
- 1wkFake door / prototype testsmedpull
- 1wk◆ Weekly discovery interviewshighpull
- 1wk◆ Feature request board / upvotesmedpull
- 2wk◆ Kano surveymedpull
- 2wk◆ Opportunity scoring (importance vs satisfaction)medpull
- 2wk◆ Willingness-to-pay researchmedpull
Can people actually use it?
Our own mental models of how software should be used often don't correspond to the mental models that our users have. When we move to implementation, our usability then has 'gotchas' that aren't as visible to us. This is another area where it's easy to fall in love with a solution, perhaps because it is visually appealing compared to what we had before, or it neatly mirrors what is happening technically. But that's different to meeting as many users as possible where they are.
- 10minAccessibility checksmedpush
- 1d◆ Dogfoodingmedpush
- 1dFirst-click / findabilityhighpull
- 1dClicks / interaction costmedpull
- 1d◆ Task ease (SEQ / SUS)medpull
- 1dSession recordings / rage clicksmedpull
- 1wk◆ Beta / early-access programhighpull
- 1wk◆ Usability testshighpull
- 1wk◆ Task success ratehighpull
- 1wk◆ Time on taskmedpull
- 1wkFunnel / drop-off analysishighpull
Did the thing we shipped actually work?
After we've delivered something, if people don't use it, was this because it wasn't communicated well? Or is it that we were incorrect about the appeal of what we delivered? If people use it, do they get the outcomes they are intended to get?
- 1wkFeature adoption / activationmedpull
- 1wkFunnel / drop-off analysishighpull
- 2wk◆ Sprint review / stakeholder demomedpush
- 2wkA/B experimentshighpull
Do we have product-market fit, and are we keeping it?
Sometimes great initial conversations or marketing and sales motion can disguise the appeal or use of a system, and as we fail to make customers happy or to retain them, we see that what we're doing doesn't have a strong trajectory in the right direction.
- 1dAI synthesis of qualitative streamsmedpull
- 1wk◆ Public reviews (G2 / app stores / Reddit)medpull
- 1wk◆ Churn interviews / exit surveyshighpull
- 2wkSean Ellis PMF surveymedpull
- 1moNPS / CSATlowpull
- 1moStickiness (DAU/MAU)medpull
- 1moTrial / freemium conversionhighpull
- 3moRetention curveshighpull
- 6moExpansion / referral revenuehighpull
Are we priced right?
Our price may not be what we need it to be. If we can find out why, we can hopefully see whether that's to do with our positioning, the expectations of our market, what value our product delivers, or how we communicate that value.
- 1wk◆ Churn interviews / exit surveyshighpull
- 2wk◆ Willingness-to-pay researchmedpull
- 1moTrial / freemium conversionhighpull
- 1mo◆ Win/loss analysishighpull
- 3moPricing realization / discount ratehighpull
- 1yr◆ Pricing powermedpull
Is support scaling with the product?
Ideally we have a process that surfaces and prioritises for the product team the items that create the most burden on support. We also want to make sure that our support function is delivering what it needs to, to help customers achieve what they need.
- 4hrTime to first responsemedpull
- 1dResolution timemedpull
- 1wkTicket CSATlowpull
- 1wk◆ Support ticketsmedpush
- 2wkFirst contact resolutionmedpull
- 1moContact rate / tickets per customermedpull
Reach
Can we get it to people?Which channel deserves the next dollar?
The fast numbers aren't very useful without the slow numbers. It's very tempting to try to drive down a cost, but it might be that customers that are cheaper to acquire also give you less value, so care has to be taken to not optimise for one thing.
- 1dCPM / auction pressuremedpull
- 1dLast-click attributionlowpull
- 1wkAd-spend liquidationhighpull
- 1wk◆ Self-reported attributionmedpull
- 1wkMulti-touch / data-driven attributionmedpull
- 1wk◆ Influencer / sponsorship performancelowpull
- 1wk◆ Events / webinar performancemedpull
- 1moROAS / channel CACmedpull
- 1moIncrementality / lift testshighpull
- 3mo◆ Partnership pipelinemedpull
- 3moBlended CACmedpull
- 6moMarketing mix modelinglowpull
Does this message land with this audience?
These figures are essentially feedback on how effective your creative is, whether through organic social or ads. Did you stop the scroll? How effective was your hook? Do your open loops keep viewers? Are you delivering the payoff? Does this attract regular followers/viewers?
- 4hrOpen ratelowpull
- 4hrClick-through ratemedpull
- 6hrViews / impressionslowpull
- 6hr◆ Comments / audience conversationmedpull
- 6hr◆ Comments & DMsmedpull
- 12hrCompletion / loop ratehighpull
- 1dHook rate / swipe-awaysmedpull
- 1dAudience retention / watch timehighpull
- 1dFollows-per-viewmedpull
- 1dPaid ads CTR / CPAmedpull
- 1dCost per click (CPC)medpull
- 1dEngagement ratemedpull
- 3dLanding conversion rate (CVR)medpull
- 3dContent engagementlowpull
- 3d◆ Cold outreach reply ratesmedpush
- 1wkQuality / relevance scoremedpull
- 2wkFrequency / creative fatiguemedpull
Can we still reach the inbox?
This has two areas of relevance, one for day-to-day operations: if we mess up our reputation with our transactional API (such as Amazon SES), it can cause a lot of pain. There's also cold bulk email against leads, the sharp end, where it is important to use multiple domains and protect your main domain.
- 5minSpam / reject ratemedpull
- 10minBounce ratehighpull
- 15minDelivered / inbox placementhighpull
- 1dUnsubscribe / list churnhighpull
- 1wkSender reputationmedpull
Are we compounding an audience or renting one?
Advertising with a simple X in, Y out relationship can lead to incredible growth for as long as we can support that cash flow, but we don't want to neglect channels where we can multiply our ongoing results each time we invest in them.
- 1dShares & saveshighpull
- 1dFollows-per-viewmedpull
- 1d◆ Community activity & sentimentmedpull
- 2wk◆ PR / press coveragelowpull
- 1moFollower / subscriber growthmedpull
- 1moReferral / K-factormedpull
- 1yr◆ Brand awareness / recalllowpull
Can buyers find us when they go looking?
SEO as a channel has a huge advantage: you are carving out a stream of leads, if you are capable of getting ranked (which depends on how competitive the space is, and how people search for it). But it has the huge disadvantage that it takes a long time to get actual leads. If you are pre-PMF, this may mean that you are trying to get ranked for the wrong thing.
- 1d◆ Keyword research (difficulty vs. potential)medpull
- 1wkTechnical SEO / indexationhighpull
- 1moKeyword rankings / SERP positionmedpull
- 1moOrganic traffic & CTRhighpull
- 1moAI search visibility (AEO / GEO)lowpull
- 1moApp store ratings & ASOmedpull
- 3moDomain authority / backlink profilemedpull
- 6moContent decay / refresh signalmedpull
Is demand converting into revenue?
We want to distinguish whether a stage in the pipeline is performing badly for mechanical reasons that we can fix, or whether we've got a more fundamental issue of positioning or lack of perceived value.
- 1mo◆ Meetings booked / pipelinemedpull
- 1mo◆ Win/loss analysishighpull
- 3moPipeline stage conversionmedpull
- 3moSales cycle lengthmedpull
Team
Can we sustain the people doing the thing?Is the hiring machine working?
Depending on when and how many people we need, some sources may not sustain the candidate flow that we need. We also want to instrument our own process. Some questions to ask ourselves: Are the things we are asking for actually giving the signal we need? Can we reduce the number of stages? The slower one moves, the more likely we are to lose awesome candidates.
- 3d◆ Sourcing response ratemedpull
- 1wk◆ Interview signallowpull
- 1wkOnboarding ramp / time-to-first-commitmedpull
- 1mo◆ Offer acceptance ratemedpull
- 1mo◆ Time-to-hiremedpull
- 6mo◆ Quality of hire / ramp timemedpull
- 6mo◆ Compensation benchmarkingmedpull
Is the team healthy and sustainable?
This area is very, very human. Our own biases can stop us seeing clearly how other people perceive situations. In the end we want to have a workplace, team and organisation that are invigorating and enjoyable.
- 1wk◆ 1:1 sentimentmedpull
- 1wkPulse surveysmedpull
- 1wkMeeting load / focus timemedpull
- 1wkOn-call load / pages per personhighpull
- 2wk◆ Team retrospectivesmedpull
- 1mo◆ Developer experience surveymedpull
- 3moeNPS / engagement surveyslowpull
- 3moBus factor / knowledge concentrationmedpull
- 1yr◆ Attrition / regretted departureshighpush
Are people growing here?
If anything here is a surprise for the person receiving feedback, then it is probable we haven't done a good enough job of communicating in the intervening period.
- 3mo◆ Performance reviews / 360 feedbackmedpull
- 6mo◆ Growth / promotion readinessmedpull
Are we working on the right things?
If the company already has a specific objective, are we aligned with it? If we are trying to find where we can add value, are we considering our options?
- 2wk◆ Opportunity scoring (importance vs satisfaction)medpull
- 3mo◆ OKR check-ins / goal scoringmedpull
Risk & Moat
Do the economics allow success to continue?Do the unit economics actually work?
The basics: are we spending less on our AI than we're getting back, and are we spending less to get a customer than we're getting back?
- 1wkAI / inference spendhighpush
- 3moGross marginhighpull
- 3moBlended CACmedpull
- 3moCAC payback periodmedpull
- 3moPricing realization / discount ratehighpull
- 1yrLTVlowpull
- 1yrLTV:CAC ratiolowpull
How long can we keep playing?
Money in versus money out, and therefore how many months before we have to raise or cut.
- 1dCloud spend / burn alertshighpush
- 1wk◆ 13-week cash flow forecasthighpull
- 1mo◆ Budget vs actuals (monthly close)highpull
- 1moCash collection / DSOhighpull
- 1mo◆ Investor / fundraising feedbacklowpull
- 3moRunway / burn multiplehighpull
Is revenue healthy, not just growing?
Churn/retention can kill things even if top-line growth appears impressive, so make sure you are looking at a balanced set of signals.
- 3moMRR / ARR growthhighpull
- 3moRevenue churn / GRRhighpull
- 3moRevenue concentrationhighpull
- 3mo◆ Revenue forecast accuracymedpull
- 6moExpansion / referral revenuehighpull
What could kill us from outside?
Unfortunately nothing consistent will tell us about the varied activities of platforms, vendors, regulators, fraudsters and competitors.
- 1dFraud / abuse / chargeback ratemedpush
- 1mo◆ Platform / API dependency changeslowpull
- 1mo◆ Competitor launcheslowpull
- 3mo◆ Vendor / provider concentrationlowpull
- 3mo◆ Compliance audits (SOC2 / ISO)highpull
- 6mo◆ Regulatory & legal signalsmedpull
- 1yrChurn by tenure / lock-in strengthmedpull
- 1yr◆ Pricing powermedpull
Dataset v0.23.1 · 204 loops · CC BY 4.0 · cite as: Konrad Bloor, Feedback Loop Field Guide, konradbloor.com/loops