Thinking
Technical articles on AI, development tools, cloud architecture, and software engineering.
How we rescue and refactor: a platform migrated off a low-code tool, one year later
In 2025 a US client handed us a business platform that runs their partner programme: onboarding, product listings, monthly earnings, payouts in several…
How we build web applications: the first three weeks, and the year after
This year we shipped two very different web platforms with the same method.
DynamoDB single-table or Postgres? How we chose, per workload, and where we got it wrong
The DynamoDB versus Postgres debate is usually argued as a religion. One side says relational data belongs in a relational database and single-table design is…
Docker images for Node in 2026: multi-stage, distroless, and the 1.1 GB image that became 140 MB
How a multi-stage, distroless Dockerfile took our Node/Next.js image from 1.1 GB to 140 MB: the full Dockerfile, what broke, and the before/after numbers.
A monorepo with three apps: how we build only what changed, and got the pipeline from eight minutes to three
Three Next.js applications, four shared packages, one repository. That's the shape of the platform we run for a US client, and it's the right shape: shared…
Build-time vs runtime config in Next.js on containers: the bug that took two deploys
We flipped a feature flag. The flag was an environment variable on the App Runner service, NEXT_PUBLIC_NEW_CHECKOUT=true, changed through CDK, deployed…