{"course":{"slug":"ai-careers","title":"Working in AI","url":"https://addaly.com/learn/ai-careers","level":"beginner","track":"work"},"lesson":{"slug":"being-trusted-with-a-number","title":"Being trusted with a number","url":"https://addaly.com/learn/ai-careers/being-trusted-with-a-number","position":79,"of":85,"minutes":8,"answer":"Reputation in data work is built by catching your own mistakes before anyone else does.","keyIdea":"Reputation in data work is built by catching your own mistakes before anyone else does."},"body":{"format":"markdown","text":"## The asymmetry that governs the job\n\nOne wrong number presented in a leadership meeting costs more trust than ten correct ones build. That is unfair and it is how people work: a correct number is invisible, and a wrong one is a story told for a year.\n\nThe response is not anxiety. It is a routine: a fixed sequence you run before anything leaves your hands, so that checking is not a decision you have to make while tired.\n\n## The checking list\n\n**1. Row counts before and after every join.** Write them down. If the count changed and you did not expect it to, stop and find out why. This single habit prevents the most expensive class of error in analytics.\n\n**2. Reconcile against a second source.** The finance export, the admin panel, last month's report, the count in the source system. Your number does not have to match exactly; you have to be able to explain the gap.\n\n**3. Look at five actual rows.** Beginners never do this and it catches an astonishing share of bugs: the duplicated record, the test account, the row where the customer name is `asdf`.\n\n**4. Check the boundaries.** Earliest and latest date. Minimum and maximum of every numeric column. Count of nulls per column. A max order value of 9,999,999 or a date in 1970 is a data problem announcing itself.\n\n**5. Ask what this number would look like if you were wrong in the most likely way.** If you suspect a fan-out, what would revenue look like if every order were counted three times? If it looks like *that*, you have your answer.\n\n## Two bugs worth knowing by name\n\n**Fan-out**, from the SQL lesson: joining to a one-to-many table before aggregating a one-side column multiplies it. Row counts catch it.\n\n**The daylight-saving gap.** A job scheduled inside the hour when the clocks change (between 01:00 and 03:00 local time in Europe and North America) can be skipped at the spring change or run twice at the autumn one, depending on the scheduler, because local time is not monotonic: the clock moves forward in spring and backward in autumn. The symptom is one missing day in March and one doubled day in October or November. Schedule in UTC; convert for display only.\n\n## Presenting a number with its uncertainty\n\nThe fear is that caveats make you sound unreliable. Done properly they do the opposite:\n\n> \"Orders were 14,200 last month, up nine per cent. Two things to know: the Nigeria channel is missing three days because of the migration, so the true figure is slightly higher. And I have excluded test accounts, which the old report did not: that alone accounts for about two points of the change.\"\n\nThat is a person who has checked. The version without caveats is either luckier or less careful, and everybody in the room eventually finds out which.\n\n## \"I do not know yet\"\n\nA complete and professional answer, with a time attached: *\"I do not know yet. I will have it by four.\"* It builds far more trust than a confident guess that turns out wrong, and it is available to you at any experience level.\n\nThe failure mode is the guess given to avoid looking uncertain in a meeting, which then travels into a slide, which then travels into a decision.\n\n## When you get it wrong\n\nYou will. The recovery is mechanical:\n\n1. Say so immediately, in the same channel where the wrong number was given.\n2. Give the corrected figure.\n3. One sentence on the cause. Not a paragraph of apology.\n4. One sentence on what stops it recurring.\n\nDo not bury it, do not wait for the next meeting, and do not hope nobody noticed. Fast correction is the behaviour that makes people comfortable relying on you, because it means they will hear about problems from you first.\n\n## Automating the checks\n\nThe free path is a script with assertions, and it covers most of what expensive tooling does:\n\n```python\nassert df[\"order_id\"].is_unique, \"duplicate order ids\"\nassert df[\"amount\"].min() >= 0, \"negative amounts present\"\nassert before == after, f\"join changed row count: {before} -> {after}\"\n```\n\n**dbt** has tests built in and is free and open source. **Great Expectations** and **Soda Core** are free libraries for the same job. The paid observability products (Monte Carlo and similar) buy you automated anomaly detection across many tables, which matters at scale and not on your first pipeline. Job adverts name them; start with the assertions.\n\n## The limitation\n\nNo amount of checking survives a source system changing without telling you. A field renamed, a new status value, a supplier changing their export format: your assertions pass on old assumptions until the day they do not.\n\nThat is why monitoring counts *over time* matters more than any one-off check. A row count that has been 40,000 daily for a year and is 12,000 this morning is worth an alert, and setting that up is usually a day of work that pays for itself the first time."},"check":{"question":"Ten minutes after presenting last quarter's figures to the leadership team, you realise you double-counted one region. What should you do?","options":[{"text":"Correct it in the next monthly report, with a footnote explaining the revision.","correct":false,"tempting":"Delays a correction people are already acting on, and a footnote a month later is found by nobody who saw the original."},{"text":"Say so immediately in the same channel: the corrected figure, one sentence on the cause, and one sentence on the check that will prevent it recurring.","correct":true},{"text":"Check the whole analysis thoroughly first, then send a full write-up of everything you found.","correct":false,"tempting":"Optimises for completeness while a wrong number is actively circulating; the corrected figure should go out now and the full account can follow."},{"text":"Mention it privately to your manager and let them decide whether it needs a wider correction.","correct":false,"tempting":"Transfers a decision you can make, delays the correction, and puts your manager in the position of concealing something on your behalf."}]},"prev":{"slug":"reading-code-you-did-not-write","title":"Landing in a codebase nobody documented","url":"https://addaly.com/learn/ai-careers/reading-code-you-did-not-write"},"next":{"slug":"what-gets-automated","title":"Which parts of this work are most exposed","url":"https://addaly.com/learn/ai-careers/what-gets-automated"},"authorship":"Founder and series editor: Dr Mustafa Mun. Written by AI models to a written standard. Exam keys checked blind by a second model: 3,665 of 3,666 agreed. Academic review invited.","review":{"status":"Draft, open for academic review"},"cite":"Addaly (2026) 'Being trusted with a number', in Working in AI. Edited by M. Mun. Addaly. Available at: https://addaly.com/learn/ai-careers/being-trusted-with-a-number (Accessed: 13 October 2026).","licence":{"name":"CC BY-NC-SA 4.0","url":"https://creativecommons.org/licenses/by-nc-sa/4.0/"},"reader":{"schema":1,"title":"Being trusted with a number","courseTitle":"Working in AI","module":{"index":9,"slug":"staying","title":"Staying: the first ninety days and the ten years after"},"answer":null,"keyIdea":"Reputation in data work is built by catching your own mistakes before anyone else does.","hero":{"kind":"plate","image":null,"alt":null,"caption":null},"blocks":[{"t":"h2","id":"the-asymmetry-that-governs-the-job","runs":[{"text":"The asymmetry that governs the job"}]},{"t":"p","runs":[{"text":"One wrong number presented in a leadership meeting costs more trust than ten correct ones build. That is unfair and it is how people work: a correct number is invisible, and a wrong one is a story told for a year."}]},{"t":"p","runs":[{"text":"The response is not anxiety. It is a routine: a fixed sequence you run before anything leaves your hands, so that checking is not a decision you have to make while tired."}]},{"t":"h2","id":"the-checking-list","runs":[{"text":"The checking list"}]},{"t":"p","runs":[{"text":"1. Row counts before and after every join.","b":true},{"text":" Write them down. If the count changed and you did not expect it to, stop and find out why. This single habit prevents the most expensive class of error in analytics."}]},{"t":"p","runs":[{"text":"2. Reconcile against a second source.","b":true},{"text":" The finance export, the admin panel, last month’s report, the count in the source system. Your number does not have to match exactly; you have to be able to explain the gap."}]},{"t":"p","runs":[{"text":"3. Look at five actual rows.","b":true},{"text":" Beginners never do this and it catches an astonishing share of bugs: the duplicated record, the test account, the row where the customer name is "},{"text":"asdf","code":true},{"text":"."}]},{"t":"p","runs":[{"text":"4. Check the boundaries.","b":true},{"text":" Earliest and latest date. Minimum and maximum of every numeric column. Count of nulls per column. A max order value of 9,999,999 or a date in 1970 is a data problem announcing itself."}]},{"t":"p","runs":[{"text":"5. Ask what this number would look like if you were wrong in the most likely way.","b":true},{"text":" If you suspect a fan-out, what would revenue look like if every order were counted three times? If it looks like "},{"text":"that","i":true},{"text":", you have your answer."}]},{"t":"h2","id":"two-bugs-worth-knowing-by-name","runs":[{"text":"Two bugs worth knowing by name"}]},{"t":"p","runs":[{"text":"Fan-out","b":true},{"text":", from the SQL lesson: joining to a one-to-many table before aggregating a one-side column multiplies it. Row counts catch it."}]},{"t":"p","runs":[{"text":"The daylight-saving gap.","b":true},{"text":" A job scheduled inside the hour when the clocks change (between 01:00 and 03:00 local time in Europe and North America) can be skipped at the spring change or run twice at the autumn one, depending on the scheduler, because local time is not monotonic: the clock moves forward in spring and backward in autumn. The symptom is one missing day in March and one doubled day in October or November. Schedule in UTC; convert for display only."}]},{"t":"h2","id":"presenting-a-number-with-its-uncertainty","runs":[{"text":"Presenting a number with its uncertainty"}]},{"t":"p","runs":[{"text":"The fear is that caveats make you sound unreliable. Done properly they do the opposite:"}]},{"t":"quote","runs":[{"text":"“Orders were 14,200 last month, up nine per cent. Two things to know: the Nigeria channel is missing three days because of the migration, so the true figure is slightly higher. And I have excluded test accounts, which the old report did not: that alone accounts for about two points of the change.”"}]},{"t":"p","runs":[{"text":"That is a person who has checked. The version without caveats is either luckier or less careful, and everybody in the room eventually finds out which."}]},{"t":"h2","id":"i-do-not-know-yet","runs":[{"text":"“I do not know yet”"}]},{"t":"p","runs":[{"text":"A complete and professional answer, with a time attached: "},{"text":"”I do not know yet. I will have it by four.”","i":true},{"text":" It builds far more trust than a confident guess that turns out wrong, and it is available to you at any experience level."}]},{"t":"p","runs":[{"text":"The failure mode is the guess given to avoid looking uncertain in a meeting, which then travels into a slide, which then travels into a decision."}]},{"t":"h2","id":"when-you-get-it-wrong","runs":[{"text":"When you get it wrong"}]},{"t":"p","runs":[{"text":"You will. The recovery is mechanical:"}]},{"t":"ol","start":1,"items":[[{"text":"Say so immediately, in the same channel where the wrong number was given."}],[{"text":"Give the corrected figure."}],[{"text":"One sentence on the cause. Not a paragraph of apology."}],[{"text":"One sentence on what stops it recurring."}]]},{"t":"p","runs":[{"text":"Do not bury it, do not wait for the next meeting, and do not hope nobody noticed. Fast correction is the behaviour that makes people comfortable relying on you, because it means they will hear about problems from you first."}]},{"t":"h2","id":"automating-the-checks","runs":[{"text":"Automating the checks"}]},{"t":"p","runs":[{"text":"The free path is a script with assertions, and it covers most of what expensive tooling does:"}]},{"t":"code","lang":"python","label":"Python","text":"assert df[\"order_id\"].is_unique, \"duplicate order ids\"\nassert df[\"amount\"].min() >= 0, \"negative amounts present\"\nassert before == after, f\"join changed row count: {before} -> {after}\""},{"t":"p","runs":[{"text":"dbt","b":true},{"text":" has tests built in and is free and open source. "},{"text":"Great Expectations","b":true},{"text":" and "},{"text":"Soda Core","b":true},{"text":" are free libraries for the same job. The paid observability products (Monte Carlo and similar) buy you automated anomaly detection across many tables, which matters at scale and not on your first pipeline. Job adverts name them; start with the assertions."}]},{"t":"h2","id":"the-limitation","runs":[{"text":"The limitation"}],"role":"limit"},{"t":"p","runs":[{"text":"No amount of checking survives a source system changing without telling you. A field renamed, a new status value, a supplier changing their export format: your assertions pass on old assumptions until the day they do not."}]},{"t":"p","runs":[{"text":"That is why monitoring counts "},{"text":"over time","i":true},{"text":" matters more than any one-off check. A row count that has been 40,000 daily for a year and is 12,000 this morning is worth an alert, and setting that up is usually a day of work that pays for itself the first time."}]}],"check":{"question":[{"text":"Ten minutes after presenting last quarter’s figures to the leadership team, you realise you double-counted one region. What should you do?"}],"options":[{"text":[{"text":"Correct it in the next monthly report, with a footnote explaining the revision."}],"correct":false,"tempting":[{"text":"Delays a correction people are already acting on, and a footnote a month later is found by nobody who saw the original."}]},{"text":[{"text":"Say so immediately in the same channel: the corrected figure, one sentence on the cause, and one sentence on the check that will prevent it recurring."}],"correct":true,"tempting":null},{"text":[{"text":"Check the whole analysis thoroughly first, then send a full write-up of everything you found."}],"correct":false,"tempting":[{"text":"Optimises for completeness while a wrong number is actively circulating; the corrected figure should go out now and the full account can follow."}]},{"text":[{"text":"Mention it privately to your manager and let them decide whether it needs a wider correction."}],"correct":false,"tempting":[{"text":"Transfers a decision you can make, delays the correction, and puts your manager in the position of concealing something on your behalf."}]}],"order":[2,3,1,0],"why":null},"prev":{"slug":"reading-code-you-did-not-write","title":"Landing in a codebase nobody documented","minutes":9},"next":{"slug":"what-gets-automated","title":"Which parts of this work are most exposed","minutes":7}}}