Data posts
Everything in the journal filed under data.
2026
The scheduled job that never runs at midnight
A schedule written in one zone on a machine running another, plus daylight saving twice a year, makes a nightly job run late, twice or not at all.
Your backup is a zero byte file and nobody noticed
Backups fail quietly: a missing tool in the container, a permission, a full disk. Check the size and the row counts, and restore on a schedule.
From a slow query to the right index
Find the query, read the plan, then choose the column order. A practical route from a slow page to an index that actually gets used, and its cost.
Idempotent jobs: doing the work exactly once
Queues and webhooks deliver at least once, so every handler runs twice eventually. How to make the second run harmless with a key and a constraint.
2025
Log rotation, retention and the silent cost of a full disk
A disk creeping towards full is a slow outage: writes get refused, builds fail, backups truncate. How to find what grew and stop it growing back.
A hundred thousand rows pasted into a form: move it to a queue
A synchronous bulk import dies at the proxy timeout, leaves half written state and charges the user twice. Accept, store, return, then work in chunks.
Why one Turkish character can double your message cost
Short messages use a 7 bit alphabet with 160 characters, or a 16 bit one with 70. A single accented letter switches the whole message and the bill.
The delivery report that arrives before the record
An asynchronous callback can reach you before the row it refers to is committed. Keep the orphan, retry the match, and stop losing final states.
The campaign that never sent: time zones in the database
A job scheduled for 09:00 sits in the queue with no error at all. The application wrote local time, the worker reads UTC, and the offset does the rest.