Clock with multiple time zones representing UTC and local times in ETL

UTC, Time Zones, and ETL: A Real Story About a Silent DST Bug (and a Lucky Escape)

The guiding principle (the motto) Keep UTC for as long as possible. Change to a local timezone only when it is truly required. This principle was not theoretical. It emerged from a real incident — one that almost became a production bug, and only didn’t because of a fortunate configuration coincidence. Why time zones are dangerous in ETL Time-related issues are among the hardest problems in data engineering because: ...

January 18, 2026 · 6 min · Frederico Gago
Deterministic UUID v5 generation with namespaces and separators to avoid collisions

UUID v5 as a Primary Key in PostgreSQL: when business keys stop being unique (and how to avoid collisions)

Summary I was generating deterministic UUID v5 primary keys from business keys. It worked well—until subtle but serious collision risks appeared: Ambiguous concatenation (ab + cd vs a + bcd) Cross-table collisions (different tables, same business values → same UUID) This post presents a clean, modular solution using explicit separators and namespace scoping, and explores the harder problem of multi-source ingestion. ⚙️ Context & Problem In data platforms and ETL systems, business keys are often the only stable identifiers available (for example, composite natural keys). To ensure idempotency and simplify upserts and deduplication, a common pattern is: ...

January 18, 2026 · 6 min · Frederico Gago
PostgreSQL index tree and storage pages visualization

Indexes and Fillfactor in PostgreSQL: Power, Trade-offs, and the Cost of Speed

Resumo: Indexes are one of the first performance tools every PostgreSQL user learns — and one of the easiest ways to accidentally slow a system down. This article explains how indexes actually work, why they are never free, how different index types behave in real workloads, and how fillfactor quietly determines whether your database ages gracefully or slowly collapses under write pressure. Indexes Feel Like Magic (At First) You run a query on a table with millions of rows. ...

January 18, 2026 · 5 min · Frederico Gago
SQL and ORM balance for backend developers

Why Every Backend Developer Should Master SQL — Even in the Age of ORMs

Summary: ORMs make development faster, but mastering SQL and database internals turns good backend engineers into great ones. Here’s why understanding both levels — abstraction and reality — matters. ⚙️ Context & Problem Modern web frameworks — Django, FastAPI, Spring Boot, Laravel — all encourage the use of Object-Relational Mappers (ORMs). They make it easy to map objects to tables, run queries in a few lines of code, and forget about SQL altogether. ...

October 26, 2025 · 5 min · Frederico Gago