The summary.
NEVER WRITE A TASK THAT IMPLICITLY USES THE CURRENT DATE
It cannot be backfilled, and a delayed run processes the wrong period. Pass the period explicitly and make every task idempotent.
SCHEDULING BY CLOCK ASSUMES INPUTS ARE READY
They frequently are not, and the pipeline processes incomplete data silently. Wait for the condition, with a timeout — waiting forever is indistinguishable from working.
RETRIES FIX TRANSIENT FAILURES, NOT BAD DATA
Limit them, alert on final failure, and set a timeout on every task.
SUCCESSFUL RUNS PRODUCING ZERO OR HALF THE USUAL ROWS ARE THE COMMONEST SILENT FAILURE
Alert on row counts and freshness, with bounds derived from history rather than guessed.
Surface to users when data was last updated — a stale dashboard that does not say so is worse than one that is unavailable.
LINEAGE ANSWERS WHO IS AFFECTED WHEN SOMETHING FAILS
Generate it from the transformation definitions rather than maintaining it by hand.
REVIEW CHANGES TO BUSINESS DEFINITIONS WITH WHOEVER OWNS THEM
A transformation change silently alters reported figures, and someone has a report with the old numbers.