Thinking
Technical articles on AI, development tools, cloud architecture, and software engineering.
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 i...
Docker images for Node in 2026: multi-stage, distroless, and the 1.1 GB image that became 140 MB
The first Dockerfile in most Node projects is eleven lines long, starts from node:20, copies the repository, runs npm install and npm run build, and ships. I...
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 t...
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 clean...
How We Rescue & Refactor — Fixing Legacy Code Without Starting Over
Got legacy code? Slow app? We diagnose, fix, and modernize existing systems — often faster than building from scratch.
How We Build Web Applications — Fast, Full-Stack, Production-Ready
Our process for building custom web applications with React, Laravel, and Next.js — from architecture and build to production deployment, end-to-end.