,

Documenting quality so others trust you

5 min read
Editorial featured image for Documenting quality so others trust you. Title text reads Documenting quality so others trust you.

You profiled. You deduped. You mapped categories. You labeled time zones. You automated checks. Then a new analyst joined, rebuilt a metric from the wrong table, and the exec channel learned about “your” number the hard way. The work was solid. The trust surface was invisible. Quality that only lives in your head does not scale past vacation coverage.

This is Part 7 of Data quality for people who ship numbers, the last part of the series. Parts 1 through 6 made quality operational. Now you document just enough that others can rely on your datasets without a committee, a 40-page standard, or a tool nobody opens. Think of this as a light scorecard: dataset, owner, metrics, known issues, next check. Program-level governance still matters. We already publish that lens in Data Governance 101 and Master Data Management. This post is the analyst-scale version you can ship this month. Skills from the SQL series, Python for analytics, From spreadsheets to real data, and Analytics foundations all feed the same habit: make the contract readable.

What you’ll learn

  • Why light documentation beats both silence and bureaucracy
  • A scorecard template with dataset, owner, grain, metrics, issues, and next check
  • How to publish trust signals next to the data people actually use
  • A worked example scorecard filled from Parts 5 and 6 habits
  • How this series fits under broader governance without waiting for a program office

Trust is a product feature, not a personality trait

Example:

The light scorecard (copy this)

Example:

d7 one row scorecard
Single-dataset scorecard row

Keep one scorecard per consumer-facing dataset or certified mart, not per raw landing table unless raw is what people query. Prefer the object people argue about in meetings.

FieldWhat to writeExample
Dataset nameStable human name + technical nameOrders daily fact (analytics.orders_fact)
PurposeDecision or report it servesDaily revenue and order counts for Sales Ops
OwnerNamed human or rotation, plus backupAlex (Analytics), backup Sam
GrainOne-row sentenceOne row per order
Primary keyBusiness key used in checksorder_id
Time contractClocks from Part 5Event time UTC; local day by store zone; fiscal via date dim
ConsumersDashboards, exports, modelsSales daily board; finance weekly pack extract
Quality metrics3 to 7 measures with thresholdsSee metrics table below
Last green runWhen checks last passed2024-06-12 06:12 UTC
Known issuesHonest limits and workaroundsRefunds lag up to 48h; do not use for same-day net revenue
Next checkWhen quality will be reviewed againDaily automated suite; human review each Monday
LinksPipeline, dashboard, runbookRepo path, BI URL, incident channel

That is enough for 90% of workplace trust problems. Resist the urge to invent twenty optional metadata fields before the first five are filled for your top tables.

Quality metrics block (the heart of the card)

Pull metrics from Part 6 checks. Show current value, threshold, and status. Update automatically if you can; update manually on a schedule if you must. Stale green is worse than an honest “unknown.”

MetricThresholdCurrentStatus
Row count (yesterday)> 0 and within 60% to 140% of 4-week same-weekday median12,480PASS
Duplicate order_id0 extra rows0PASS
Null amount rate≤ 0.1%0.02%PASS
Orphan customer_id03FAIL
Load freshnessmax loaded_at_utc lag ≤ 6 hours on weekdays2.1 hoursPASS
Invalid order dates0 rows outside 2000 to 2100 after cast0PASS

When a metric fails, the scorecard should not hide. Put the failure at the top for the day, link the check log, and state the user-facing impact in one sentence: “Do not use customer segment joins until orphans are cleared.”

Where to publish so people actually see it

Documentation dies in orphan wikis. Place the scorecard on the path of consumption:

  • BI tool description or certified badge text for the main dashboard
  • Warehouse table comment or a sibling view named …_dq that returns the latest status row
  • README in the repo that builds the mart, with a rendered Markdown card
  • Channel topic or pinned post for the team that gets paged on failure
  • Export sidecar for CSV and spreadsheet handoffs (the metadata habit from the Python series)

Pick two surfaces, not seven. Consistency beats coverage. If your company later adopts a catalog, these scorecards become the seed content instead of empty templates.

Known issues: the most underrated trust builder

Hidden caveats destroy credibility. Written caveats build it. A known issue should include:

  • What is wrong or limited
  • Who is affected
  • Since when
  • Workaround
  • Expected fix or “accepted risk” owner

