<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mujtaba Tirmizi</title>
    <description>The latest articles on DEV Community by Mujtaba Tirmizi (@mujtabat).</description>
    <link>https://dev.to/mujtabat</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3398573%2Ff2c13907-ed9f-48c9-b70f-26e1e88e9b98.jpg</url>
      <title>DEV Community: Mujtaba Tirmizi</title>
      <link>https://dev.to/mujtabat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mujtabat"/>
    <language>en</language>
    <item>
      <title>🧪 The Anatomy of a Successful A/B Test at Scale</title>
      <dc:creator>Mujtaba Tirmizi</dc:creator>
      <pubDate>Tue, 14 Oct 2025 14:48:47 +0000</pubDate>
      <link>https://dev.to/mujtabat/the-anatomy-of-a-successful-ab-test-at-scale-371e</link>
      <guid>https://dev.to/mujtabat/the-anatomy-of-a-successful-ab-test-at-scale-371e</guid>
      <description>&lt;p&gt;A/B testing is the backbone of data-driven decision making. But running experiments at product scale is very different from testing two button colors on a landing page.  &lt;/p&gt;

&lt;p&gt;When millions of users, hundreds of metrics, and long-term outcomes are on the line, experimentation becomes both a science and an art.  &lt;/p&gt;

&lt;p&gt;At Meta, our philosophy was simple:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"If it moves, measure it. If it’s measurable, experiment with it."&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Behind that principle sits a framework designed to ensure experiments are run responsibly, reproducibly, and at scale.  &lt;/p&gt;




&lt;h3&gt;
  
  
  🧩 TL;DR
&lt;/h3&gt;

&lt;p&gt;Running A/B tests at scale is about &lt;strong&gt;discipline, not just data&lt;/strong&gt;.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start with the decision, not the hypothesis.&lt;/strong&gt; Define what choice the experiment will inform and what metrics you expect to move before it starts. Otherwise, you risk matching a narrative to random noise.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power your tests properly.&lt;/strong&gt; Ensure you can detect meaningful effects at the right confidence level. Underpowered experiments waste time and mislead decisions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Segment intelligently.&lt;/strong&gt; Break results down by demographics, platform, and engagement levels to uncover where an idea works and where it doesn’t, but balance insight with complexity.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a metric framework.&lt;/strong&gt; Combine product metrics (feature success), ecosystem metrics (platform impact), and guardrail metrics (long-term health) to interpret results responsibly.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage backtests and holdouts.&lt;/strong&gt; Move fast while keeping rigor by tracking long-term effects post-launch and measuring incremental impact of bundled systems.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best experimentation cultures move fast &lt;strong&gt;because&lt;/strong&gt; they measure deeply, not in spite of it.  &lt;/p&gt;




&lt;h3&gt;
  
  
  1. Start With the Decision, Not Just the Hypothesis
&lt;/h3&gt;

&lt;p&gt;A good A/B test begins long before code is written. The key question is:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;What decision will this experiment inform, and what would we do differently depending on the outcome?&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;That question drives clarity around &lt;strong&gt;what success actually means&lt;/strong&gt; — are you deciding to launch, iterate, or sunset a product? Are you validating user value or technical performance?  &lt;/p&gt;

&lt;p&gt;Before starting, teams should also:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define the &lt;strong&gt;metrics&lt;/strong&gt; you expect to move (and in what direction).
&lt;/li&gt;
&lt;li&gt;Document the &lt;strong&gt;expected relationships&lt;/strong&gt; between metrics.
&lt;/li&gt;
&lt;li&gt;List &lt;strong&gt;guardrails&lt;/strong&gt; that must not regress.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why this matters:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With hundreds of metrics, some will appear significant by chance.
&lt;/li&gt;
&lt;li&gt;Having a clear hypothesis and decision table prevents narrative-matching after results are known.
&lt;/li&gt;
&lt;li&gt;It ensures that you don’t over-index on a false positive just to justify a launch.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Power Analysis: Detecting What Actually Matters
&lt;/h3&gt;

&lt;p&gt;Many experiments fail not because the idea is bad, but because the test was underpowered.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Power analysis&lt;/strong&gt; ensures your experiment has enough sample size and duration to detect the desired effect size at a chosen confidence level.  &lt;/p&gt;

&lt;p&gt;Key points:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aim for around &lt;strong&gt;90% power&lt;/strong&gt; and &lt;strong&gt;95% confidence&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Small effects on massive populations can require long tests.
&lt;/li&gt;
&lt;li&gt;Trade-off: &lt;strong&gt;Sensitivity vs. speed.&lt;/strong&gt; A smaller detectable lift means slower decision-making.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: detecting a &lt;strong&gt;1% lift in retention&lt;/strong&gt; on 100 million users might take weeks, while a &lt;strong&gt;10% lift&lt;/strong&gt; on a smaller segment could be measurable in days.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftlfray5c5jdhff2lm959.png" alt=" " width="800" height="800"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3. Segmentation: Finding the Story Behind the Average
&lt;/h3&gt;

&lt;p&gt;The average treatment effect rarely tells the full story. Segmentation helps uncover where an idea works — and where it doesn’t.  &lt;/p&gt;

&lt;p&gt;Common breakdowns include:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Demographics:&lt;/strong&gt; age, region, country groupings
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform:&lt;/strong&gt; iOS vs. Android
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User state:&lt;/strong&gt; new vs. returning users
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engagement buckets:&lt;/strong&gt; low, medium, high
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Segmentation reveals patterns such as:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A feature that helps &lt;strong&gt;younger users in the U.S.&lt;/strong&gt; but hurts &lt;strong&gt;older users in emerging markets&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;A change that works on &lt;strong&gt;Android&lt;/strong&gt; but not &lt;strong&gt;iOS&lt;/strong&gt; due to implementation differences.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These insights help refine rollout strategy. But they also create tradeoffs:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launching only to positive cohorts can fragment the product and create tech debt.
&lt;/li&gt;
&lt;li&gt;Uniform global launches may sacrifice local optimization for simplicity.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finding that balance is key to experimentation at scale.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qru7dxvyqoyqzh3ebnl.png" alt=" " width="800" height="332"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4. The Metric Framework: Product, Ecosystem, Guardrails
&lt;/h3&gt;

&lt;p&gt;Every great experiment uses a layered metric framework that separates local success from system-level health.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Product Metrics&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
These are the feature’s direct performance indicators.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usually deeper-funnel, leading indicators
&lt;/li&gt;
&lt;li&gt;Example: transactions per active buyer, listing click-through rate, or messages sent
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Ecosystem Metrics&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
These measure the feature’s impact on the broader product.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: a Marketplace improvement might drive transactions but reduce time spent in Video or Groups
&lt;/li&gt;
&lt;li&gt;Key metrics: DAU, total timespent, session count, engagement across surfaces
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Guardrail Metrics&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
High-signal indicators of user experience and long-term health.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: notification volume might increase DAU short term, but rising mute or disable rates can signal long-term harm
&lt;/li&gt;
&lt;li&gt;Early warning metrics that prevent unintended damage
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together, these three layers:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep teams from optimizing for vanity lifts
&lt;/li&gt;
&lt;li&gt;Clarify tradeoffs between short-term and long-term goals
&lt;/li&gt;
&lt;li&gt;Enable product velocity without losing systemic awareness
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fef2l01j7c8jjauoc5hdw.png" alt=" " width="790" height="256"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5. Holdouts and Backtests: Measuring What Launches Miss
&lt;/h3&gt;

&lt;p&gt;Most product teams want to move fast and ship improvements early. But speed and confidence can coexist when you plan for it.  &lt;/p&gt;

&lt;p&gt;Two key tools make this possible:  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backtests&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch to about 95% of users.
&lt;/li&gt;
&lt;li&gt;Keep 5% as a control group.
&lt;/li&gt;
&lt;li&gt;Track the long-term outcomes of launched changes.
&lt;/li&gt;
&lt;li&gt;Especially useful for features that impact the &lt;strong&gt;engagement flywheel&lt;/strong&gt; or &lt;strong&gt;connection model&lt;/strong&gt;, where effects take weeks or months to mature.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Holdouts&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used when multiple interacting features make isolated testing difficult (for example, notifications, ranking, or recommendations).
&lt;/li&gt;
&lt;li&gt;Hold out the entire bundle to measure &lt;strong&gt;combined incrementality&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Helps answer “What’s the overall effect of this system?”
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cautions when using holdouts:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don’t create artificially broken experiences.
&lt;/li&gt;
&lt;li&gt;Example: if users expect real-time notifications when someone comments, removing that entirely can break their mental model.
&lt;/li&gt;
&lt;li&gt;Continuously monitor user reports and feedback during holdouts to ensure measurement remains accurate and user trust intact.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  6. Closing Thoughts
&lt;/h3&gt;

