cassionData Analysis

Back to the lessonLesson 4 of 8What travels with the number

The panel that caught a wrong number in this course

The same deck as the downloads, rendered as a page. Start the slideshow to present it full screen — arrow keys or a click advance one slide, Escape leaves.

Slides · PDFSlides · PowerPoint

  1. Slide 1 / 22

    What this lesson covers

    • What happened
    • Why the documentation was the one that was right
    • What a definition entry contains
    • Where the panel lives
    • The check the panel makes possible
    • The argument this prevents every month
    • Report it whole
    • What comes next
    Speaker notes
    Two artefacts on this platform computed improved water coverage from the same file and got 82.3% and 79.7%. The technical documentation was right and the lesson was wrong, and nothing except a definition panel and a second computation would have found it.
  2. Slide 2 / 22

    What happened — In Python

    # What the lesson had
    IMPROVED = {
        "piped-into-dwelling", "piped-into-yard", "public-tap",
        "borehole", "protected-well", "protected-spring",
    }
    Speaker notes
    The WASH project has carried an indicator definitions document since it was written. It states improved water coverage as 82.3% and basic service as 56.3%, with the numerator, the denominator and the standard for each. The WASH course lesson, the committed figure and the first version of the project dashboard all said 79.7% and 54.7%.
  3. Slide 3 / 22

    What happened — In R

    # What the JMP definition actually lists
    improved <- c("piped-into-dwelling", "piped-into-yard", "public-tap",
                  "borehole", "protected-well", "protected-spring",
                  "tanker-truck")     # packaged or delivered water
  4. Slide 4 / 22

    What happened

    • The JMP improved list includes packaged or delivered water — which is tanker-truck in this dataset
    • Nothing detected it for months — The lesson was internally consistent, the figure agreed with the lesson because it…
    Speaker notes
    The JMP improved list includes packaged or delivered water, which is tanker-truck in this dataset. The lesson omitted it — in a course that names the JMP ladder and SDG 6.1.1 explicitly — and understated improved coverage by 2.6 points and basic service by 1.6. Nothing detected it for months. The lesson was internally consistent, the figure agreed with the lesson because it used the same set, the tests passed, and the number was plausible. It surfaced the day a second artefact computed the same indicator from the same file and disagreed.
  5. Slide 5 / 22

    Why the documentation was the one that was right — Example

    ### 2.1 Improved source
    
    | Numerator   | Households whose main drinking water source is piped, borehole,
    |             | protected well, protected spring, rainwater or packaged water
    | Denominator | All surveyed households
    | Value       | 0.823
    | Valid at    | Household, community, district
    | Standard    | WHO/UNICEF JMP service ladders
    Speaker notes
    Because it stated the definition rather than implementing it.
  6. Slide 6 / 22

    Why the documentation was the one that was right

    • Writing "or packaged water" in prose made it checkable against the standard — A Python set of six strings does not read…
    • That is the whole argument for the panel — It is not documentation of the code — it is the specification the code is…
    Speaker notes
    Writing "or packaged water" in prose made it checkable against the standard. A Python set of six strings does not read like anything; a numerator written as a sentence can be compared to the definition it claims to implement. That is the whole argument for the panel. It is not documentation of the code — it is the specification the code is supposed to satisfy, written in a form a sector specialist can audit without reading Python.
  7. Slide 7 / 22

    What a definition entry contains

    FieldExample
    NumeratorHouseholds with an improved source and a round trip of 30 minutes or less
    DenominatorAll surveyed households
    Value0.563
    Valid atHousehold, community, district
    StandardJMP service ladders; SDG 6.1.1
    Decision informedWhich communities receive rehabilitation
    Speaker notes
    Six fields, and the last two are the ones usually missing.
  8. Slide 8 / 22

    What a definition entry contains

    • "Valid at" prevents the commonest misuse — A number computed at district level and quoted at community level is the…
    • "Decision informed" is what justifies the indicator existing — The WASH documentation writes "None
    Speaker notes
    "Valid at" prevents the commonest misuse. A number computed at district level and quoted at community level is the same arithmetic answering a different question, and stating the level is what stops it. "Decision informed" is what justifies the indicator existing. The WASH documentation writes "None. It is reported so the report can show what changed" against improved coverage — which is an unusually honest entry and exactly right: the figure is retained to quantify a gap, not to be used.
  9. Slide 9 / 22

    Where the panel lives

    WhereWhat it holds
    On the dashboardOne clause per tile — "improved and within 30 minutes"
    In the technical documentationThe full entry, six fields, per indicator
    In the codeA comment naming the standard and the reason
    Speaker notes
    Three places, and they are not alternatives.
  10. Slide 10 / 22

    Where the panel lives — In Python

    # The JMP improved list, which includes packaged or delivered water —
    # `tanker-truck` here. Omitting it understates improved coverage by 2.6
    # points and disagrees with the project's own indicator documentation.
    IMPROVED = {...}
  11. Slide 11 / 22

    Where the panel lives — In R

    # The comment is what makes the next reader check rather than assume.
  12. Slide 12 / 22

    Where the panel lives

    • The tile clause is what a reader sees; the document is what a challenger reads; the comment is what the next analyst…
    Speaker notes
    The tile clause is what a reader sees; the document is what a challenger reads; the comment is what the next analyst edits. All three, or the three drift.
  13. Slide 13 / 22

    The check the panel makes possible

    • Compute the indicator twice, from different code, and compare — That is what found the error here, and it is a check…
    Speaker notes
    Compute the indicator twice, from different code, and compare. That is what found the error here, and it is a check you can run deliberately rather than by accident.
  14. Slide 14 / 22

    The check the panel makes possible — In Python

    from_pipeline = summary["basic_service"]
    from_documentation = 0.563          # the value the definition panel states
    assert abs(from_pipeline - from_documentation) < 0.001, (
        f"pipeline {from_pipeline:.3f} disagrees with the definition panel"
    )
  15. Slide 15 / 22

    The check the panel makes possible — In R

    stopifnot(abs(basic_service - 0.563) < 0.001)
  16. Slide 16 / 22

    The check the panel makes possible

    • A stated value in the definition panel is a test fixture — Once the panel carries the number, any pipeline that…
    • And when they disagree, decide which is authoritative before changing either — Here the standard settled it: JMP lists…
    Speaker notes
    A stated value in the definition panel is a test fixture. Once the panel carries the number, any pipeline that computes it differently fails loudly — which is the workflows course's rule arriving in a place nobody expects it. And when they disagree, decide which is authoritative before changing either. Here the standard settled it: JMP lists delivered water, so the documentation was right and four other artefacts were corrected to match.
  17. Slide 17 / 22

    The argument this prevents every month

    "Coverage is 82%." — "We reported 76% last quarter." — "That was a different definition." — "Which one is right?"
  18. Slide 18 / 22

    The argument this prevents every month

    • Both are right and they are different indicators — Without a panel that conversation takes twenty minutes every quarter…
    • The commonest three disagreements in this sector — all of which a panel settles:
    • Source against service — Improved source, 82.3%
    • Numerator population against denominator population — Gross enrolment of 109.2% is a projected denominator, not more…
    • Screening against survey — A screening rate is not a prevalence estimate, and the nutrition dashboard here says so in…
    Speaker notes
    The indicator definition panel exists because of a specific recurring meeting. Both are right and they are different indicators. Without a panel that conversation takes twenty minutes every quarter and is never resolved; with one it takes as long as opening the document. The commonest three disagreements in this sector, all of which a panel settles: Source against service. Improved source, 82.3%. Basic service, 56.3%. Twenty-six points, and both are correct. Numerator population against denominator population. Gross enrolment of 109.2% is a projected denominator, not more children than exist. Screening against survey. A screening rate is not a prevalence estimate, and the nutrition dashboard here says so in its own "what this does not show" section.
  19. Slide 19 / 22

    Report it whole — Example

    Indicator definitions
    
      Full definitions in docs/indicator-definitions.md: numerator, denominator,
      the level it is valid at, the standard applied, and the decision it
      informs, for each of the nine indicators in this report.
    
      Each dashboard tile carries the definition compressed to one clause.
    
      The pipeline asserts its computed values against the values stated in the
      definitions document. A disagreement fails the build rather than reaching
      a report.
    
      Change log: 2026-07-29, improved source corrected from 79.7% to 82.3%.
      Delivered water (tanker truck) was omitted from the JMP improved list.
      The definitions document had it right; the analysis code did not.
  20. Slide 20 / 22

    Report it whole

    • The change log entry is the part worth copying — An indicator that changed definition needs a dated line saying what…
    Speaker notes
    The change log entry is the part worth copying. An indicator that changed definition needs a dated line saying what changed and which direction, or every comparison with an earlier report is silently wrong.
  21. Slide 21 / 22

    What comes next

    • The dashboard answers a question.
    Speaker notes
    The dashboard answers a question. The report is where the answer gets argued, and the next lesson is about writing one whose findings, limitations and recommendation can be read separately — because they will be.
  22. Slide 22 / 22

    Where this goes next

    Read the full lesson, with runnable code Back to the lesson