Examples that read as adult, not weak:

  • “Same-day net revenue is incomplete because refunds post up to 48 hours later. Use T+2 for finance-facing nets.”
  • “Store 118 migrated POS on 2024-05-01. Pre-migration order IDs can collide with the legacy system; filter source_system.”
  • “Category ‘Other’ is still 7% after Part 4 mapping. Do not use for assortment strategy until under 3%.”

This is the same honesty as good-enough data in foundations: confidence language beats fake certainty.

Worked example: Orders daily fact scorecard

Here is a filled card you can adapt. It assumes Part 5 time rules and Part 6 checks exist.

# Data quality scorecard (light)
# Dataset: Orders daily fact
# Technical: analytics.orders_fact
# Version: 2024-06-12

purpose: >
  Certified order-level fact for Sales Ops daily board and the finance
  weekly extract. Not for real-time inventory.

owner:
  primary: Alex Rivera (analytics)
  backup: Sam Chen (analytics)
  channel: #data-sales-ops

grain: one row per order
primary_key: order_id

time_contract:
  event_timestamp: ordered_at_utc (UTC instant)
  business_day: local_business_date (store IANA zone)
  fiscal: join analytics.date_dim on local_business_date
  partial_day_policy: mark current local day as in_progress

consumers:
  - Sales daily dashboard (certified)
  - finance_weekly_orders.csv export job
  - churn features notebook (read-only, secondary)

quality_metrics:
  - name: rows_yesterday
    threshold: ">0 and within 60%-140% of 4-week same-weekday median"
  - name: unique_order_id
    threshold: "0 duplicate keys"
  - name: null_amount_rate
    threshold: "

Example output:

You can store the same content as Markdown, YAML, a warehouse table, or a Notion page. The format is secondary. The fields and the honesty are primary.

Optional: a one-query status face for SQL users

-- Latest scorecard face for BI description or a status tile
SELECT
  dataset_name,
  owner_primary,
  grain,
  overall_status,
  failing_checks,
  known_issues_open,
  last_green_at_utc,
  next_human_review_at
FROM analytics.dq_scorecard_current
WHERE dataset_name = 'orders_fact';

-- overall_status example logic (materialize in your job)
-- FAIL if any gate check failed in the last run
-- WARN if only soft-band checks failed
-- PASS otherwise

Pair this with a tiny Python writer that updates dq_scorecard_current after the Part 6 suite. The scorecard becomes a living object instead of a slide that ages out after the offsite.

from datetime import datetime, timezone

def summarize_suite(results):
    """results: list of objects with .name, .ok, .detail from Part 6."""
    failed = [r for r in results if not r.ok]
    if not failed:
        status = "PASS"
    elif any(r.name.startswith("row_count") or "unique" in r.name for r in failed):
        status = "FAIL"
    else:
        status = "WARN"
    return {
        "dataset_name": "orders_fact",
        "overall_status": status,
        "failing_checks": ", ".join(r.name for r in failed) or None,
        "checked_at_utc": datetime.now(timezone.utc).isoformat(),
        "owner_primary": "Alex Rivera",
    }

# pseudo: write_to_warehouse("analytics.dq_scorecard_current", summarize_suite(results))

Writing for three audiences at once

A scorecard fails if only engineers can parse it. Aim for three readers:

  • The rushed stakeholder: purpose, status, known issues, “safe to use for X / not for Y”
  • The analyst on call: grain, keys, check names, runbook links, owner
  • Future you: why thresholds exist, when exceptions were accepted, what changed last quarter

Lead with plain English. Keep technical names in parentheses. Avoid unexplained acronyms. If you must say SLA, define it once as the promised freshness or quality bar. If you must say RACI, you may already be climbing into program governance, which is fine, but do not force that vocabulary onto a single mart card.

Certification without theater

Some teams stamp dashboards “certified.” The stamp only helps when it means a published scorecard plus green gates. Empty certification is worse than no badge because it teaches leaders to stop asking questions.

A minimal certification contract:

  • Named owner and backup
  • Grain and primary key written
  • Automated suite scheduled with logged results
  • Known issues section reviewed in the last 30 days
  • Consumer list so you know who to notify on FAIL

If any bullet is missing, call the asset “in progress” or “team use,” not certified. Honesty scales. Theater does not.