&lt;p&gt;Running A/B tests at scale is not just about statistical rigor. It is about creating a repeatable learning system.  &lt;/p&gt;

&lt;p&gt;The most effective organizations:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Know &lt;strong&gt;why&lt;/strong&gt; they are testing
&lt;/li&gt;
&lt;li&gt;Define &lt;strong&gt;how&lt;/strong&gt; success will be measured
&lt;/li&gt;
&lt;li&gt;Build &lt;strong&gt;guardrails&lt;/strong&gt; to protect user experience
&lt;/li&gt;
&lt;li&gt;Establish &lt;strong&gt;backtests and long-term tracking&lt;/strong&gt; to ensure launches deliver durable value
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This framework allows companies like Meta to iterate and launch quickly without compromising data quality or user trust.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The fastest teams are often the most measured ones, not because they skip validation, but because they have made it part of their culture.  &lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>datascience</category>
      <category>experimentation</category>
      <category>analytics</category>
      <category>growth</category>
    </item>
    <item>
      <title>How Product Analytics Shapes User Experience: Funnels, Retention, and Experiments</title>
      <dc:creator>Mujtaba Tirmizi</dc:creator>
      <pubDate>Wed, 01 Oct 2025 15:21:11 +0000</pubDate>
      <link>https://dev.to/mujtabat/how-product-analytics-shapes-user-experience-funnels-retention-and-experiments-4cfm</link>
      <guid>https://dev.to/mujtabat/how-product-analytics-shapes-user-experience-funnels-retention-and-experiments-4cfm</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Funnels help you see where users succeed (and fail) in their journey.
&lt;/li&gt;
&lt;li&gt;Retention curves are the real test of product-market fit.
&lt;/li&gt;
&lt;li&gt;Experimentation validates what’s signal vs noise.
&lt;/li&gt;
&lt;li&gt;Communicating insights clearly is what turns data into impact.
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;👋 Hi, I’m Mujtaba. I’ve spent the last several years as a Data Scientist and Manager at Meta, working on user growth, engagement, and large-scale experimentation. In this post, I want to share some of the frameworks that shaped how we approached product analytics — lessons that apply no matter the size of your product.  &lt;/p&gt;




&lt;p&gt;When I first started working with product analytics, I thought the hardest part would be the math. It turned out the math was the easy part. The real challenge was figuring out &lt;em&gt;which metrics actually matter&lt;/em&gt; and then convincing a room full of PMs and engineers what to do about them.  &lt;/p&gt;

&lt;p&gt;In this post, I’ll break down three of the most important tools I’ve seen for shaping user experience: &lt;strong&gt;funnels, retention curves, and experimentation pipelines&lt;/strong&gt;. And then I’ll close with the underrated skill that makes all of it matter — &lt;strong&gt;communication&lt;/strong&gt;.  &lt;/p&gt;




&lt;h2&gt;
  
  
  1. Funnels: Diagnosing the User Journey in Analytics
&lt;/h2&gt;

&lt;p&gt;Funnels are one of the best ways to understand where users succeed and where they drop off. Your product’s funnel will look different from mine, but the idea is the same: map the journey from &lt;strong&gt;discovery → value → repeat use&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;A long-term funnel might include:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acquisition (DAU@1):&lt;/strong&gt; Are people finding the product?
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New user retention (WAU or DAU@14):&lt;/strong&gt; Do new users come back shortly after first use?
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-term retention (MAU@365):&lt;/strong&gt; Do they stick around a year later?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Visual: Acquisition &amp;amp; Retention Funnel&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpzyb4m3rcg4g5vqatrr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpzyb4m3rcg4g5vqatrr.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Daily health metrics, on the other hand, are best tracked side by side: MAU, WAU, DAU, sessions per DAU, and time spent per session.  &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Visual: Daily Engagement Metrics&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frj3rpotzka6i3yxlc88n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frj3rpotzka6i3yxlc88n.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 &lt;em&gt;Tip: Don’t obsess over exact metrics. Your product may need different checkpoints — what matters is having a way to measure acquisition, retention, and daily engagement meaningfully.&lt;/em&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  2. Retention Curves: The Best Metric for Product-Market Fit
&lt;/h2&gt;

