This capstone module brings together every concept from Course 1 — SQL foundations, advanced SQL, database design, PostgreSQL internals, and NoSQL polyglot persistence — into a single end-to-end project: building the data layer for CricketVerse, a fictional national cricket analytics platform. Across the capstone exercises you will design a normalised schema, optimise its physical layout with indexes and partitioning, write the analytical queries that power the product's dashboards, and architect the polyglot persistence layer that handles the platform's real-time and historical workloads. The capstone simulates the actual scope of work a data engineer delivers when standing up a new analytical platform.
A capstone differs from the module exercises you have completed so far in one important way: the module exercises were scaffolded — each step told you exactly what to build and provided the solution code. The capstone exercises specify requirements and acceptance criteria, but leave the design and implementation decisions to you. This mirrors real engineering work, where the requirements are clear but the solution is yours to design. Reference solutions are provided in each exercise lesson, but the learning value comes from attempting the design before reading them.
By completing this capstone, you will have a portfolio-quality artifact: a complete data platform design with a normalised PostgreSQL schema, a documented index and partitioning strategy, a set of production-grade analytical queries, and a polyglot architecture decision record. This is exactly the kind of work product that demonstrates data engineering competence to employers and clients — more compelling than a certificate alone, because it shows applied skill across the full lifecycle of a data platform.
The CricketVerse Platform Requirements
Business Context
CricketVerse is a national cricket analytics platform serving three user types: fans (who want live scores, player profiles, and leaderboards), analysts (who want deep statistical queries across decades of data), and broadcasters (who need real-time data feeds during live matches). The platform tracks every ball bowled in every match across all formats (Test, ODI, T20) and all levels (international, IPL, domestic), going back 20 years. At peak — during a major tournament like the IPL or a World Cup — the platform ingests delivery events from up to 10 simultaneous live matches at a combined rate of approximately 100 deliveries per second, while serving hundreds of thousands of concurrent dashboard users.
The platform's data has natural structure: countries contain teams, teams field players, players appear in matches, matches are hosted at venues and belong to tournaments and seasons, and each match consists of innings, which consist of deliveries. This hierarchy must be modelled correctly in a normalised relational schema while remaining performant for the analytical queries that drive the product. The delivery-level data is the largest and fastest-growing dataset — 20 years of every-ball data across all matches amounts to hundreds of millions of delivery records.
Functional Requirements
The platform must support these analytical capabilities: career batting and bowling statistics per player across formats; head-to-head records between any two players (how a specific batter performs against a specific bowler); venue analysis (average first-innings score, win rates batting first vs second); season leaderboards updated in real time during live matches; partnership analysis (runs scored by pairs of batters); and form analysis (a player's rolling average over their last N innings using window functions). Each capability maps to specific SQL techniques from the course.
The platform must also meet non-functional requirements: dashboard leaderboard reads must return in under 50 milliseconds even during peak load; the delivery event ingestion must sustain 100+ writes per second without dropping events; career statistics queries must complete in under 1 second; and the historical data (older than 2 years) must be archivable to cheaper storage without affecting query performance on recent data. These non-functional requirements drive the physical design decisions: indexing, partitioning, caching, and polyglot persistence.
Capstone Structure
The capstone is delivered across three exercise lessons and one final project. Exercise 1 (Schema Design) asks you to design the complete normalised PostgreSQL schema with appropriate constraints, then add the physical design (indexes and partitioning) that meets the non-functional requirements. Exercise 2 (Analytical Queries) asks you to write the production queries that power each functional requirement, applying joins, aggregations, window functions, and CTEs. Exercise 3 (Polyglot Architecture) asks you to design the multi-database architecture that handles the real-time and historical workloads, with an explicit decision record. The final project integrates all three into a complete, documented platform deliverable.
The requirements summary above is your reference card for the entire capstone. Keep it open as you work through the three exercises — each entity, relationship, functional requirement, and non-functional requirement maps to specific work you will do. The entities and relationships drive Exercise 1's schema design. The functional requirements drive Exercise 2's analytical queries. The non-functional requirements drive both the physical design in Exercise 1 and the polyglot architecture in Exercise 3.
Notice how the non-functional requirements map directly to course concepts: NFR1 (sub-50ms leaderboard) points to the Redis sorted set pattern from Module 5; NFR2 (100+ writes/sec ingestion) points to partitioning from Module 3 or Cassandra from Module 5; NFR3 (sub-1s career stats) points to materialised views from Module 3 and indexing from Module 4; NFR4 (archive old data) points to range partitioning with DETACH PARTITION from Module 3. This explicit mapping from requirement to technique is the core skill the capstone develops.
How to Approach the Capstone
Attempt each exercise's design before reading its reference solution. The reference solutions show one correct approach, but there are always multiple valid designs — your design may differ from the reference and still be correct. The value of the capstone comes from grappling with the design decisions yourself: which columns belong in the partition key, whether to embed or reference, where a materialised view pays off, when to reach for Redis versus a PostgreSQL index. Reading the solution without attempting the design first reduces the capstone to passive reading rather than active skill-building.
Document your decisions as you make them. For each design choice, write a one-sentence justification: 'Partitioned deliveries by match_date because NFR4 requires archiving data older than 2 years, and DETACH PARTITION makes this instant.' This documentation habit is what separates senior engineers from juniors — the ability to explain not just what was built, but why. The final project explicitly requires a decision record, so building it incrementally as you work through the exercises makes the final assembly straightforward.
Test your work against the acceptance criteria. After each exercise, verify: is the schema in 3NF (no transitive or partial dependencies)? Does every foreign key have an index? Does each query return correct results on the test dataset? Does the architecture decision record explicitly state the trade-offs? Testing against explicit acceptance criteria — rather than assuming the work is correct because it runs without error — is the engineering discipline that catches design flaws before they reach production.