How much process is enough?

Use a simple ladder. Climb only when pain demands it.

StageWhat you haveWhen to stay hereWhen to level up
Personal notesREADME + three checksOne consumer, one ownerSomeone else ships from your table
Light scorecardThis post’s template + logTeam of analysts, a few certified dashboardsMultiple domains, auditors, or frequent handoffs
Shared catalog entriesScorecards imported to a catalogCompany-wide discovery painRegulated data, formal stewardship roles
Governance programPolicies, councils, MDM, RACIEnterprise risk and cross-domain conflictYou need operating model change, not more wiki pages

Most readers of this series should live happily at the light scorecard stage for a long time. That is not a lesser path. It is how quality shows up in the work week. When leadership asks for “governance,” you can point to scorecards and check logs as evidence you already practice stewardship, then grow into program design using the governance articles rather than starting from slogans.

Common mistakes

MistakeWhat happensBetter move
Documenting only columns, never grainPeople still double countLead with one-row meaning
Owner is “the data team”Nobody acts on FAILNamed human + backup
No known issues sectionUsers rediscover limits in meetingsWrite the awkward truths
Scorecard updated yearlyFalse trustTie updates to check runs
Green badge without thresholdsTheaterShow metric, threshold, value
Catalog everything firstBurnout, empty fieldsTop five datasets only
Hiding failures to protect imageLarger blast radius laterFail public, fix fast, note impact

Rule of thumb: If a competent stranger cannot decide whether to use your table for a board slide after two minutes on the scorecard, the card is not done.

How to practice this week (and close the series)

  1. List the five datasets that cause the most Slack arguments. Rank by blast radius, not by elegance.
  2. Fill one light scorecard completely, including at least one known issue. If you have zero issues, you are probably not looking.
  3. Connect the card to Part 6: paste last run statuses and timestamps.
  4. Publish the card on two surfaces (for example BI description + repo README).
  5. Walk one stakeholder through the card in ten minutes. Ask what was still ambiguous. Fix those lines.
  6. Schedule the Monday human review for 15 minutes. Put it on a calendar like a real meeting.

When those habits stick, you have finished the hands-on quality path: define bad data, profile, dedupe, standardize, fix time, validate, and document trust. For deeper program design, policies, and cross-domain ownership, continue with Data Governance 101 and Master Data Management. For more skill tracks, use the Learn hub.

Series recap: Data quality for people who ship numbers

PartFocusYou can now…
1What “bad data” meansName dimensions with workplace examples
2Profile before you polishMeasure nulls, ranges, and weird categories first
3Deduping without destroying historyRespect keys and soft deletes
4Standardizing categories and namesUse mapping tables; avoid “Other” hell
5Dates, time zones, fiscal calendarsStore UTC, display local, separate fiscal clocks
6Validation you can automateGate loads with counts, keys, freshness, sanity
7Documenting qualityPublish a light scorecard others trust

None of this requires waiting for a perfect platform. It requires repeating small adult habits until the room stops treating data quality as a surprise.

A 30-day rollout plan (one team)

If you want a concrete path from “we should document more” to “we trust our top tables,” try this month-long shape:

  1. Week 1: Pick five datasets. Write grain, owner, and purpose only. Share in the team channel for corrections.
  2. Week 2: Attach Part 6 checks to the top two datasets. Create the check log table. Fail once on purpose in staging.
  3. Week 3: Fill metrics and known issues. Publish scorecards on BI descriptions and READMEs. Walk one stakeholder through each card.
  4. Week 4: Add Monday human review. Retire one noisy check. Promote one more dataset from notes to full card. Stop there unless pain demands more.

That plan is deliberately small. Quality programs die when month one tries to boil the ocean. Analysts win when month one makes two dashboards safer and one on-call shift less scary.

Quick recap

  • Trust needs a readable contract: purpose, owner, grain, metrics, issues, next check.
  • Publish scorecards on the path of use, not only in a distant wiki.
  • Known issues written down increase confidence; hidden limits destroy it.
  • Automate status from Part 6 checks so green means something measurable.
  • Stay light until pain demands catalogs and formal governance programs.

You made it through the series. Ship one scorecard this week. Then go back to the numbers with fewer 5 p.m. mysteries.

Sources

Research and further reading used for this article: