Backfilling reprocesses historical data. Airflow supports this natively:
airflow dags backfill -s 2024-01-01 -e 2024-01-31 daily_etl
Catchup: When catchup=True (default), Airflow runs all missed intervals when a DAG starts. Set catchup=False if you only want future runs.
Design for backfills: Your tasks should accept a date parameter and process only that date's data. Avoid hardcoded "yesterday" logic.
Backfill-friendly pipelines save hours of debugging later.