In ETL (Extract, Transform, Load), data is cleaned and shaped in a dedicated transformation layer before landing in the destination, which keeps the warehouse lean but tightly couples your logic to the pipeline. In ELT (Extract, Load, Transform), raw data lands first and transformations happen inside the target system using its own compute, which is the default approach on modern cloud warehouses like BigQuery, Snowflake, and Redshift where storage is cheap and SQL-at-scale is fast. I reach for ETL when the destination system has strict storage costs, when data must be masked or filtered before it ever touches the warehouse for compliance reasons, or when transformation logic requires imperative code that SQL cannot express cleanly. ELT wins when I want full raw history available for reprocessing, when business definitions change frequently (I just redeploy a dbt model rather than rerunning the entire pipeline), and when the warehouse has enough compute headroom to absorb the transformation cost. The real deciding factor is where your bottleneck lives: if compute in the destination is cheap and elastic, ELT reduces operational surface area significantly.
Insider read
Really testing: Whether you understand that this is an architectural trade-off driven by cost and reprocessability, not just a vocabulary distinction. Interviewers want to hear you reason about compute placement, storage costs, and how raw history enables late corrections.
The tell: Strong candidates immediately mention compliance or PII as a reason to keep ETL, then pivot to dbt or warehouse-native transforms when defending ELT. Weak candidates treat it as a pure definition question and never mention reprocessing or schema drift.
Follow-up: "If a business rule changes six months after you loaded the data, how do you reprocess under each model?"
Say this"On my last project we moved from ETL to ELT specifically because product changed metric definitions every sprint. With raw data already in Snowflake I could just update the dbt model and run a full refresh overnight, whereas the old Spark ETL job would have required a full historical backfill through the cluster."