<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Mohammad Reza Notes — Product Manager — marketplaces &amp; e-commerce</title><description>Product management case studies and notes by Mohammad Reza, a product manager working on marketplaces and e-commerce.</description><link>https://mrmansouri.ir/</link><item><title>The Color of a Day</title><link>https://mrmansouri.ir/notes/the-color-of-a-day/</link><guid isPermaLink="true">https://mrmansouri.ir/notes/the-color-of-a-day/</guid><description>The bullet-journal habit that became Producktive: coloring each day black, blue, green, or red until I could see whether it was a productive day or just a busy one.</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently I built a productivity tool, &lt;a href=&quot;/projects/producktive/&quot;&gt;Producktive&lt;/a&gt; — you can read there how it works. This note is about the part that came before: how I got to the idea in the first place.&lt;/p&gt;
&lt;p&gt;I used to work a lot, but I saw no progress. Then I got into journaling — bullet journaling especially — and started writing down the tasks I did each day. At first just with a pen, marking the type of each entry: a square for a to-do, an &quot;e&quot; for an event. I wrote a lot. But it was hard to read a day at a glance, and the one thing I most wanted to know, the pages couldn&apos;t tell me: was this a productive day, or just a busy one? I was filling pages either way.&lt;/p&gt;
&lt;p&gt;One random day, I thought about using colors instead. I started with two: black for grunt work — the tasks I had to do but saw no value in for myself — and blue for the meaningful ones. Right away it gave me something the marks never had: I could see the balance of a day, and I had a goal I could act on — more blue.&lt;/p&gt;
&lt;p&gt;Then I felt I needed another color. Life isn&apos;t only about work — there are things you do just for yourself: seeing a friend, watching a movie, going for a walk. I gave those their own color, green, and the goal grew: more blue, and more green.&lt;/p&gt;
&lt;p&gt;Red came last. Life isn&apos;t always kind — you get sick, something goes wrong, a day just falls apart, and you can&apos;t expect much of yourself. Red was for those days: not a failure to fix, just the truth of the day, marked and left behind.&lt;/p&gt;
&lt;p&gt;For the first weeks, the pages came out mostly black. So I started changing how I actually spent my days — more blue meant more meaningful work, more green meant taking better care of myself. It worked. Over time, black became the minority.&lt;/p&gt;
&lt;p&gt;I kept this up in a physical notebook for a couple of months, until I ran out of pages. I went looking for the same one and couldn&apos;t find it; the calendars I found weren&apos;t what I wanted. So it sat on my shopping list for a while, unresolved.&lt;/p&gt;
&lt;p&gt;Around then I started using Claude, and within a week I could feel what it made possible: I could build the thing myself. So I did. I took the notebook and turned it into an app — Producktive. I worked it as a product first, then designed it, then wrote the code — all of it mine, end to end. And I built it the way I think products should start: small, a tight MVP, deliberately minimal so it stays easy to change later.&lt;/p&gt;
&lt;p&gt;Of the ideas I had, this was one of the simplest — which is the point. Building something is easy now; building something with a reason to exist is the hard part, and a simple idea gives you nowhere to hide.&lt;/p&gt;
&lt;p&gt;I&apos;m still building it, and I&apos;ll probably release it as an app before long. For now it&apos;s a side project — my playground, the place I get to practice everything at once: product, design, and code. But underneath all of that, it&apos;s still doing the one thing the notebook did for me: at the end of a month, I can look back and see, in color, what my time actually added up to. I&apos;d love to hear what you think.&lt;/p&gt;
</content:encoded></item><item><title>Producktive</title><link>https://mrmansouri.ir/projects/producktive/</link><guid isPermaLink="true">https://mrmansouri.ir/projects/producktive/</guid><description>A journal for people who feel busy but not productive — built on one stubborn principle: logs are just logs.</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import ColorKey from &apos;../../components/ColorKey.astro&apos;;&lt;/p&gt;
&lt;p&gt;Most productivity apps start from the same assumption — that you have too little structure, and their job is to give you more. More projects, more priorities, more nested tasks, more streaks to protect. You arrive tired and leave managed. This app grew out of a paper journal I kept in four colors for a couple of months — &lt;a href=&quot;/notes/the-color-of-a-day/&quot;&gt;here&apos;s how it started&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;{/* TODO(owner): this links to /notes/the-color-of-a-day/ — update the slug/route
if the origin article gets a different title or collection; the visible link
text (&quot;here&apos;s how it started&quot;) can stay. It 404s until that article exists. */}&lt;/p&gt;
&lt;p&gt;Producktive starts somewhere else. It assumes you already do plenty; you just can&apos;t see it. The days blur, the effort disappears, and by evening you feel busy without feeling like anything happened. So it doesn&apos;t hand you a system to obey. It hands you a page to write on, and gets out of the way.&lt;/p&gt;
&lt;h2&gt;Logs are just logs&lt;/h2&gt;
&lt;p&gt;The whole product rests on one stubborn principle: &lt;strong&gt;logs are just logs.&lt;/strong&gt; A daily log is a flat list of what happened — nothing linked, nothing nested, nothing scored. There is no schema quietly connecting today&apos;s entry to a goal to a project. The structure lives in the &lt;em&gt;ritual&lt;/em&gt; of writing and re-reading, not in the database.&lt;/p&gt;
&lt;p&gt;That sounds like a limitation. In practice it&apos;s the point. Nothing to maintain means nothing to feel guilty about maintaining. You can log for a week, skip three days, come back, and the app never scolds you or asks you to reconcile anything. It&apos;s a notebook, not a manager.&lt;/p&gt;
&lt;h2&gt;Four colors&lt;/h2&gt;
&lt;p&gt;Every entry gets one of four colors — the heart of the whole thing:&lt;/p&gt;
&lt;p&gt;{/* The four-color key renders from  — the CSS-swatch treatment the
owner&apos;s note asked for, replacing the emoji list (zero-JS, on-brand). Labels
and swatch colours live in the component against the --swatch-* tokens. */}
&lt;/p&gt;
&lt;p&gt;You don&apos;t analyze these in the moment. You just tag and move on. But over a month, the colors do something a to-do list never can: they show you the &lt;em&gt;shape&lt;/em&gt; of your time. A wall of gray tells you the story of a month spent on other people&apos;s work. A healthy green streak tells another. The app never lectures you about the ratio — it just makes it visible, and lets you draw your own conclusion.&lt;/p&gt;
&lt;h2&gt;Looking back&lt;/h2&gt;
&lt;p&gt;Tagging in the moment is only half of it. The other half is looking back — and Producktive sets aside two moments for it: a weekly review and a monthly one.&lt;/p&gt;
&lt;p&gt;Each pulls together the stretch you just lived. First the shape of it — the balance of colors across everything you logged, so it&apos;s clear whether the time ran mostly gray or leaned green and blue. Then the entries themselves, grouped by color: everything you did for yourself in one place, the meaningful work in another, the grunt work and the rough moments each in theirs.&lt;/p&gt;
&lt;p&gt;That grouping is the part a plain list can&apos;t give you. Scrolling a month of entries tells you little; seeing them sorted into colors tells you exactly where your time went. No score, nothing to optimize — just your own time, laid out so the pattern is hard to miss.&lt;/p&gt;
&lt;h2&gt;What it deliberately isn&apos;t&lt;/h2&gt;
&lt;p&gt;Producktive has no project hierarchies, no dependencies, no priority flags, no gamified streak you&apos;ll panic about breaking. There are no goals to set and no plans to keep up — nothing that rolls up, nothing to carry forward. That restraint is a feature, chosen on purpose and defended every time it&apos;s tempting to add &quot;just one more&quot; structure.&lt;/p&gt;
&lt;p&gt;Because the promise isn&apos;t that you&apos;ll finally get organized. It&apos;s quieter than that: at the end of a month, you&apos;ll be able to look back and &lt;em&gt;see&lt;/em&gt; what you actually did — and feel, maybe for the first time in a while, that it added up to something.&lt;/p&gt;
&lt;p&gt;That&apos;s the whole idea. A calm page, four colors, and a moment each week and month to look back and notice your own life. (The name hides a duck in it — you&apos;ll meet him in the quiet corners. He mostly just wants you to write today down.)&lt;/p&gt;
</content:encoded></item><item><title>Everyone has a flywheel. Almost nobody can prove one.</title><link>https://mrmansouri.ir/notes/flywheels-are-easy-to-claim/</link><guid isPermaLink="true">https://mrmansouri.ir/notes/flywheels-are-easy-to-claim/</guid><description>The flywheel is the most over-claimed metaphor in pitch decks. Three tests separate a real one from a growth story wearing a costume.</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The word shows up in almost every deck now. A ring of arrows, five or six boxes, each one supposedly feeding the next. The implication is always the same: &lt;em&gt;our growth compounds on itself, so it will keep going and you can&apos;t catch us.&lt;/em&gt; Most of the time it&apos;s a diagram of hope, not a description of a mechanism.&lt;/p&gt;
&lt;p&gt;The idea is Jim Collins&apos;. In &lt;em&gt;Good to Great&lt;/em&gt; the flywheel is a heavy disc you push — no single shove moves it much, but consistent pushes in the same direction accumulate, and eventually the wheel&apos;s own momentum does the work. Amazon later drew the version everyone copies: lower prices bring more customers, more customers bring more sellers, more sellers bring more selection, more selection improves the experience, which brings more customers again. Bezos reportedly sketched it on a napkin. That napkin is why the metaphor is now furniture in every strategy meeting.&lt;/p&gt;
&lt;h2&gt;Three tests&lt;/h2&gt;
&lt;p&gt;A real flywheel has to pass all three, and most claimed ones fail at least one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The loop is closed.&lt;/strong&gt; The output of the last step is the input to the first. If the arrows don&apos;t actually return to where they started, it&apos;s a value chain, not a flywheel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every link is causal, not correlated.&lt;/strong&gt; &quot;We grew, and we also hired more people&quot; is not a flywheel — it&apos;s two things that happened. Each arrow has to be a mechanism you could explain: &lt;em&gt;this&lt;/em&gt; rises, which &lt;em&gt;causes&lt;/em&gt; that to rise. If you can&apos;t name the mechanism on an arrow, that arrow is decoration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Momentum compounds.&lt;/strong&gt; The same push produces more output as the wheel spins faster — because marginal cost falls, or marginal value rises, or both. Without compounding you don&apos;t have a flywheel, you have a funnel: linear, and needing to be refilled from the top forever.&lt;/p&gt;
&lt;p&gt;That last test is also the one that separates a flywheel from a network effect. A network effect is a property of a product — value rises as users are added. A flywheel is an operating system for the whole business. In practice a network effect is usually one arrow inside a flywheel, not the wheel itself.&lt;/p&gt;
</content:encoded></item><item><title>Signal-to-noise ratio</title><link>https://mrmansouri.ir/notes/signal-to-noise-ratio/</link><guid isPermaLink="true">https://mrmansouri.ir/notes/signal-to-noise-ratio/</guid><description>What SNR means, why the metaphor spread from engineering into data, writing, and product work.</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Signal-to-noise ratio (SNR) is a measure of how much useful information (&quot;signal&quot;) there is relative to irrelevant or unwanted stuff (&quot;noise&quot;). It originated in engineering — in audio or radio, it&apos;s literally the ratio of the power of the signal you want to the power of background interference, usually expressed in decibels. A high SNR means a clean, clear signal; a low SNR means the signal is drowning in static.&lt;/p&gt;
&lt;p&gt;The concept has spread far beyond engineering because it&apos;s such a useful metaphor.&lt;/p&gt;
&lt;p&gt;In data and analytics, signal is the real underlying pattern (an actual change in user behavior, a genuine effect of your feature), and noise is random variation (day-to-day fluctuation, seasonality, small sample sizes). A metric with low SNR moves around a lot for reasons that have nothing to do with what you did — which is exactly why A/B tests need enough sample size: you&apos;re trying to lift the signal above the noise floor.&lt;/p&gt;
&lt;p&gt;In communication and writing, signal is the content that actually informs or persuades, and noise is filler, hedging, jargon, or tangents. A high-SNR case study or email says a lot per word.&lt;/p&gt;
&lt;p&gt;In product decisions, signal might be consistent feedback pointing at a real problem, while noise is one loud customer or an anecdote that doesn&apos;t generalize.&lt;/p&gt;
&lt;p&gt;The practical takeaway is usually one of two moves: amplify the signal (better measurement, clearer writing, bigger samples) or reduce the noise (remove confounds, cut filler, filter out unreliable inputs). Anything that improves either one improves the ratio.&lt;/p&gt;
&lt;h2&gt;Signal-to-noise in people&lt;/h2&gt;
&lt;p&gt;The metaphor even gets applied to people. In a clip from &lt;em&gt;The Diary of a CEO&lt;/em&gt;, Kevin O&apos;Leary — who dealt with Steve Jobs directly for years — describes Jobs as 80% signal, 20% noise, and Elon Musk as 100% signal. His definition of signal there is worth keeping: the three to five things you must get done in the next eighteen hours; everything that stops you is noise. The percentages themselves aren&apos;t measurements — nobody instrumented anyone&apos;s attention, and &quot;100%&quot; is hyperbole — but the framing turns focus into the same two moves as everywhere else: know what your signal is, and cut what isn&apos;t.&lt;/p&gt;
</content:encoded></item><item><title>The four risks, and the one everyone skips</title><link>https://mrmansouri.ir/notes/four-risks-of-product/</link><guid isPermaLink="true">https://mrmansouri.ir/notes/four-risks-of-product/</guid><description>Cagan&apos;s value/usability/feasibility/viability list is easy to memorize — the point is the ordering and the timing.</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Marty Cagan&apos;s &lt;em&gt;Inspired&lt;/em&gt; reduces product work to four risks: is it valuable to the user, usable, feasible to build, and viable for the business. The list is easy to memorize and easy to misuse.&lt;/p&gt;
&lt;p&gt;The misuse is treating it as a checklist you run after building. Cagan&apos;s actual argument is about timing: these risks should be attacked during discovery, cheaply, with prototypes — before anyone writes production code. The list is a prompt for what to de-risk first, not a rubric for grading what you shipped.&lt;/p&gt;
&lt;p&gt;The other trap is weighting the risks equally. They aren&apos;t equal. Teams gravitate toward usability and feasibility because those are testable with familiar tools — run a usability session, ask an engineer. Value is harder to test and easier to assume, which is exactly why it kills more products than the other three combined. A clunky product that solves a real problem survives. A polished product nobody needs doesn&apos;t.&lt;/p&gt;
&lt;p&gt;One more thing worth keeping: viability is broader than revenue. It&apos;s whether the business can and will actually support the product — legal, sales channel, cost structure, brand. Plenty of products die viable-on-paper.&lt;/p&gt;
&lt;p&gt;Four risks, then. But really: value first, discovery early, and don&apos;t confuse &quot;we can build it&quot; with &quot;we should.&quot;&lt;/p&gt;
</content:encoded></item><item><title>Closing the Checkout Gap: Making Delivery Cost &amp; Timing Visible</title><link>https://mrmansouri.ir/case-studies/delivery-description-case-study/</link><guid isPermaLink="true">https://mrmansouri.ir/case-studies/delivery-description-case-study/</guid><description>A drop at the address-and-delivery step wasn&apos;t logistics — it was missing information. Rebuilding the funnel event-based, calling churned users, and shipping a seller-defined delivery estimate lifted order conversion 30% → 63% in a clean A/B test.</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import CheckoutFunnel from &apos;../../components/CheckoutFunnel.astro&apos;;
import UserSplitPie from &apos;../../components/UserSplitPie.astro&apos;;
import StepConversionBars from &apos;../../components/StepConversionBars.astro&apos;;&lt;/p&gt;
&lt;h2&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;As PM for Pindo&apos;s order management system, I owned two conversion metrics: basket-to-order and order-to-paid-order. A large drop appeared at the address-and-delivery stage. By rebuilding the funnel from page-based to event-based, I isolated the real leak — logged-in users abandoned &lt;em&gt;after&lt;/em&gt; selecting an address but &lt;em&gt;before&lt;/em&gt; proceeding to payment. Through user calls, a survey, and an order-concentration analysis, I found the cause wasn&apos;t logistics but &lt;strong&gt;missing information&lt;/strong&gt;: buyers couldn&apos;t see when their order would arrive or what delivery would cost.&lt;/p&gt;
&lt;p&gt;Instead of a heavy delivery-service integration, I shipped a lightweight, seller-defined shipping estimate on the shipment page. A clean A/B test — treatment up to 63% order conversion, control flat at ~30% — confirmed the lift, and paid-order conversion moved with it (35% → 48%). Shipping-info capture was added to seller onboarding to scale adoption.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Context&lt;/h2&gt;
&lt;p&gt;I was the product manager for the OMS at Pindo, responsible for two core metrics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Basket-to-order conversion&lt;/strong&gt; — turning a viewed basket into a placed order&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Order-to-paid-order conversion&lt;/strong&gt; — turning a placed order into a completed payment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When I took over, the existing funnel ran:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ad view → add to basket → basket view → address &amp;amp; delivery page → payment page → gateway → thank-you page&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The data showed a substantial drop at the &lt;strong&gt;address &amp;amp; delivery page&lt;/strong&gt;, but the page-based view was misleading and I couldn&apos;t act on it directly.&lt;/p&gt;
&lt;p&gt;Rebuilt &lt;strong&gt;event-based&lt;/strong&gt; — each event firing on the &lt;strong&gt;action that moves the user forward&lt;/strong&gt;, not on page load — the same journey looked like this:&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Share of cart viewers&lt;/th&gt;
&lt;th&gt;Step conv.&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cart viewed&lt;/strong&gt;&lt;br /&gt;User lands on the cart page&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Continue from cart&lt;/strong&gt;&lt;br /&gt;Clicks &quot;next&quot; on the cart page&lt;/td&gt;
&lt;td&gt;72.5%&lt;/td&gt;
&lt;td&gt;72.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Continue from shipping&lt;/strong&gt;&lt;br /&gt;Clicks &quot;next&quot; on the shipping page&lt;/td&gt;
&lt;td&gt;16.2%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;22.4%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Purchase clicked&lt;/strong&gt;&lt;br /&gt;Clicks &quot;purchase&quot; on the payment page&lt;/td&gt;
&lt;td&gt;9.9%&lt;/td&gt;
&lt;td&gt;61.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Paid&lt;/strong&gt;&lt;br /&gt;Payment completed at the gateway&lt;/td&gt;
&lt;td&gt;7.6%&lt;/td&gt;
&lt;td&gt;76.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note on &lt;em&gt;Continue from shipping&lt;/em&gt;:&lt;/strong&gt; reaching this event requires having logged in, selected an address, and committed to delivery.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The critical drop is the &lt;strong&gt;72.5% → 22.4%&lt;/strong&gt; step: a user counted here clicked forward from the cart but never clicked forward from the shipping page. Understanding what that single number was hiding is where the work started.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The first insight: the funnel hid two different problems&lt;/h2&gt;
&lt;p&gt;Users browsed as guests all the way up to basket view. They were only forced to log in when they tried to continue past the basket. That meant the 22.4% step was mixing &lt;strong&gt;two unrelated problems&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Login friction&lt;/strong&gt; — a self-contained problem with its own optimizations: OTP SMS deliverability, OTP codes being flagged as spam, OTP length, OTP autofill, and adding Digikala SSO to make logging in easier.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An actual in-flow drop&lt;/strong&gt; — abandonment happening inside the checkout flow itself, among already-logged-in users.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I split these into separate tracks so login work wouldn&apos;t contaminate the analysis of the in-flow drop.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note on the metric:&lt;/strong&gt; the event-based view was for &lt;em&gt;analysis only&lt;/em&gt;. The conversion metrics I owned were measured against the database, not derived from event or page-view counts — so the diagnostic reframe didn&apos;t change the definition of the number I was accountable for.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;Breaking the 22.4% into its three steps&lt;/h2&gt;
&lt;p&gt;Getting from &quot;continue from cart&quot; to &quot;continue from shipping&quot; is really &lt;strong&gt;three actions in sequence&lt;/strong&gt;: logging in, having (or entering) an address, and confirming the delivery details to proceed. Reconstructed from database state (figures rounded), the population splits first:&lt;/p&gt;

