Cloud & Data Architecture

Designing Data Lakes That Survive Contact With Production

Most data lakes start with good intentions and a clean architecture diagram. Most also end up, within eighteen months, as an expensive place where data goes to become unqueryable: a "data swamp" in the industry's own self-deprecating term. The gap between the diagram and that outcome isn't usually the storage layer or the compute engine. It's a handful of governance and design decisions that get deferred because they're less interesting than picking a technology stack.

We've rebuilt more than one lake that failed this way. The pattern is consistent enough that we now treat these decisions as mandatory, not optional, on day one of any data lake engagement, regardless of which cloud or which processing engine sits underneath.

Zone your lake before you load a single file

A lake without zoning becomes a single flat namespace where raw exports, cleaned tables, and business-ready marts all sit side by side, indistinguishable to anyone who wasn't in the room when the file landed. We enforce a minimum three-zone structure from the first ingestion pipeline:

  • Raw / Landing zone. Immutable, exactly as received from the source system, with no transformation. This is your audit trail and your recovery point if a downstream transformation is later found to be wrong.
  • Curated / Conformed zone. Cleaned, deduplicated, schema-enforced data: the layer most engineering work actually happens against.
  • Consumption / Mart zone. Business-ready, purpose-built datasets for specific reporting or analytical use cases, optimised for the query patterns that actually run against them.

The zoning matters less as a technical pattern than as an organisational one: it gives every team a shared vocabulary for "which version of this data am I looking at," which is the question that consumes the most time in a lake without it.

Schema-on-read is a capability, not an excuse

The appeal of schema-on-read (load first, structure later) is real, and it's genuinely useful for exploratory and raw-zone data. The mistake is extending that philosophy into the curated and consumption zones, where "we'll figure out the schema later" becomes "nobody agrees what this column means" within two quarters. Past the raw zone, we enforce schema contracts with validation at ingestion, so a source system change breaks visibly at the pipeline rather than silently at the report six months later.

Metadata and lineage aren't a nice-to-have

A lake with a hundred datasets and no searchable catalogue is functionally a lake nobody can use except the two engineers who built it, and it stays that way exactly until they leave. Cataloguing, tagging ownership, and capturing lineage (which raw sources feed which curated table, which report) needs to be part of the pipeline itself, not a documentation task scheduled for "later."

The most expensive data lake failure isn't a technical one. It's the six months a business team spends not trusting a number because nobody can tell them where it came from.

Cost control is an architecture decision, not a FinOps afterthought

Cloud storage is cheap; cloud compute against that storage, run inefficiently, is not. The design decisions that determine your real cost profile are made early: file format and compaction strategy (small-file problems on distributed storage are a classic source of runaway query cost), partitioning aligned to actual query patterns rather than convenient ingestion boundaries, and lifecycle policies that move cold data to cheaper storage tiers automatically rather than by someone remembering to do it.

A pattern we see often: a lake ingesting streaming data in small, frequent files without a compaction job, which is fine for the first few months and then turns into a query engine reading hundreds of thousands of tiny files for what should be a simple monthly aggregation. The fix is straightforward once diagnosed (scheduled compaction), but it's rarely built in from day one because it doesn't show up as a problem until volume grows.

Governance has to be enforced by the platform, not by policy documents

Access control, PII handling, and data retention policies that live only in a wiki page get followed inconsistently, which is a real problem the moment a regulator or an internal auditor asks how a specific dataset is protected. Column-level and row-level access control, automated PII detection and masking in curated zones, and retention policies enforced by the platform rather than by a scheduled manual review are the difference between governance that holds up under audit and governance that exists on paper.

The short version

A data lake survives contact with production when zoning, schema contracts, metadata, cost architecture, and governance are treated as day-one engineering requirements rather than backlog items to revisit "once we have more data in." Every lake we've been asked to rescue skipped at least two of these five. None of the lakes we've architected from the start have needed rescuing.

ZE
ZIDEA Data Engineering Team
Data lake & big data architecture, Singapore · Pune · Dubai · Kuala Lumpur

Planning or rescuing a data lake build?

Talk to Us