The ladderRung 4 of 8outline, full version in progress
Rung 4 — OLTP + first analytics (read replicas, reporting database)
One line: Stop running reports on the database that runs the business.
Concept. You leave Rung 2 (or 3) because the transactional database (OLTP — the one taking orders) is also the reporting database, and the two workloads fight. A month-end report locks tables; a dashboard refresh slows checkout. This rung separates writing the business from reading about the business: a read replica for live queries, and a reporting database (or your first small warehouse) fed by a nightly copy. The questions change from "what is this order?" to "how are we doing this week?" and the answers stop costing a day.
Signs you are here. Business: a dashboard exists; someone's job is "reports"; numbers
for the week are available by Monday, not by Wednesday; the owner has stopped asking the
developer for SQL. Technical: a read replica; a nightly ETL/ELT job; a BI tool pointed at
something that is not production; the first dim_ and fact_ tables; the first
argument about what "revenue" means.
The decision. Replica only, or a separate reporting store? Replica when the questions are simple and same-shape as the app data; reporting store when you need history the app overwrites (price changes, status transitions) or joins across sources. Copy nightly or continuously? Nightly, until someone can name a decision that needs today's data (that is the Rung 5 trigger). Warehouse product now or plain Postgres? Plain Postgres reporting DB is enough until it isn't; a cloud warehouse (BigQuery, Snowflake) is fine to start here if the team already knows one.
Tools. Read replicas: built into RDS, Cloud SQL, Supabase, Neon. Copy/ELT: Airbyte, Fivetran, or a scheduled SQL job (pg_dump + cron is legitimate at the low end). Reporting DB: Postgres; or BigQuery / Snowflake / DuckDB + MotherDuck for a light warehouse. Transformation: dbt. BI: Metabase (free, good enough), Looker Studio, Power BI, Tableau when the audience is large.
Next trigger. Toward Rung 5: a decision that needs today's numbers, not yesterday's; downstream systems (email, inventory, fraud) polling the database for changes; the nightly job runs past morning. Toward Rung 6 directly: several source systems, years of history, many BI users, and ad-hoc queries that cost real money.
Threads. Security: the reporting store is a second copy of PII — same controls,
separate credentials, read-only for analysts. Compliance: GDPR deletes must propagate
to the copy; HIPAA means de-identify before it lands in reporting where you can. Data
modeling: dimensional modeling (facts and dimensions, Kimball) for the reporting store;
slowly-changing dimensions for history; keep OLTP normalized. Cost: the replica doubles
the database bill; warehouse queries are pay-per-scan — one bad SELECT * on a year of
data is the first surprise invoice.
[k3r war-story slot: the report that took down checkout]