


Published Apr 02, 2026 • 6 min
In growth-stage systems, schema decisions are often treated as tactical implementation details. Months later, those same decisions surface as operational constraints that shape hiring plans, cloud spend, product velocity, and even margin profiles discussed in fundraising conversations.
A schema is a long-term commitment.
When a table holds 500 million rows, a “simple migration” is no longer simple. It becomes a planning exercise involving risk modeling, backfill strategies, online migration techniques, rollout sequencing, and rollback contingencies, sometimes a multi-month infrastructure program.
we approach schema design the same way we approach core code architecture:
Beginning with 3NF forces clarity in the domain model, reduces update anomalies, and makes relationships explicit. It ensures the data model reflects the business model, not just the immediate feature.
Then, and only then, denormalization should be introduced deliberately, based on observed query patterns and real workload characteristics. Not hypothetical scale. Not imagined traffic. Measured usage.
Performance issues in production are often attributed to “tuning.” In practice, the root cause is frequently modeling ambiguity or structural shortcuts taken early.
High-cardinality WHERE/JOIN/ORDER BY columns require selectivity-aware indexing
pg_stat_user_indexes, remove indexes that show zero or near zero scansConstraints are executable business rules, not decorations. NOT NULL, UNIQUE, CHECK, and foreign keys enforced at the database layer eliminate categories of bugs and reduce defensive application logic permanently.
If you are a founder or CTO scaling a product:
EXPLAIN ANALYZE to validate assumptions, not intuitionCloud cost discipline, engineering velocity, and margin resilience are directly downstream of how seriously you took your data model in year one.