{
  "site": "https://goagentdata.com/",
  "kind": "guide-self-check-and-stages",
  "generated_from": "site pages",
  "updated": "2026-10-15",
  "license": "Code and rules under MIT. Writing under CC BY 4.0.",
  "headline": "A wrong number looks exactly like a right one.",
  "subhead": "A free, vendor-neutral guide for founders, CEOs, growth leads and data people building with AI: what to measure and record at your stage, before the history you need is gone.",
  "lede": "AI makes it easy to get answers. On its own, it will not tell you when the answer is wrong, or when a better one was within reach.",
  "trust": "Every check is open to read. No vendor pays for placement.",
  "pages": {
    "home": "https://goagentdata.com/",
    "guide": "https://goagentdata.com/guide",
    "stages": [
      "https://goagentdata.com/stages/before-launch",
      "https://goagentdata.com/stages/first-customers",
      "https://goagentdata.com/stages/growing"
    ],
    "posts": "https://goagentdata.com/posts",
    "contact": "https://goagentdata.com/contact"
  },
  "path": {
    "title": "Where does a number go wrong?",
    "url": "https://goagentdata.com/guide",
    "opener": "These five steps take your data from the right problem to the right decision at the right time, and each one can go wrong without a warning.",
    "intro": "Each step below names what goes wrong, a guardrail and a check you can run on your own data.",
    "steps": [
      {
        "id": "problem",
        "position": 1,
        "name": "Choose the problem",
        "url": "https://goagentdata.com/guide#problem",
        "failure": "You answer a question no decision depends on.",
        "example": "A startup charts site visits while nobody asks why early customers cancel.",
        "guardrail": "Before building anything, find the gate: the problem that, once solved, lets you move on, such as a cost, the funnel or how long customers stay. Write it as a question with its decision.",
        "check": "Finish this sentence: if the answer is X we do A, and if it is Y we do B.",
        "technical": "Write a short question brief: the gate, the decision, the candidate metrics, the cheapest data that could answer it, and an owner. Give agents the brief, not a schema to explore.",
        "company_brain": "Write down the question and the decision it serves.",
        "checks": []
      },
      {
        "id": "collect",
        "position": 2,
        "name": "Collect what you need",
        "url": "https://goagentdata.com/guide#collect",
        "failure": "Data you will need is never recorded, gets overwritten, or stops arriving.",
        "example": "A startup edits plans in place, and a year later nobody can say how long customers stayed on the starter plan.",
        "guardrail": "Give each customer one ID that links every system, keep each plan and status change with its date, and check daily that data arrives.",
        "check": "Next to each thing you collect, write the question or number it serves now or in the coming months. Anything with no answer is collecting for its own sake. Then ask to see one customer's old plan and the date it changed.",
        "technical": "One internal customer ID, with every external ID mapped to it. created_at and updated_at, soft deletes, and a history or snapshot table for status and plan. UTC timestamps, raw data kept, money stored with currency. Freshness and row count alerts go to a named person.",
        "company_brain": "Write down what you collect and why.",
        "checks": [
          "keep-history",
          "one-customer-id"
        ]
      },
      {
        "id": "measure",
        "position": 3,
        "name": "Choose the number",
        "url": "https://goagentdata.com/guide#measure",
        "failure": "You track a number that looks like the goal and is not, or one name carries two meanings.",
        "example": "A campaign is judged on sign-ups, a vanity number, while the customers it brings leave within a month.",
        "guardrail": "Run the company on one outcome and its few drivers. Give each number a written meaning, a decision and an owner.",
        "check": "Ask which decision changes if this number moves, then ask two people to define it. If the answers differ, you have two numbers.",
        "technical": "Metric file fields: definition, population with exclusions (test and internal accounts by default, pilots in or out on purpose), grain, time zone, decision, owner, version. Vanity test: remove the metric, and if no decision, owner or action changes, retire it.",
        "company_brain": "Write down the definitions.",
        "checks": [
          "metric-files"
        ]
      },
      {
        "id": "compute",
        "position": 4,
        "name": "Count it right",
        "url": "https://goagentdata.com/guide#compute",
        "failure": "The right number is calculated wrong and still looks fine.",
        "example": "An overnight import fails and reruns, so a day of orders counts twice.",
        "guardrail": "Calculate from the written definition on a copy of the data, make imports safe to rerun, and leave test accounts out. Every dashboard and agent reads the number from the same place, and that place says when the number is known to be broken.",
        "check": "Reproduce one number a second way, such as the finance total, then count the test accounts inside it. There should be none.",
        "technical": "Idempotent loads with unique keys. Check row counts before and after every join to catch fan-out. is_test set on the account and inherited by its users and events. Reconcile revenue to billing. Analytics run on a replica or nightly export, never the primary. Agents get read-only roles and a scratch schema, and propose changes by pull request. Serve every metric from one layer (metric files or a semantic layer) with a status per metric, so a late source or a broken count warns every tool and agent before it answers.",
        "company_brain": "Write down the checks and their status.",
        "checks": [
          "flag-test-accounts",
          "no-analytics-on-primary"
        ]
      },
      {
        "id": "conclude",
        "position": 5,
        "name": "Read it right",
        "url": "https://goagentdata.com/guide#conclude",
        "failure": "A correct number is read the wrong way.",
        "example": "Feature users stay longer, so the team pushes everyone into the feature. They were staying anyway.",
        "guardrail": "Before you act, name one other explanation and compare like with like. A person reads the agent's conclusion before anyone acts on it.",
        "check": "Write one other explanation and one fact that would tell them apart.",
        "technical": "Use cohorts instead of running totals. Exclude partial periods, and look at seasonality, segment mixes that reverse a trend, the denominator and selection bias. Have the agent cite the metric file behind every claim in a draft, and have a person approve.",
        "company_brain": "Write down how to read the number.",
        "checks": []
      }
    ],
    "metrics": {
      "tree": {
        "label": "This is only an example.",
        "note": "Yours depends on your business.",
        "levels": [
          {
            "level": 1,
            "name": "Outcome",
            "example": [
              "Paying customers at month end"
            ],
            "technical": "The single outcome the company is run on, chosen for its stage. Every box is a number with a unit and a period."
          },
          {
            "level": 2,
            "name": "Drivers",
            "example": [
              "New paying customers this month",
              "Share of last month's customers still paying"
            ],
            "technical": "Together they add up to the outcome: last month's customers times the share kept, plus the new ones."
          },
          {
            "level": 3,
            "name": "Levers",
            "example": [
              "Days from signup to first value",
              "Hours to first support reply"
            ],
            "technical": "Numbers one team can move directly. Each rolls up to one driver, and that link is a hypothesis until tested."
          }
        ]
      },
      "context": {
        "label": "What every number carries",
        "items": [
          {
            "id": "definition",
            "plain": "What it means",
            "detail": "One written meaning that everyone shares."
          },
          {
            "id": "population",
            "plain": "Who is counted",
            "detail": "Who is included and excluded, such as test accounts."
          },
          {
            "id": "period",
            "plain": "Which period",
            "detail": "The dates and the time zone it covers."
          },
          {
            "id": "decision",
            "plain": "The decision it informs",
            "detail": "The decision this number is there to inform."
          },
          {
            "id": "owner",
            "plain": "Who owns it",
            "detail": "One named person answers questions about it."
          }
        ]
      }
    },
    "safe_by_default": {
      "title": "Safe by default",
      "url": "https://goagentdata.com/guide#safe",
      "items": [
        "Read-only agent on a copy",
        "Own login per person",
        "Only the data you need",
        "Personal details removed on request"
      ],
      "technical": "Read-only roles, one named login per person per tool, secrets in a store, personal fields tagged, retention written per personal field and an erasure path. The rules guide the agent, and the access settings enforce them."
    },
    "closing": {
      "title": "What is a company brain, and what has to come first?",
      "url": "https://goagentdata.com/guide#company-brain",
      "opener": "Everything you wrote down in steps 1 to 5 is your company brain.",
      "intro": "A company brain is the shared record of definitions, decisions and context that your people and their agents read from. It only gives right answers when the data underneath was collected and counted right.",
      "text": [
        "Keep it in one place, where people and agents read the same thing."
      ],
      "failure": "An agent answers from a definition that changed last month, or from a guess, and the answer looks right.",
      "guardrail": "Keep one shared place for definitions, decisions and context, with an owner and a date on each entry, and have agents read from it before they answer.",
      "check": "Ask a colleague and your agent what counts as an active customer. If the answers differ, the record is missing or nobody reads it.",
      "technical": "Keep the record as files in a repository: metric files, a short decision log and a note for each number that turned out wrong. Point agents at it in their instructions, and review every change by pull request."
    }
  },
  "self_check": {
    "version": 2,
    "title": "Check your setup in 2 minutes",
    "url": "https://goagentdata.com/#self-check",
    "intro": "Say where you are, then answer four questions. Not sure counts as No.",
    "privacy": "Your answers stay on this page. We only count how many people finish the check.",
    "stage_question": {
      "question": "Where are you?",
      "options": [
        {
          "stage": "before-launch",
          "name": "Before launch",
          "summary": "Nobody pays yet"
        },
        {
          "stage": "first-customers",
          "name": "First paying customers",
          "summary": "You still know every customer"
        },
        {
          "stage": "growing",
          "name": "Growing",
          "summary": "Growth is repeatable and the numbers start to disagree"
        }
      ]
    },
    "answers": [
      "Yes",
      "Not sure",
      "No"
    ],
    "questions": [
      {
        "step": "problem",
        "question": "Can you name the decision your next piece of data work will change, and who makes it?"
      },
      {
        "step": "collect",
        "question": "If a customer changed plan last month, can you see both the old plan and the date it changed?",
        "by_stage": {
          "before-launch": "When you start charging, will you keep each customer's old plan and the date it changed?"
        }
      },
      {
        "step": "measure",
        "question": "If your headline number fell 20% tomorrow, would someone do something different this week?",
        "by_stage": {
          "before-launch": "If your main signup or activation number fell 20% tomorrow, would someone do something different this week?"
        }
      },
      {
        "step": "compute",
        "question": "Are test and internal accounts left out of your headline number?",
        "by_stage": {
          "before-launch": "Are test and internal accounts left out of your main signup or activation number?"
        }
      }
    ],
    "scoring": "Yes means guarded. No or Not sure means exposed. The first exposed step, in step order, is the first move, written for the chosen stage. No total score.",
    "results": [
      {
        "hash": "#check-before-launch-problem",
        "url": "https://goagentdata.com/#check-before-launch-problem",
        "stage": "before-launch",
        "first_move_step": "problem",
        "first_move": "Write the one question that leads to a first paying customer and the decision it informs.",
        "if_skipped": "You build and measure things that never lead to a first customer.",
        "check": "Finish this sentence: if the answer is X we do A, and if it is Y we do B.",
        "guide": "https://goagentdata.com/guide#problem",
        "stage_page": "https://goagentdata.com/stages/before-launch#problem"
      },
      {
        "hash": "#check-before-launch-collect",
        "url": "https://goagentdata.com/#check-before-launch-collect",
        "stage": "before-launch",
        "first_move_step": "collect",
        "first_move": "Add a dated history for plan and status changes, so a change adds a row instead of overwriting the old one.",
        "then": "Give each customer one ID from the first sign-up or deal. Mark test accounts when you create them. Keep a dated history of plan and status changes, mark deleted records instead of removing them, record a few key product actions, and restore a backup once. Then stop.",
        "if_skipped": "Your first customers' history is gone, and it often cannot be rebuilt later.",
        "check": "Next to each thing you collect, write the question or number it serves now or in the coming months. Anything with no answer is collecting for its own sake. Then ask to see one customer's old plan and the date it changed.",
        "guide": "https://goagentdata.com/guide#collect",
        "stage_page": "https://goagentdata.com/stages/before-launch#collect"
      },
      {
        "hash": "#check-before-launch-measure",
        "url": "https://goagentdata.com/#check-before-launch-measure",
        "stage": "before-launch",
        "first_move_step": "measure",
        "first_move": "Write the one or two numbers that answer your question on one page, each with the decision it informs and why you chose it.",
        "if_skipped": "The first definition belongs to whoever builds the first chart.",
        "check": "Ask which decision changes if this number moves, then ask two people to define it. If the answers differ, you have two numbers.",
        "guide": "https://goagentdata.com/guide#measure",
        "stage_page": "https://goagentdata.com/stages/before-launch#measure"
      },
      {
        "hash": "#check-before-launch-compute",
        "url": "https://goagentdata.com/#check-before-launch-compute",
        "stage": "before-launch",
        "first_move_step": "compute",
        "first_move": "Add a test flag to accounts, mark your own test accounts, and leave them out of the number you report.",
        "then": "Leave test and internal accounts out of every number from day one. Point the agent at a copy of the data, read-only, not the live database.",
        "if_skipped": "Your own test sign-ups look like early traction, and an agent query can slow the live product.",
        "check": "Reproduce one number a second way, such as the finance total, then count the test accounts inside it. There should be none.",
        "guide": "https://goagentdata.com/guide#compute",
        "stage_page": "https://goagentdata.com/stages/before-launch#compute"
      },
      {
        "hash": "#check-before-launch-clear",
        "url": "https://goagentdata.com/#check-before-launch-clear",
        "stage": "before-launch",
        "first_move_step": null,
        "text": "All four look guarded for your stage. Rerun one check this month to make sure."
      },
      {
        "hash": "#check-first-customers-problem",
        "url": "https://goagentdata.com/#check-first-customers-problem",
        "stage": "first-customers",
        "first_move_step": "problem",
        "first_move": "Pick the questions for one weekly review, where each number answers a question and leads to an action.",
        "if_skipped": "The review becomes a tour of charts with no decisions.",
        "check": "Finish this sentence: if the answer is X we do A, and if it is Y we do B.",
        "guide": "https://goagentdata.com/guide#problem",
        "stage_page": "https://goagentdata.com/stages/first-customers#problem"
      },
      {
        "hash": "#check-first-customers-collect",
        "url": "https://goagentdata.com/#check-first-customers-collect",
        "stage": "first-customers",
        "first_move_step": "collect",
        "first_move": "Join payments to product usage through one customer ID for last week, and list the customers that do not match.",
        "then": "Bring product, payments, sales, support and ad spend together under one ID. Turn any spreadsheet that acts as a record into a table. Keep one central copy refreshed nightly, daily snapshots and the raw records, with every amount stored with its currency. Alert a named person when data arrives late.",
        "if_skipped": "You cannot connect a cancelled payment to that customer's usage, and a stalled feed goes unnoticed.",
        "check": "Next to each thing you collect, write the question or number it serves now or in the coming months. Anything with no answer is collecting for its own sake. Then ask to see one customer's old plan and the date it changed.",
        "guide": "https://goagentdata.com/guide#collect",
        "stage_page": "https://goagentdata.com/stages/first-customers#collect"
      },
      {
        "hash": "#check-first-customers-measure",
        "url": "https://goagentdata.com/#check-first-customers-measure",
        "stage": "first-customers",
        "first_move_step": "measure",
        "first_move": "Write one metric file for the number you report most: what it means, who is counted, and who owns it.",
        "then": "Agree on a short list of key numbers, one definition each, written as metric files.",
        "if_skipped": "Two people bring different numbers with the same name to the same meeting.",
        "check": "Ask which decision changes if this number moves, then ask two people to define it. If the answers differ, you have two numbers.",
        "guide": "https://goagentdata.com/guide#measure",
        "stage_page": "https://goagentdata.com/stages/first-customers#measure"
      },
      {
        "hash": "#check-first-customers-compute",
        "url": "https://goagentdata.com/#check-first-customers-compute",
        "stage": "first-customers",
        "first_move_step": "compute",
        "first_move": "Count your headline number with and without test accounts. If the two differ, add the filter where the number is calculated.",
        "then": "Leave test accounts out by default. Make every import safe to rerun. Give people read-only access, and let the agent write only in a scratch area, never to the tables people rely on.",
        "if_skipped": "A rerun import counts a day twice and nobody sees it.",
        "check": "Reproduce one number a second way, such as the finance total, then count the test accounts inside it. There should be none.",
        "guide": "https://goagentdata.com/guide#compute",
        "stage_page": "https://goagentdata.com/stages/first-customers#compute"
      },
      {
        "hash": "#check-first-customers-clear",
        "url": "https://goagentdata.com/#check-first-customers-clear",
        "stage": "first-customers",
        "first_move_step": null,
        "text": "All four look guarded for your stage. Rerun one check this month to make sure."
      },
      {
        "hash": "#check-growing-problem",
        "url": "https://goagentdata.com/#check-growing-problem",
        "stage": "growing",
        "first_move_step": "problem",
        "first_move": "Pick one channel question and write it as a group of customers: who came from that channel, who stayed, and what it cost.",
        "then": "Frame channel questions as groups of customers: who came from each channel, who stayed, and what it cost. The data person challenges each question before anyone builds the answer, and checks each goal for how someone could game it.",
        "if_skipped": "The team optimizes for cheap sign-ups instead of customers who stay, and people hit targets by gaming the number.",
        "check": "Finish this sentence: if the answer is X we do A, and if it is Y we do B.",
        "guide": "https://goagentdata.com/guide#problem",
        "stage_page": "https://goagentdata.com/stages/growing#problem"
      },
      {
        "hash": "#check-growing-collect",
        "url": "https://goagentdata.com/#check-growing-collect",
        "stage": "growing",
        "first_move_step": "collect",
        "first_move": "Find one place where a deal or subscription change overwrites the old value, and start keeping a dated row for each change.",
        "then": "Record every change to a customer, deal or subscription, and join ad spend to revenue by channel. Keep a written, tested list of what you track, and keep accounts separate from the people who use them. A team that changes what its system records announces the change and tests it before release.",
        "if_skipped": "A renamed field breaks reports without an error.",
        "check": "Next to each thing you collect, write the question or number it serves now or in the coming months. Anything with no answer is collecting for its own sake. Then ask to see one customer's old plan and the date it changed.",
        "guide": "https://goagentdata.com/guide#collect",
        "stage_page": "https://goagentdata.com/stages/growing#collect"
      },
      {
        "hash": "#check-growing-measure",
        "url": "https://goagentdata.com/#check-growing-measure",
        "stage": "growing",
        "first_move_step": "measure",
        "first_move": "Pick the number your dashboards disagree on most, write one definition, and give it one owner.",
        "then": "Define each number once, have every tool read that definition, and review every change to it. Give each number one owner. This shared layer of definitions waited until now on purpose.",
        "if_skipped": "Each tool drifts to its own definition and the dashboards disagree.",
        "check": "Ask which decision changes if this number moves, then ask two people to define it. If the answers differ, you have two numbers.",
        "guide": "https://goagentdata.com/guide#measure",
        "stage_page": "https://goagentdata.com/stages/growing#measure"
      },
      {
        "hash": "#check-growing-compute",
        "url": "https://goagentdata.com/#check-growing-compute",
        "stage": "growing",
        "first_move_step": "compute",
        "first_move": "Make one import safe to rerun, then rerun one past day and check that nothing counts twice.",
        "then": "Move data in steps from raw to cleaned to business-ready. Reprocess any past period safely, including late data. Run automatic checks with owners, test changes away from the live setup, and put alerts on data spend.",
        "if_skipped": "A fix to one number quietly changes history somewhere else.",
        "check": "Reproduce one number a second way, such as the finance total, then count the test accounts inside it. There should be none.",
        "guide": "https://goagentdata.com/guide#compute",
        "stage_page": "https://goagentdata.com/stages/growing#compute"
      },
      {
        "hash": "#check-growing-clear",
        "url": "https://goagentdata.com/#check-growing-clear",
        "stage": "growing",
        "first_move_step": null,
        "text": "All four look guarded for your stage. Rerun one check this month to make sure."
      }
    ]
  },
  "stages": [
    {
      "id": "before-launch",
      "position": 1,
      "name": "Before launch",
      "full_name": "Before launch",
      "summary": "Nobody pays yet",
      "url": "https://goagentdata.com/stages/before-launch",
      "opener": "Before anyone pays, the right decisions later depend on data you can only record now.",
      "question": "Will anyone pay, and who are they?",
      "record_now": "Record now, or lose it: a dated history of each customer's plan and status changes. Once overwritten, it often cannot be rebuilt.",
      "steps": [
        {
          "step": "problem",
          "do": "Write the one question that leads to a first paying customer and the decision it informs.",
          "if_skipped": "You build and measure things that never lead to a first customer.",
          "not_yet": false
        },
        {
          "step": "collect",
          "do": "Give each customer one ID from the first sign-up or deal. Mark test accounts when you create them. Keep a dated history of plan and status changes, mark deleted records instead of removing them, record a few key product actions, and restore a backup once. Then stop.",
          "if_skipped": "Your first customers' history is gone, and it often cannot be rebuilt later.",
          "not_yet": false
        },
        {
          "step": "measure",
          "do": "Not yet: a full list of numbers. For now, write the one or two numbers that answer your question in a one page glossary, each with its decision and why you chose it.",
          "if_skipped": "The first definition belongs to whoever builds the first chart.",
          "not_yet": true
        },
        {
          "step": "compute",
          "do": "Leave test and internal accounts out of every number from day one. Point the agent at a copy of the data, read-only, not the live database.",
          "if_skipped": "Your own test sign-ups look like early traction, and an agent query can slow the live product.",
          "not_yet": false
        },
        {
          "step": "conclude",
          "do": "Not yet: rates. With so few customers a percentage is noise, so read each account and check every agent answer against what you know about your customers.",
          "if_skipped": "A rate on a handful of people reads like a trend.",
          "not_yet": true
        }
      ],
      "can_wait": [
        "You can skip new dashboards until the question and its decision are written down.",
        "Before your first paying customers you can skip a separate analytics database. One customer ID, dated history and a backup you have restored once come first.",
        "Until growth is repeatable you can skip new monitoring tools. A copy of the data, a test flag and one second source to compare against come first."
      ],
      "safe_by_default": "Collect only what you need, mark personal details, keep keys out of the code, and give each person their own login.",
      "who_runs_it": [
        "The founder runs it, with an AI agent.",
        "An experienced data person reviews the setup once, for a few hours."
      ],
      "posts": [
        "https://goagentdata.com/posts/one-definition-per-metric"
      ]
    },
    {
      "id": "first-customers",
      "position": 2,
      "name": "First paying customers",
      "full_name": "First paying customers",
      "summary": "You still know every customer",
      "url": "https://goagentdata.com/stages/first-customers",
      "opener": "With your first paying customers, the right decision at the right time comes from knowing why they stay or leave.",
      "question": "Why do customers stay or leave?",
      "record_now": "Record now, or lose it: a daily snapshot of your records. Without one, you cannot see how things looked on a past day.",
      "steps": [
        {
          "step": "problem",
          "do": "Pick the questions for one weekly review, where each number answers a question and leads to an action.",
          "if_skipped": "The review becomes a tour of charts with no decisions.",
          "not_yet": false
        },
        {
          "step": "collect",
          "do": "Bring product, payments, sales, support and ad spend together under one ID. Turn any spreadsheet that acts as a record into a table. Keep one central copy refreshed nightly, daily snapshots and the raw records, with every amount stored with its currency. Alert a named person when data arrives late.",
          "if_skipped": "You cannot connect a cancelled payment to that customer's usage, and a stalled feed goes unnoticed.",
          "not_yet": false
        },
        {
          "step": "measure",
          "do": "Agree on a short list of key numbers, one definition each, written as metric files.",
          "if_skipped": "Two people bring different numbers with the same name to the same meeting.",
          "not_yet": false
        },
        {
          "step": "compute",
          "do": "Leave test accounts out by default. Make every import safe to rerun. Give people read-only access, and let the agent write only in a scratch area, never to the tables people rely on.",
          "if_skipped": "A rerun import counts a day twice and nobody sees it.",
          "not_yet": false
        },
        {
          "step": "conclude",
          "do": "Review funnel and retention weekly. Run experiments only when you have enough traffic to read them. With few accounts, review them one by one.",
          "if_skipped": "You act on a difference that is only noise.",
          "not_yet": false
        }
      ],
      "can_wait": [
        "You can skip new dashboards until the question and its decision are written down.",
        "Until growth is repeatable you can skip a shared layer that every tool reads its definitions from. Start with the few numbers your question needs, each with a written meaning.",
        "Until growth is repeatable you can skip new monitoring tools. A copy of the data, a test flag and one second source to compare against come first."
      ],
      "safe_by_default": "Write down how long you keep each personal detail, and make sure you can remove a person's details on request.",
      "who_runs_it": [
        "The founder runs it, with an AI agent.",
        "A part-time data lead, working a few hours a week, owns the list of key numbers."
      ],
      "posts": [
        "https://goagentdata.com/posts/one-definition-per-metric"
      ]
    },
    {
      "id": "growing",
      "position": 3,
      "name": "Growing",
      "full_name": "Growing, with a first data person or about to hire one",
      "summary": "Growth is repeatable and the numbers start to disagree",
      "url": "https://goagentdata.com/stages/growing",
      "opener": "Once growth is repeatable, the right decisions depend on numbers every team trusts, and on one person who owns them.",
      "question": "Which channels bring customers who stay, and does every team trust the numbers that say so?",
      "record_now": "Record now, or lose it: every change to a customer, deal or subscription, with ad spend joined to revenue by channel. Without it, you cannot tell which channel's customers stayed.",
      "steps": [
        {
          "step": "problem",
          "do": "Frame channel questions as groups of customers: who came from each channel, who stayed, and what it cost. The data person challenges each question before anyone builds the answer, and checks each goal for how someone could game it.",
          "if_skipped": "The team optimizes for cheap sign-ups instead of customers who stay, and people hit targets by gaming the number.",
          "not_yet": false
        },
        {
          "step": "collect",
          "do": "Record every change to a customer, deal or subscription, and join ad spend to revenue by channel. Keep a written, tested list of what you track, and keep accounts separate from the people who use them. A team that changes what its system records announces the change and tests it before release.",
          "if_skipped": "A renamed field breaks reports without an error.",
          "not_yet": false
        },
        {
          "step": "measure",
          "do": "Define each number once, have every tool read that definition, and review every change to it. Give each number one owner. This shared layer of definitions waited until now on purpose.",
          "if_skipped": "Each tool drifts to its own definition and the dashboards disagree.",
          "not_yet": false
        },
        {
          "step": "compute",
          "do": "Move data in steps from raw to cleaned to business-ready. Reprocess any past period safely, including late data. Run automatic checks with owners, test changes away from the live setup, and put alerts on data spend.",
          "if_skipped": "A fix to one number quietly changes history somewhere else.",
          "not_yet": false
        },
        {
          "step": "conclude",
          "do": "Compare groups of customers over time, from the shared definitions. The agent drafts the analysis and a person reviews it before it travels. Write a short note whenever a number turns out wrong.",
          "if_skipped": "A confident agent-written story reaches the board unchecked, and the same mistake returns when the person who knew leaves.",
          "not_yet": false
        }
      ],
      "can_wait": [
        "Heavier tools can wait until something specific breaks."
      ],
      "safe_by_default": "Give the agent written rules and keep a list of what data exists. The agent suggests changes, and a person approves anything touching definitions, access or personal details. Review who can see what on a schedule.",
      "who_runs_it": [
        "Your first data person, full-time or half-time, runs it while an AI agent builds and maintains the setup.",
        "We think one person can now cover what used to take three."
      ],
      "posts": [
        "https://goagentdata.com/posts/one-definition-per-metric"
      ]
    }
  ],
  "checks": {
    "status": "You can read each one now. None is released yet.",
    "gap": "The other two steps are judgment calls that a person owns.",
    "safe_defaults": "Each check will tell your agent to start read-only, propose changes for a person to approve, and never write to a live system.",
    "url": "https://goagentdata.com/guide#checks",
    "packs": [
      {
        "id": "keep-history",
        "url": "https://goagentdata.com/guide#check-keep-history",
        "stage": [
          "Before launch",
          "First paying customers",
          "Growing"
        ],
        "step": "collect",
        "business_model": "all",
        "version": "0.1",
        "status": "draft",
        "last_reviewed": "2026-10-13",
        "guards": "A change overwrites the past, and last quarter's answer is gone.",
        "rules": [
          "every table has created_at and updated_at (UTC).",
          "deletes are soft: set deleted_at, keep the row. An erasure request is the exception: remove or mask that person's personal fields.",
          "a plan or price change adds a history row."
        ],
        "check": "change a plan on a test account; read back the old and new plan with their dates."
      },
      {
        "id": "one-customer-id",
        "url": "https://goagentdata.com/guide#check-one-customer-id",
        "stage": [
          "Before launch",
          "First paying customers",
          "Growing"
        ],
        "step": "collect",
        "business_model": "all",
        "version": "0.1",
        "status": "draft",
        "last_reviewed": "2026-10-13",
        "guards": "Each system has its own customer ID, so joins drop or double people.",
        "rules": [
          "each customer gets one internal ID at the first sign-up or deal.",
          "every external ID, in billing, the CRM and support, maps to that internal ID."
        ],
        "check": "pick three customers; find each one in billing and in the CRM through the internal ID alone."
      },
      {
        "id": "flag-test-accounts",
        "url": "https://goagentdata.com/guide#check-flag-test-accounts",
        "stage": [
          "Before launch",
          "First paying customers",
          "Growing"
        ],
        "step": "compute",
        "business_model": "all",
        "version": "0.1",
        "status": "draft",
        "last_reviewed": "2026-10-13",
        "guards": "Test accounts inside real numbers show growth that is not there.",
        "rules": [
          "every account has is_test, set when it is created; its users and events inherit it.",
          "every metric leaves is_test accounts out by default."
        ],
        "check": "count active accounts with and without test accounts; the headline active account number should equal the smaller count."
      },
      {
        "id": "no-analytics-on-primary",
        "url": "https://goagentdata.com/guide#check-no-analytics-on-primary",
        "stage": [
          "Before launch",
          "First paying customers",
          "Growing"
        ],
        "step": "compute",
        "business_model": "all",
        "version": "0.1",
        "status": "draft",
        "last_reviewed": "2026-10-13",
        "guards": "Queries on the live database can slow the product, and their answers shift and cannot be reproduced.",
        "rules": [
          "analysis and agent queries run on a replica or nightly export, never the live primary database.",
          "the agent gets read-only credentials."
        ],
        "check": "list the connections the agent and the dashboards use; none points at the primary."
      },
      {
        "id": "metric-files",
        "url": "https://goagentdata.com/guide#check-metric-files",
        "stage": [
          "Before launch",
          "First paying customers",
          "Growing"
        ],
        "step": "measure",
        "business_model": "all",
        "version": "0.1",
        "status": "draft",
        "last_reviewed": "2026-10-13",
        "guards": "A number's meaning lives in one head and changes quietly.",
        "rules": [
          "each metric has one file with its definition, who is counted and excluded, period and time zone, the decision it informs, and an owner.",
          "a change to a definition goes through review and raises the version."
        ],
        "check": "pick a number on a dashboard; find its file, its owner and the decision it informs."
      }
    ]
  }
}