&lt;p&gt;New users had to do all three steps; returning users arrived logged in with a saved address and faced only the last one. Each step&apos;s conversion, among the users who reached it:&lt;/p&gt;

&lt;p&gt;Underneath the 22.4%, new users converted through the gate at about &lt;strong&gt;18%&lt;/strong&gt; — login, then address, then proceed — while returning users, already logged in with a saved address, converted at &lt;strong&gt;40%&lt;/strong&gt;. Two things fall out of this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Login and address entry were the friction track.&lt;/strong&gt; They compounded to lose over half of guest users (75% × 60%) before those users ever saw the delivery details — the self-contained problem with its own fixes (OTP, SSO).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The proceed step converted at 40% in &lt;em&gt;both&lt;/em&gt; paths.&lt;/strong&gt; Returning users — no login friction, no address friction, everything saved — stopped at the delivery-details step at exactly the same rate as users who had just fought through the whole flow. Whatever was losing people there was a property of the &lt;strong&gt;page itself&lt;/strong&gt;, not of accumulated friction on the way to it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That second observation is what pointed the investigation at the shipping page.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The real finding: a gap between selecting an address and proceeding to payment&lt;/h2&gt;
&lt;p&gt;With the event-based funnel in place, the churn concentrated in a specific spot: logged-in users &lt;strong&gt;selected an address but didn&apos;t proceed to the payment page.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I dug into that page to understand why. After entering an address, if you were lucky the seller had defined a delivery price for the item — but you still had &lt;strong&gt;no estimate of when the order would ship or when you&apos;d receive it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To verify the hypothesis rather than assume it, I triangulated across three sources:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;User calls.&lt;/strong&gt; Churned users were logged in, so we had their numbers. I called several directly. Recurring reasons:
&lt;ul&gt;
&lt;li&gt;Delivery price unclear (sometimes freight-forward / pay-on-delivery)&lt;/li&gt;
&lt;li&gt;Delivery price too high&lt;/li&gt;
&lt;li&gt;Expected to select a time slot&lt;/li&gt;
&lt;li&gt;Wanted to know &lt;em&gt;when&lt;/em&gt; the order would arrive — they might not be home when it ships&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A survey&lt;/strong&gt; built from those reasons to quantify them. &lt;strong&gt;Unknown delivery time&lt;/strong&gt; and &lt;strong&gt;unknown/high delivery price&lt;/strong&gt; landed in the top 3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An order-concentration check&lt;/strong&gt; before committing to a solution. ~50% of orders came from sellers in Tehran, but only ~12% of orders were same-city. This told me an &lt;strong&gt;inter-city logistics integration wouldn&apos;t move the needle&lt;/strong&gt; — most demand wasn&apos;t same-city, so a same-city delivery service would have solved the wrong problem.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The conclusion: this was an &lt;strong&gt;information problem, not a logistics problem.&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The decision: ship the lightest thing that solves it&lt;/h2&gt;
&lt;p&gt;{/* TODO(owner): you mentioned framing this through an explicit prioritization method. Options: add impact/effort/confidence columns to the table below, or a short paragraph naming the method you actually used (or would use) and how the chosen option scored. Only add scores you can honestly reconstruct. */}&lt;/p&gt;
&lt;p&gt;I considered several solutions:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Trade-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Integrate a delivery service (e.g. DigiExpress) for selectable time slots&lt;/td&gt;
&lt;td&gt;Heavy build; solves time-slot selection but overkill for an info gap, and weak fit given the same-city concentration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Estimate delivery time from order history&lt;/td&gt;
&lt;td&gt;Requires reliable historical data; indirect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Let sellers pick their delivery service, then infer a rough estimate&lt;/td&gt;
&lt;td&gt;Depends on seller input + mapping logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seller-defined general shipping description&lt;/strong&gt; (chosen)&lt;/td&gt;
&lt;td&gt;Familiar pattern (like Instagram shops: &quot;orders before noon ship same day&quot;); easy to implement; directly closes the info gap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I chose the &lt;strong&gt;seller-defined shipping description&lt;/strong&gt; because it was easy to implement and a pattern users already understood from social commerce and other sites.&lt;/p&gt;
&lt;p&gt;To populate it credibly, I &lt;strong&gt;sorted our top sellers, called them&lt;/strong&gt;, asked how they actually priced and timed shipping, and used that to build a &lt;strong&gt;template&lt;/strong&gt; other sellers could fill in.&lt;/p&gt;
&lt;p&gt;For the experiment, the information was shown on the &lt;strong&gt;shipment page&lt;/strong&gt; — the page I owned and the exact spot where the churn happened.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Validation: a clean A/B test, scoped deliberately&lt;/h2&gt;
&lt;p&gt;I ran the A/B test on &lt;strong&gt;logged-in users&lt;/strong&gt;, splitting on user-ID parity — the new shipping information was shown to &lt;strong&gt;even&lt;/strong&gt; IDs (treatment) and withheld from &lt;strong&gt;odd&lt;/strong&gt; IDs (control).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What exactly was measured:&lt;/strong&gt; in both arms, the metric was logged-in users&apos; order conversion &lt;strong&gt;on orders from the selected shops&lt;/strong&gt; — the top sellers whose shipping template had been filled in. Treatment saw the new information on those orders; control didn&apos;t. Orders from other shops weren&apos;t part of the read, since there was no shipping information to show or withhold.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why this split is valid:&lt;/strong&gt; both groups were near-identical at ~30% historically and ran over the same period, so seasonality and marketing hit both arms equally — only the shipment-page change differed.&lt;/p&gt;
&lt;p&gt;The ID-parity split also &lt;em&gt;enforced&lt;/em&gt; the scope: only logged-in users have numeric user IDs (guests carry non-numeric session IDs), so even/odd splitting mechanically restricted the test to logged-in users — which is exactly the population that reaches the shipment page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why the test was a clean &lt;em&gt;persuasion&lt;/em&gt; read:&lt;/strong&gt; I deliberately scoped the experiment to the &lt;strong&gt;shipment page only&lt;/strong&gt;, leaving the top of the funnel (ADP/PDP) untouched. That matters — if I&apos;d disclosed delivery info earlier in the journey during the test, it could have changed &lt;em&gt;who&lt;/em&gt; reached checkout (pre-qualifying buyers), and the checkout lift would have been partly a composition artifact rather than genuine persuasion. By holding the top of the funnel constant, the population reaching checkout was the same as control, so the lift reflects the feature actually changing minds at the decision point.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Order conversion:&lt;/strong&gt; treatment ~30% → &lt;strong&gt;63%&lt;/strong&gt;; control flat at ~30% over the same window&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paid-order conversion:&lt;/strong&gt; &lt;strong&gt;35% → 48%&lt;/strong&gt; (treatment vs. flat control)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test duration:&lt;/strong&gt; ~2 weeks at a 50/50 split&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I no longer have access to the exact per-arm sample counts, but at full checkout traffic over two weeks, a 33-point gap between arms is far beyond what noise produces — the control arm holding flat at ~30% throughout is the strongest evidence the effect was real.&lt;/p&gt;
&lt;p&gt;After the test confirmed the lift, I launched the shipment-page version to all users; the change held at 100% rollout.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Scope of the claim (being precise)&lt;/h2&gt;
&lt;p&gt;The honest headline is a &lt;strong&gt;33-point order-conversion lift in the experiment, among logged-in users, on orders from the selected shops that had shipping info filled in&lt;/strong&gt; — not a platform-wide doubling. Two reasons to state it that way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The entire study concerns &lt;strong&gt;logged-in users&lt;/strong&gt; — they&apos;re the only ones who reach the shipment page, and the ID-parity split enforced that population.&lt;/li&gt;
&lt;li&gt;The measurement was scoped to the &lt;strong&gt;selected shops&lt;/strong&gt;. At test time, sellers with the shipping template filled in were roughly &lt;strong&gt;~0.3%&lt;/strong&gt; of the platform — the hand-picked top sellers I&apos;d called — so the day-one blended effect on the platform-wide number was negligible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;On why the lift is so large:&lt;/strong&gt; the 63% is the &lt;em&gt;concentrated&lt;/em&gt; treatment effect — the change in behavior for buyers who actually saw the new information. The reading that fits the user research is that many buyers were treating unknown delivery cost and timing as a worst-case and abandoning; removing that uncertainty recovered them, even when the disclosed answer was only mediocre.&lt;/p&gt;
&lt;p&gt;The platform-wide figure is a &lt;strong&gt;projection, never re-measured&lt;/strong&gt;: at a hypothetical ~35% seller adoption, the concentrated +33pp would translate to roughly &lt;strong&gt;+11–12pp platform-wide&lt;/strong&gt; (≈30% → low-40s%) — contingent on adoption actually climbing via onboarding. Reporting the scoped number alongside the projected one, each with its conditions, is more accurate — and more defensible — than quoting the big number on its own.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Scaling it&lt;/h2&gt;
&lt;p&gt;To make the win durable rather than one-off, &lt;strong&gt;shipping-info capture was added to seller onboarding&lt;/strong&gt;, so every new seller provided it by default and adoption would climb over time.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What I&apos;d redo&lt;/h2&gt;
&lt;p&gt;{/* DRAFT — written for Mohammad Reza to correct/replace with his own view */}&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instrument the funnel event-based from the start.&lt;/strong&gt; The page-based funnel cost real calendar time: the first weeks went to discovering that the number I was staring at was two problems wearing one trench coat. The lesson I carry forward is to audit how a metric is &lt;em&gt;constructed&lt;/em&gt; before trusting where it says the problem is.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preserve the experiment&apos;s statistics.&lt;/strong&gt; The test was clean, but I didn&apos;t retain the per-arm sample sizes and significance figures. For a result this large it doesn&apos;t change the conclusion — but a defensible number deserves a defensible paper trail, and I&apos;d archive the analysis alongside the launch doc now.&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>A Metric Dropped. Now What?</title><link>https://mrmansouri.ir/notes/how-to-solve-rca-problems/</link><guid isPermaLink="true">https://mrmansouri.ir/notes/how-to-solve-rca-problems/</guid><description>A working PM&apos;s guide to root-cause analysis: the ordered sequence of cheap checks — definition, instrumentation, shape, concentration and mix — that must come up empty before the expensive funnel teardown earns its place.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every product person eventually gets the message: a number that mattered went the wrong way. Conversion is down. Repeat rate slipped. Basket size shrank. The instinct — and the mistake — is to jump straight to &quot;let&apos;s break down the funnel and see what&apos;s broken.&quot;&lt;/p&gt;
&lt;p&gt;The funnel teardown is real work, but it&apos;s near the &lt;em&gt;end&lt;/em&gt; of the process, not the start. Most metric moves are explained by something cheaper and more mundane than a broken funnel stage, and if you don&apos;t rule those out first, you&apos;ll spend a week diagnosing a problem that doesn&apos;t exist.&lt;/p&gt;
&lt;p&gt;What follows is the sequence I actually run. Each step earns the right to the next one. You don&apos;t graduate to the expensive analysis until the cheap explanations are dead.&lt;/p&gt;
&lt;h2&gt;1. Define the metric before you touch it&lt;/h2&gt;
&lt;p&gt;A metric is not a number, it&apos;s a &lt;em&gt;ratio&lt;/em&gt;, and ratios have two moving parts. Before anything else, write down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The numerator&lt;/strong&gt; — what event are we counting?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The denominator&lt;/strong&gt; — over what population?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The time window&lt;/strong&gt; — daily, weekly, rolling?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This sounds pedantic until you realize how many &quot;drops&quot; are just a ratio moving because the &lt;em&gt;bottom&lt;/em&gt; changed, not the top. Conversion rate can fall while the absolute number of conversions rises — you just added more people to the denominator. If you don&apos;t know exactly what&apos;s on top and bottom, you can&apos;t reason about which one moved, and you&apos;ll chase behavior that never changed.&lt;/p&gt;
&lt;h2&gt;2. Is the drop even real?&lt;/h2&gt;
&lt;p&gt;Before you theorize about users, confirm the number reflects reality and not a change in how you &lt;em&gt;measure&lt;/em&gt; reality.&lt;/p&gt;
&lt;p&gt;A &quot;drop&quot; is very often an instrumentation artifact: an event that stopped firing after a deploy, a property that got renamed, a logging change, a double-count that someone helpfully fixed. Ask what shipped near the drop date on the &lt;em&gt;tracking&lt;/em&gt; side, not just the product side.&lt;/p&gt;
&lt;p&gt;This is a thirty-minute check that saves you from days of analyzing a ghost. Do it early, every time.&lt;/p&gt;
&lt;h2&gt;3. Read the shape of the change&lt;/h2&gt;
&lt;p&gt;Before pulling a single additional cut, look at the &lt;em&gt;shape&lt;/em&gt; of the drop over time. The shape encodes the cause.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A step function&lt;/strong&gt; — a sharp vertical drop on a specific date — means something &lt;em&gt;switched&lt;/em&gt;. A release, a config change, a price update, a partner turned on, an outage. Your job is to find what happened on that edge. Within &quot;step,&quot; the edge quality tells you more: a drop-then-recover is a transient (an outage that got fixed, a promo that ended); a drop-to-a-floor-that-stays is a permanent change.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A gradual slope&lt;/strong&gt; means something is &lt;em&gt;drifting&lt;/em&gt;. Nothing flipped; a continuous process is grinding the number down. And &quot;gradual&quot; is where people get lazy and mutter &quot;seasonality,&quot; so it&apos;s worth understanding &lt;em&gt;why&lt;/em&gt; a slope appears. There are three families:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mix shift.&lt;/strong&gt; The composition of your denominator is changing even though no single segment&apos;s rate moves. If City A converts at 60% and City B at 30%, and you&apos;re steadily acquiring more B-type users, the &lt;em&gt;blended&lt;/em&gt; rate slides — purely from reweighting. Every segment can be flat while the aggregate falls. This is the Simpson&apos;s paradox trap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Degradation.&lt;/strong&gt; Something is accumulating. Tables grow and queries slow, so latency creeps up and conversion bleeds with it. Catalog data goes stale. Search relevance rots. The cause is a slow ramp, so the effect is a slow ramp.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cohort turnover.&lt;/strong&gt; The population is being reshaped by entry and attrition. A big acquisition spike ages through your funnel over weeks; retention thins cohorts so survivors over-represent some behavior. No individual changed — the &lt;em&gt;pool&lt;/em&gt; did.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The unifying idea: &lt;strong&gt;a gradual change means the cause itself is continuous.&lt;/strong&gt; Something is reweighting, rotting, or aging at a steady pace, and the metric inherits that pace. A step means something switched. Knowing which one you&apos;re looking at tells you whether to hunt for an &lt;em&gt;event&lt;/em&gt; or a &lt;em&gt;process&lt;/em&gt; — before you&apos;ve run any real analysis.&lt;/p&gt;
&lt;h2&gt;4. Concentration and mix: is it everywhere, or somewhere?&lt;/h2&gt;
&lt;p&gt;A metric is an average over a heterogeneous population, and an aggregate move is very often a &lt;em&gt;localized&lt;/em&gt; move hiding inside a flat average. So before you tear the funnel apart, slice the drop across the dimensions that carry variance for your business.&lt;/p&gt;
&lt;p&gt;The dimensions aren&apos;t a fixed checklist — you pick the ones that plausibly hold the variance for &lt;em&gt;this&lt;/em&gt; metric at &lt;em&gt;this&lt;/em&gt; company. For a Q-commerce grocery business, that usually means city, dark store or vendor cluster, category (fresh vs. packaged behave nothing alike), time of day and day of week, courier type, and user segment.&lt;/p&gt;
&lt;p&gt;Two things fall out of this one check:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Concentration.&lt;/strong&gt; If the drop is uniform across every slice, you&apos;re looking at a system-wide cause and the funnel teardown is coming. If it collapsed in three dark stores in one city, you have a local ops problem and the funnel analysis would have wasted a day. &lt;em&gt;Where&lt;/em&gt; the drop lives determines what kind of problem it is.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mix vs. rate.&lt;/strong&gt; This is the subtle one, and it belongs &lt;em&gt;right here&lt;/em&gt; — not earlier (you don&apos;t have the segmented view yet), not later (by then you&apos;ve already assumed it&apos;s a rate problem). When you segment, look at two things side by side: each segment&apos;s &lt;em&gt;rate&lt;/em&gt; over time, and each segment&apos;s &lt;em&gt;share of volume&lt;/em&gt; over time. If the rates are flat but a low-converting segment grew its share, the blend fell without anything actually breaking. The funnel is fine; the population moved.&lt;/p&gt;
&lt;p&gt;The cleanest way to settle it: &lt;strong&gt;hold the mix constant and recompute.&lt;/strong&gt; Apply last period&apos;s segment weights to this period&apos;s segment rates. If the reweighted number matches the old number, it was pure rate. If it matches the new number, it was pure mix. Usually it&apos;s in between, and now you&apos;ve &lt;em&gt;quantified&lt;/em&gt; how much each contributed instead of hand-waving.&lt;/p&gt;
&lt;p&gt;The decision rule at this node:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Concentrated rate drop in a slice&lt;/strong&gt; → dig there; it&apos;s local and probably causal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No slice is low, but the blend fell&lt;/strong&gt; → suspect mix; check whether a low-rate segment grew or a high-rate segment shrank.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rates uniformly down, shares stable&lt;/strong&gt; → genuine system-scale degradation. &lt;em&gt;Now&lt;/em&gt; the funnel teardown earns its place.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You don&apos;t advance to stage-by-stage analysis until you&apos;ve cleared &lt;em&gt;both&lt;/em&gt; concentration and mix, because either one can fully explain an aggregate move without a single funnel stage breaking.&lt;/p&gt;
&lt;h2&gt;5. The funnel teardown — finally&lt;/h2&gt;
&lt;p&gt;By the time you get here, you&apos;ve established the drop is real (not instrumentation), system-wide (not concentrated), and a genuine rate move (not mix). &lt;em&gt;That&apos;s&lt;/em&gt; what justifies the expensive analysis. You earned it.&lt;/p&gt;
&lt;p&gt;A conversion rate is a product of stage-to-stage rates: session → search → add-to-cart → checkout → payment → fulfilled. A drop in the headline lives in one or a few specific transitions. Two disciplines keep this from becoming a fishing trip:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chase the step that &lt;em&gt;moved&lt;/em&gt;, not the step that&apos;s lowest.&lt;/strong&gt; Every funnel has a worst-converting step; that&apos;s normal, not your culprit. Diff each transition against baseline. A step that&apos;s been 40% forever and is still 40% isn&apos;t your problem even if it&apos;s the lowest in the funnel. The transition that &lt;em&gt;changed&lt;/em&gt; is the one that ships you to the cause.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The located stage names the cause family.&lt;/strong&gt; Where the bleed sits constrains what could cause it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Drop at add-to-cart&lt;/strong&gt; → discovery, search relevance, availability/out-of-stock, or pricing perception. They looked and didn&apos;t want it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drop at checkout → payment&lt;/strong&gt; → friction, fees revealed late, delivery cost or SLA shown at a bad moment, address or slot problems. They wanted it but balked at the terms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drop at payment → fulfilled&lt;/strong&gt; → not a user-intent problem at all. Failed payments, cancellations, out-of-stock-after-order, courier failures. They committed and the system failed them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the &lt;em&gt;location&lt;/em&gt; of the drop already tells you whether you&apos;re looking at a demand problem, a friction problem, or a fulfillment problem — before you&apos;ve formed a single specific hypothesis.&lt;/p&gt;
&lt;h2&gt;6. Hypotheses that actually discriminate&lt;/h2&gt;
&lt;p&gt;Once you&apos;ve localized the stage, you rarely have the deciding data live in front of you. The credible move isn&apos;t to guess a conclusion — it&apos;s to name a small, ranked set of hypotheses, each carrying three things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The mechanism&lt;/strong&gt; — why &lt;em&gt;this&lt;/em&gt; would cause a drop at &lt;em&gt;this specific stage&lt;/em&gt;, not a generic &quot;maybe UX got worse.&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The validation&lt;/strong&gt; — the specific cut or query that confirms or kills it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The expected signature&lt;/strong&gt; — what the data looks like if this hypothesis is true &lt;em&gt;versus&lt;/em&gt; if a competing one is.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That third item is the upgrade most people skip. Weak validation looks for evidence &lt;em&gt;consistent with&lt;/em&gt; your guess — and almost everything is consistent with something. Strong validation names what the data would look like under each competing hypothesis, so the cut actually &lt;em&gt;discriminates&lt;/em&gt;. If two hypotheses predict the same pattern, that cut is useless; you need a different one.&lt;/p&gt;
&lt;p&gt;Here&apos;s the discipline made concrete for an &lt;strong&gt;add-to-cart drop&lt;/strong&gt; — people are landing and browsing but adding less:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Traffic-mix (check this first).&lt;/strong&gt; Before concluding &quot;add-to-cart got worse,&quot; confirm the &lt;em&gt;input population&lt;/em&gt; didn&apos;t change. If a campaign dumped low-intent traffic into sessions, the rate falls mechanically — the numerator is fine, the denominator inflated. &lt;em&gt;Confirms if:&lt;/em&gt; a low-intent channel ballooned as a share of sessions while the rate within each channel stayed flat. &lt;em&gt;Killed if:&lt;/em&gt; channel mix stable and the rate fell within established channels — now it&apos;s a real problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Availability / out-of-stock.&lt;/strong&gt; Items people want show as unavailable — the intent is there, the button isn&apos;t. &lt;em&gt;Confirms if:&lt;/em&gt; OOS rate rises on the same edge date and the drop concentrates in exactly the stores and categories where OOS rose. &lt;em&gt;Killed if:&lt;/em&gt; OOS flat while add-to-cart fell.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Search / discovery relevance.&lt;/strong&gt; They can&apos;t find what they came for. &lt;em&gt;Confirms if:&lt;/em&gt; the drop lives in &lt;em&gt;search&lt;/em&gt; sessions specifically, null-result rate climbed, and it tracks a ranking deploy. &lt;em&gt;Killed if:&lt;/em&gt; browse sessions dropped just as hard — then it&apos;s broader than search.&lt;/p&gt;
&lt;p&gt;The clean discriminator between the last two: availability is &quot;they found it but couldn&apos;t add it&quot;; relevance is &quot;they couldn&apos;t find it.&quot; The OOS rate separates them. If OOS is flat but null-results are up, it&apos;s relevance; reverse it and it&apos;s availability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pricing perception.&lt;/strong&gt; Prices rose (or a competitor&apos;s fell) and the value proposition shifted. &lt;em&gt;Confirms if:&lt;/em&gt; the drop concentrates in price-sensitive segments and elastic categories and lines up with a pricing or promo change. &lt;em&gt;Killed if:&lt;/em&gt; it&apos;s uniform across price-sensitive &lt;em&gt;and&lt;/em&gt; price-insensitive segments — if the users who never shop on price dropped just as hard, price isn&apos;t the lever.&lt;/p&gt;
&lt;p&gt;Run them cheapest-and-most-disqualifying first: traffic-mix, then availability, then relevance, then pricing. Each validation is built so that confirming it and killing it look &lt;em&gt;different&lt;/em&gt; in the data. That&apos;s what turns a list of guesses into a decisive sequence.&lt;/p&gt;
&lt;h2&gt;The spine, in one place&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Define the metric&lt;/strong&gt; — numerator, denominator, window.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data integrity&lt;/strong&gt; — is the drop real, or an instrumentation artifact?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shape&lt;/strong&gt; — step (an event switched) vs. gradual (a process is drifting).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concentration + mix&lt;/strong&gt; — localized to a slice, or is the blend moving because weights shifted rather than rates? Hold mix constant and recompute to settle it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Funnel teardown&lt;/strong&gt; — only once concentration and mix are ruled out; localize to the stage that &lt;em&gt;moved&lt;/em&gt;, which names the cause family.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discriminating hypotheses&lt;/strong&gt; — mechanism + validation + expected signature, ranked cheapest-to-disqualify first.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;None of this is about knowing more statistics than the next person. It&apos;s about &lt;em&gt;order&lt;/em&gt; — refusing to spend expensive analysis until the cheap explanations are dead, and refusing to accept a hypothesis until you&apos;ve named the data that would prove it wrong. The number moved for a reason. The method is just making sure you find the real one.&lt;/p&gt;
</content:encoded></item></channel></rss>