Rolling, blue-green or canary? Choosing a deploy strategy
Every deploy strategy trades speed, cost and blast radius differently. Here's how the three common ones compare and when each makes sense.
Archive
Every story, newest first.
Every deploy strategy trades speed, cost and blast radius differently. Here's how the three common ones compare and when each makes sense.
A plain B-tree index on the right column solves most problems. For the rest, Postgres has index types that are smaller, faster and more precise.
Pattern matching has spread from functional languages into the mainstream. The syntax differs, but the idea — destructure and branch on shape — is the same.
One of the oldest web vulnerabilities keeps showing up in new code. The fix has been known for decades — here's how to apply it everywhere, including the places ORMs don't cover.
Code without a license isn't open source, even if it's public. Here's how the major license families differ and how to pick one.
Most slow Docker builds come down to layer ordering. A few structural habits make rebuilds dramatically faster.
The most common ORM performance bug hides in plain sight in your logs. Eager loading fixes it — once you know where to look.
async/await looks like sequential code but runs very differently. Understanding event loops and suspension points explains the performance — and the pitfalls.
If your user table leaks, how you hashed passwords decides whether attackers get a list of emails or a list of working logins.
MAJOR.MINOR.PATCH is a contract between library authors and users. Understanding it helps you upgrade safely and publish responsibly.
A health check that always returns 200 is worse than none. Separate "is the process alive?" from "can it serve traffic?" and your deploys get safer.
The fastest request is the one that never reaches your server. A practical guide to the headers that control browser and CDN caching.