Book Deep-Read · Fundamentals of Data Engineering · Chapter 3
Fundamentals of Data Engineering · Ch 3 · Reis & Housley · 2022
A company's sales, inventory, ads and support data live in dozens of separate systems. When the boss asks "which channel makes us the most money?", the answer has to be pulled together from all of them. Planning in advance how that data flows, where it lives and who looks after it is data architecture. This chapter is about what makes such a plan "good".
Data architecture is like planning a city that never stops growing. A good planner doesn't fix every building on day one. They lay the roads, water and power that everyone needs, then let each neighborhood build what it needs. A good plan lets the city grow without bulldozing the old town every time it expands.
With these principles a team can grow alongside the business without starting over. The right choice depends on size: a small team is fine with one off-the-shelf cloud setup; only when there are so many departments that the central team can't keep up is it worth handing data back to each department. One honest cost: the more spread out it is, the more flexible it gets, but the harder it becomes to agree on shared definitions and rules.
Good data architecture isn't a blueprint drawn once; it's a plan that keeps most decisions undoable, keeps the parts loosely joined, and keeps adjusting as the business changes.
Want the book's nine architecture principles, one-way vs two-way doors, the path from warehouse to lake to lakehouse, how to weigh Lambda against Kappa, and the four principles of data mesh? → Switch to Deep
You might think good data architecture is an end-state blueprint with the right tools picked. The chapter defines it instead as the design of systems to support the evolving data needs of an enterprise, achieved by flexible and reversible decisions reached through a careful evaluation of trade-offs. The key word is "reversible": warehouse, lake, lakehouse, Lambda and data mesh are all trade-offs for particular situations, and none of them is the finish line.
Chapter 3 of Part I, "Foundation and Building Blocks". Chapter 2 listed data architecture as one of the lifecycle's six undercurrents; this chapter gives it room of its own, and Chapter 4 moves on to choosing concrete technologies under these principles. In practice it maps to the architecture review behind "how should we build our data platform, and can we still change it in a few years?"
A data team's most expensive mistake is rarely one broken pipeline; it's architecture that locks itself in. An on-premises warehouse that took three years to build can't follow the business when strategy changes. All raw data poured into one lake leaves nobody, three years on, able to say what's usable or which files hold personal data that must be deleted. A single central team queues requests from dozens of departments, and a new report waits a quarter.
The chapter first defines data architecture, then gives nine principles for judging whether it's good, and finally puts the mainstream patterns (data warehouse, data lake, lakehouse, Lambda, Kappa, the unified Dataflow model and data mesh) against the same yardstick. The authors stress that a data engineer need not be an architect but must be architecture-aware, able to tell whether a decision is reversible.
Starting from several enterprise architecture definitions (TOGAF, Gartner and others), the authors distill their own: enterprise architecture is the design of systems to support change in the enterprise, achieved by flexible and reversible decisions reached through careful evaluation of trade-offs; data architecture is its data-side subset. It has two layers. Operational architecture answers "what": which business processes to support, how good the data must be, how much latency from creation to query is acceptable. Technical architecture answers "how": how data is ingested, stored, transformed and served. "Move 10 TB per hour from source databases into the lake" is a technical-architecture statement.
"Reversible" borrows Jeff Bezos's framing. A one-way door is a decision that's almost impossible to undo, such as selling the company or hard-wiring your core systems into one proprietary platform. A two-way door can be walked back at any time, such as moving a batch of objects to a cheaper storage class and moving them back if it doesn't work out. Two-way doors deserve speed and volume; only one-way doors deserve slowness and review meetings. Good architecture turns as many decisions as possible into two-way doors.
Drawing on the AWS Well-Architected Framework and Google Cloud's principles for cloud-native architecture, the authors list nine:
The book cites Amazon's famous internal API mandate: every team must expose its data and functionality through service interfaces, with no direct reads of another team's database. It's the best-known example of loose coupling: each team answers only for its interface and can change its internals without breaking anyone.
In data systems, a single-tier architecture puts database and application on one machine, the simplest and the most fragile; a multitier architecture separates data, application logic and presentation. A monolith keeps everything together, easy to start but hard to change; microservices split it into independent services, easy to change but harder to operate. Factors to weigh: single-tenant or multitenant (multitenancy must guard against noisy neighbors hogging resources, and above all against one customer's data leaking to another); and event-driven design (services talk asynchronously through events, so producers and consumers never wait on each other).
For modernizing old systems the authors recommend the strangler pattern: instead of a big-bang rewrite, the new system takes over the old one's functions piece by piece until the old one can be retired. In effect it splits one huge one-way door into many two-way doors.
The classic data warehouse definition comes from Bill Inmon: a subject-oriented, integrated, nonvolatile and time-variant collection of data in support of management's decisions. The traditional approach is ETL, cleaning before loading. Cloud warehouses (Amazon Redshift led the way, followed by Google BigQuery and Snowflake) separate compute from storage and scale on demand, which made ELT popular: load raw data first, then transform it with the warehouse's own compute. A slimmed-down subset for one department is a data mart.
The data lake rose in the Hadoop era: pour all raw data into cheap storage first and decide its structure when you use it. The problems came quickly. Without catalogs and governance the lake became a data swamp; data was written and never read; updating or deleting individual records was painful, especially when GDPR required erasing one user's data.
The data lakehouse, coined by Databricks, keeps data in open-format files on object storage but adds a table-format layer on top that provides ACID transactions, schema management, updates and deletes, giving the lake the warehouse's reliability. The authors observe that warehouses and lakes are converging: cloud warehouses can now query files in the lake directly, lakes look more and more like warehouses, and the two are merging into a "data platform".
The authors also name the modern data stack: assembling off-the-shelf cloud services as modular, plug-and-play, cost-effective parts. Its value is a lower barrier to entry; its risk is that the number of modules, the bill and the integration work all keep growing.
What if you need batch and streaming at once? The Lambda architecture (proposed by Nathan Marz) runs two systems in parallel: a batch layer periodically recomputes accurate results, a speed layer uses stream processing for low-latency approximate ones, and a serving layer merges both for queries. Its fatal flaw is that the same business logic must be written twice, once in each system, and when the two disagree it's hard to debug.
The Kappa architecture (proposed by Jay Kreps in 2014) responds by using one stream-processing platform only: all data is an event stream, and recomputing means replaying the log from the start. The authors' verdict is that it hasn't been widely adopted in practice, because storing and replaying huge logs for a long time is complicated and expensive.
Google's Dataflow model (open-sourced as Apache Beam) takes a third path: treat all data as events and aggregate over various kinds of windows. Batch is just a bounded stream, so one codebase runs both. Flink and Spark have adopted similar ideas.
Most of the patterns above assume one central team owns all the data. Data mesh, proposed by Zhamak Dehghani, rejects exactly that centralization: as a company grows, the central data team becomes a bottleneck and sits too far from the business to understand what the data means. It rests on four principles:
It's the same idea as the API mandate in section 3: loose coupling along organizational boundaries. The book also mentions labels such as data fabric and data hub, a reminder that such names keep multiplying; when judging them, go back to the nine principles.
Table 1 · Warehouse, lake, lakehouse: what to use when
| Architecture | Fits | Cost |
|---|---|---|
| Cloud data warehouse | Mostly structured business data, analysts working in SQL; fastest to get going | Awkward for semi-structured and unstructured data; data sits in the vendor's format, so switching platforms is close to a one-way door |
| Data lake | Huge volumes of logs, images, ML training material; exploratory analysis | Turns into a swamp without governance; updates and deletes are hard, raising compliance risk |
| Lakehouse | Analytics and ML sharing one copy of data; several engines reading the same table | You operate table formats, metadata and small-file compaction yourself; still evolving fast |
Rule of thumb: if your data is mostly tidy business tables and your team works in SQL, start with a cloud warehouse; if ML and unstructured data dominate, or you want to avoid lock-in to one vendor, consider a lakehouse.
Table 2 · Three ways to run batch and streaming together
| Approach | Idea | Cost |
|---|---|---|
| Lambda | Batch layer for accuracy, speed layer for latency, serving layer merges | Two codebases, two systems to operate; reconciling results is hard |
| Kappa | Streams only; recompute by replaying the log | Long-term storage and replay of huge logs is costly and complex; not widely adopted |
| Dataflow / Beam | Batch is a bounded stream; one codebase, two modes | Steep concepts (windows, late data); depends on how well the execution engine supports them |
Table 3 · Centralized platform vs data mesh
| Organization | Fits | Cost |
|---|---|---|
| Central team | A data team of a few to a few dozen people, not many business domains | Becomes a queueing bottleneck at scale; far from the business |
| Data mesh | Large organizations with many domains able to do their own data work | Every domain needs data engineering skills; definitions and governance are harder to align; heavy platform investment |
This chapter's vocabulary is the common language of data platform architecture reviews. Asked "why a lakehouse rather than a warehouse?", a good answer doesn't recite tool names; it explains how the data splits between structured and unstructured, whether there are ML use cases, which decisions are one-way doors, what the RTO and RPO are, who watches cost, and whether the organization is big enough to need decentralization. On the warehouse side that means Redshift, BigQuery and Snowflake; on the lakehouse side, open table formats such as Delta Lake and Apache Iceberg; for unified batch and streaming, Apache Beam, Flink and Spark.
Open-source evidence
① Data architecture = supporting evolving data needs through flexible, reversible decisions reached by careful trade-offs; it splits into operational (what) and technical (how) architecture.
② Go slow on one-way doors, fast on two-way doors; good architecture makes as many decisions as possible two-way.
③ Nine principles: choose common components wisely, plan for failure (RTO / RPO), scale up and down, architecture is leadership, always be architecting, loose coupling, reversibility, security first (zero-trust), embrace FinOps.
④ Loose coupling runs from Amazon's API mandate to data mesh; modernize old systems with the strangler pattern, breaking a big one-way door into small two-way ones.
⑤ Warehouses tidy before entry, lakes admit first, lakehouses put ACID and governance back on the lake; warehouses and lakes are converging.
⑥ Lambda's two codebases are hard to reconcile, Kappa relies on replay but saw little adoption, Dataflow / Beam treats batch as a bounded stream.
⑦ Data mesh's four principles: domain ownership, data as a product, self-serve platform, federated governance; it's an organizational problem before a technical one.
⑧ A good architecture-review answer reports data shape, one-way doors, recovery targets, cost and organization size, not tool names.