&lt;p&gt;Funnels show you where you are today. Retention curves show you whether your product has a future.  &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Visual: Retention Curves (Healthy vs Unhealthy)&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5l5m0ttvmjsrm953kr0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5l5m0ttvmjsrm953kr0.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why is this so important? A DAU chart can look great for months while acquisition drives growth. But if your cohort retention curves show steep drop-offs, the product doesn’t actually have product-market fit.  &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Visual: DAU Trend vs Cohort Retention&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1beckbqthk1aiqmkqn5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1beckbqthk1aiqmkqn5.png" alt=" " width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 How to prepare your data for a retention curve
&lt;/h3&gt;

&lt;p&gt;The key is to get your activity data into the right format. At minimum you need:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;user_id&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;signup_date&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;activity_date&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From there, you can calculate what percent of a signup cohort is still active on Day N.  &lt;/p&gt;

&lt;p&gt;Here’s a simple example in Python with pandas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;

&lt;span class="c1"&gt;# Example dataset: 5 users active across different days
&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signup_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2024-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;activity_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;date_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2024-01-01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;periods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;freq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;D&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;tolist&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;# Simulate churn by dropping later activity for some users
&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;cumcount&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

&lt;span class="c1"&gt;# Calculate "days since signup"
&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;days_since_signup&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;activity_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;signup_date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;days&lt;/span&gt;

&lt;span class="c1"&gt;# Retention: percent of users active on each day
&lt;/span&gt;&lt;span class="n"&gt;cohort_size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;nunique&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;retention&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;days_since_signup&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;nunique&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;cohort_size&lt;/span&gt;

&lt;span class="c1"&gt;# Plot retention curve
&lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;retention&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;retention&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Days Since Signup&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;% Active Users&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retention Curve Example&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This produces a retention curve showing how quickly your cohort drops off. Replace the dummy dataset with your own &lt;strong&gt;user activity logs&lt;/strong&gt; and you can generate this view directly.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;When I was working on large-scale products, I was always surprised how long topline metrics could look “healthy” before retention curves revealed cracks.&lt;/em&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  3. Experimentation Pipelines: Why A/B Tests Beat Correlations
&lt;/h2&gt;

&lt;p&gt;Funnels and retention curves tell you where to look, but they’re observational. They can show correlations, not causation. That’s where experimentation comes in.  &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Visual: Control vs Treatment with error bars&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwre0mhi03vn7k48xmgkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwre0mhi03vn7k48xmgkn.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A great example is notifications:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observational data:&lt;/strong&gt; Users with more notifications look more engaged.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experiment:&lt;/strong&gt; Randomly sending extra notifications doesn’t improve engagement. The correlation was just that more active users naturally generate more notifications.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Visual: Before/After (Notifications Example)&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4i0z41btwoux0lk51enh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4i0z41btwoux0lk51enh.png" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is why experimentation is exciting but also essential. Observational data helps you prioritize, but experiments tell you what’s real.  &lt;/p&gt;




&lt;h2&gt;
  
  
  4. Communicating Insights: From Data to Decisions
&lt;/h2&gt;

&lt;p&gt;Even the best analysis won’t matter if it isn’t communicated clearly. Translating findings into plain recommendations is one of the most valuable skills in analytics.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7b1fuiufmem56pi5v45l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7b1fuiufmem56pi5v45l.png" alt=" " width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’ve seen too many great analyses get ignored because the results were presented as “p=0.12, CI = [-0.5, 5.1]” instead of “No significant effect. Keep current approach.” The difference may seem small, but it’s what drives product decisions.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Product analytics isn’t about copying someone else’s funnel or retention metric. It’s about:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mapping your user journey in a way that makes sense for your product.
&lt;/li&gt;
&lt;li&gt;Measuring whether you actually have product-market fit.
&lt;/li&gt;
&lt;li&gt;Using experimentation to separate signal from noise.
&lt;/li&gt;
&lt;li&gt;Communicating insights clearly so they drive real action.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I look back, the biggest lesson for me was this: &lt;strong&gt;analytics only matters when it changes what a team does next.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;💡 I’d love to hear from you: &lt;em&gt;What funnels or retention metrics do you track in your product?&lt;/em&gt; Drop an example in the comments — I’m curious how others measure user value.  &lt;/p&gt;

</description>
      <category>datascience</category>
      <category>analytics</category>
      <category>experimentation</category>
      <category>productmanagement</category>
    </item>
  </channel>
</rss>
