What the diagnosis measures.
Every diagnosis scores your work on the same six concept dimensions, each tiered beginner / junior / senior. The levels describe your work on that dimension — never you.
SQL & Querying
Correctness and performance of set-based queries — joins, windows, aggregation, and reading what the engine actually does.
Writes correct single-table queries and basic joins; leans on SELECT * and row-by-row thinking.
Comfortable with multi-table joins, window functions, and aggregation; not yet reasoning about plans or skew.
Designs queries for correctness and cost at scale. Controls join order, partition pruning, and predicate pushdown deliberately.
Data Modeling & Storage Design
Schema, keys, normalization, file format, and partitioning chosen against real access patterns and cost.
Models tables ad hoc; little normalization or key discipline.
Applies normalization, keys, and basic dimensional modeling; format and partitioning are mostly defaults.
Chooses schema, format, and partitioning against access patterns and cost; reasons about evolution and contracts.
Programming for Data (Python)
Structure, testing, error handling, and resource-awareness of the code that moves and transforms data.
Writes working scripts; limited structure, error handling, or tests.
Modular code with some tests; idiomatic but not yet defensive about edge cases or memory.
Composable, tested, observable code that handles failure, backpressure, and data volume by design.
Distributed Data Processing
Batch and stream as one concept area — partitioning, shuffles, state, skew, late data, and delivery semantics.
Uses a framework's defaults; unaware of shuffles, partitioning, or batch/stream trade-offs.
Understands partitioning and shuffles; writes batch and basic streaming jobs but tunes reactively.
Reasons about distribution, state, and exactly-once vs at-least-once; designs for skew, late data, and recovery.
Pipeline Orchestration & Reliability
Idempotency, retries, backfills, observability, and failure isolation — whether the pipeline survives a bad day.
Runs steps manually or with brittle scheduling; little idempotency.
Builds DAGs with retries; partial-failure and backfill handling is incomplete.
Designs idempotent, observable pipelines with clear SLAs, safe backfills, and failure isolation.
System & Scenario Judgment
Cross-cutting senior judgment — framing ambiguous problems, naming assumptions and trade-offs, and defending decisions.
Solves the stated task; doesn't surface trade-offs or constraints.
Identifies obvious trade-offs; weighs cost, latency, and complexity inconsistently.
Frames ambiguous problems, names assumptions and trade-offs, and defends decisions against cost, scale, and failure.