The SQL-versus-NoSQL decision gets made badly more often than almost any other early architecture choice, usually because it's driven by hype or a scaling fear that won't materialize for years. 'NoSQL' isn't even one thing — it's an umbrella over document stores, key-value stores, wide-column databases, and graph databases, each solving a different problem — while 'SQL' means the mature, relational, ACID-transactional model that has quietly run most of the world's software for decades. The honest framing isn't 'which is more modern' or 'which scales,' it's 'what shape is my data, what access patterns do I actually have, and what guarantees does my business need.' Get that right and the database becomes a boring, dependable foundation; get it wrong and you'll spend the next two years fighting your own datastore or reimplementing in your application the exact features you threw away.
What relational databases are genuinely great at
A relational database like PostgreSQL is the right default for most SaaS, and that's not nostalgia — it's because most SaaS data is relational and most SaaS needs transactional guarantees. Your users belong to organizations, subscriptions have plans, invoices have line items: this is structured, interconnected data with relationships, and SQL models it directly with joins instead of forcing you to duplicate and manually keep it in sync. ACID transactions mean that when a payment succeeds, the balance updates and the receipt is created atomically — either all of it happens or none of it does — which is exactly the guarantee anything touching money, entitlements, or multi-tenant isolation actually requires. And SQL is a powerful, standard query language that lets you ask questions of your data you didn't anticipate at design time, without a data pipeline. Modern Postgres also does JSON columns well, so you can keep the relational backbone and still store the occasional flexible, semi-structured blob without reaching for a second database.
What NoSQL is actually for
NoSQL earns its place when your data or access pattern genuinely doesn't fit the relational model — not as a general-purpose upgrade. A document store (MongoDB, DynamoDB) shines for data that's naturally self-contained and schema-flexible, read and written as a whole document, without many cross-entity relationships — think product catalogs, user-generated content, event payloads, or per-tenant config that varies wildly in shape. A key-value store like Redis is unbeatable for fast, simple lookups — sessions, caching, rate-limiter counters — where you want a value by its key in microseconds and nothing more. Wide-column and time-series stores handle enormous streams of writes (metrics, logs, IoT telemetry) at a volume that would strain a relational primary. The pattern across all of these: NoSQL trades away joins, flexible ad-hoc queries, and often strict consistency in exchange for a specific, dramatic win on a specific access pattern. When you have that access pattern, it's the right tool; when you don't, you're paying the cost without collecting the benefit.
'NoSQL scales better' is the myth that causes the most damage
The single most common reason teams reach for NoSQL is a belief that it 'scales' and SQL doesn't — and it's misleading enough to be worth dismantling directly. NoSQL databases were designed to scale horizontally across many nodes easily, which is real, but two things get lost. First, a well-run relational database scales far further than most teams ever need: with sensible indexing, read replicas, connection pooling, and eventually partitioning, PostgreSQL comfortably handles workloads that dwarf what a growth-stage SaaS will see for years — the techniques are well understood and covered in depth in scaling PostgreSQL. Second, NoSQL's horizontal scaling isn't free — you typically pay for it with weaker consistency (eventual consistency, where a read may briefly return stale data), the loss of cross-document transactions, and query patterns you must decide up front because you can't easily ask new questions later. Choosing NoSQL to solve a scaling problem you don't yet have means taking on those real, immediate costs to hedge against a hypothetical future one. Solve for the workload you actually have.
Model around your access patterns, not the other way around
The deeper skill isn't picking a database brand; it's designing your data model around how you'll actually read and write it — and this is where the two philosophies diverge most. Relational modeling normalizes first (structure the data cleanly, then query it flexibly with joins), which optimizes for asking arbitrary questions later. NoSQL modeling inverts this: you design the data to match your queries, often denormalizing and duplicating so a single read returns everything a screen needs with no joins — which is fast and scalable but rigid, because a new access pattern can mean restructuring or maintaining yet another copy of the data. Neither is 'better'; they optimize for opposite things. The failure mode is using a document store like a relational database (scattering related data across documents and then desperately trying to join them in application code) or bolting rigid, query-shaped denormalization onto data whose access patterns are still changing weekly. Know your access patterns first; let them choose the model.
Boring by default, polyglot on purpose
For the overwhelming majority of growth-stage SaaS, the right answer is a boring one: start with a solid relational database as your system of record, and reach for a specialized store only when a specific, demonstrated need appears. That's not conservatism for its own sake — a single well-understood datastore is dramatically simpler to operate, back up, secure, and reason about than a sprawl of databases each with its own failure modes and its own on-call surprises. As you grow, the mature pattern is polyglot persistence, but adopted deliberately: Postgres as the transactional core, Redis in front for caching and sessions, perhaps a document store for one genuinely document-shaped feature and a time-series database for metrics — each added because it earns its keep, not because it's fashionable. The engineering judgment that matters isn't knowing every database; it's resisting the urge to add one until the workload actually demands it, and then choosing the specific tool that fits the specific access pattern you've proven you have.
How Infiniti Tech Partners chooses your data layer
We choose databases from your data and your access patterns, not from fashion or scaling anxiety. For most SaaS that means a relational core — usually PostgreSQL — because the data is relational and the business needs transactional guarantees around money, entitlements, and tenant isolation, and because a well-run Postgres scales far past where most teams fear it will. Where a genuine access pattern justifies it, we add the right specialized store deliberately: Redis for caching and sessions, a document store for truly document-shaped data, a time-series database for high-volume telemetry — polyglot on purpose, never by accident. We model around how you actually read and write, so the schema fits the queries instead of fighting them. The result is a data layer that's boring in the best way: dependable, operable by a small team, and scalable along the axis you'll actually grow on.
Frequently asked questions
Should I use SQL or NoSQL for my SaaS?
For most SaaS, a relational database like PostgreSQL is the right default, because most SaaS data is relational (users belong to organizations, invoices have line items) and most SaaS needs the transactional guarantees that anything touching money or entitlements requires. Reach for NoSQL only when a specific access pattern genuinely doesn't fit the relational model — a document store for self-contained schema-flexible data, a key-value store like Redis for fast simple lookups, or a time-series store for huge write volumes. Choose from your data shape and access patterns, not from hype.
Does NoSQL really scale better than SQL?
It's misleading. NoSQL databases scale horizontally across nodes more easily, but a well-run relational database scales far further than most growth-stage teams ever need — with indexing, read replicas, connection pooling, and eventually partitioning, PostgreSQL handles workloads that dwarf what you'll see for years. And NoSQL's scaling isn't free: you typically pay with weaker (eventual) consistency, the loss of cross-document transactions, and query patterns you must fix up front. Choosing NoSQL to solve a scaling problem you don't yet have means taking on real, immediate costs against a hypothetical future one.
When should a SaaS use multiple databases (polyglot persistence)?
Start with one solid relational database as your system of record and add a specialized store only when a specific, demonstrated need appears — a single well-understood datastore is far simpler to operate, back up, and secure than a sprawl of them. The mature pattern is polyglot persistence adopted deliberately: Postgres as the transactional core, Redis for caching and sessions, perhaps a document store for one genuinely document-shaped feature and a time-series database for metrics. The judgment that matters is resisting the urge to add a database until the workload actually demands it.
Related reading
Event-Driven Architecture: Queues, Streams, and When Async Actually Helps
When to reach for queues and event streams instead of synchronous calls — the difference between a queue and a log, the patterns that make async reliable (outbox, idempotency, dead-letter queues), and the failure modes teams underestimate.
EngineeringAPI Design and Versioning: Building Interfaces You Won't Regret
How to design APIs that survive contact with real integrators — resource modeling, consistency, pagination, and a versioning and deprecation strategy that lets you evolve without breaking every customer.
EngineeringPlatform Engineering: Building an Internal Developer Platform That Pays Off
What platform engineering and internal developer platforms actually solve for growth-stage SaaS — golden paths, self-service, and paved roads — and how to build one without creating a bottleneck team.