~/definitionOfDone.dev/blog

blog

Notes from the work 

Delivery, estimation, and legacy rescue — written up as they actually happened.

latest

8 min

The Root Stack Should Be Boring

Every serverless estate hits the same fork at about the same size. You start with one CloudFormation stack, it grows, and somewhere past forty or fifty resources you notice that a…

archive · 11 more

02

Build the Bridgehead Before You Migrate Anything

The most expensive way to change an architecture is to migrate a real service first and find out what doesn't work.

03

Stop Hand-Writing Deployment Configuration

Every infrastructure tool eventually asks you for a flat configuration file. Environment name, then a list of key-value pairs. Do that for three environments and a hundred paramet…

04

The Deploy-Time Bug You Can Catch at Pull-Request Time

There's a bug that only exists in estates with nested infrastructure stacks, and everyone who runs them has met it.

05

A Lambda Layer Is Not a Library

Lambda layers look like libraries. You put shared code in a directory, functions import from it, you change it once and everyone gets the change.

06

The Import Path That Only Exists at Runtime

Lambda layers mount at /opt. Node code inside one lands at /opt/nodejs, so a function importing shared code writes something like:

07

Your Cloud Provider Already Has a Policy Engine

There's a detail in API Gateway's Lambda authorizer contract that most people treat as ceremony.

08

Running Two Authentication Models Without Poisoning Your Handlers

Publishing a new version of an endpoint is a solved problem. Run both, deprecate one, delete it when the traffic hits zero. Consumers move at their own pace and nobody has to coor…

09

Your Integration Layer Holds Until Something Breaks

Most integration layers I've worked on were built carefully on the way in and carelessly on the way out.

10

Module Scope Is Not Request Scope

Here is a twenty-line function with a bug that will never appear in a unit test, never reproduce on your machine, and only manifests in production — in requests that have nothing…

11

A Shared HTTP Wrapper That Decides Nothing

Most integration-heavy systems I've seen have a shared function that all outbound HTTP goes through. In an architecture review you'd point at it as evidence of discipline: one sea…

12

The Deduplication Key That Was Set to Random

I was brought in to review an integration layer — a webhook receiver forwarding inbound events onto a FIFO queue — and stopped on two adjacent lines: