Skip to content

Engineering notes

Writing about cloud systems and code.

Practical notes from building on AWS, designing backend systems, improving developer workflows, and working through algorithms.

Latest writing

AWS AppRunner

Introduction

Containers are one of the most reliable ways to build and ship services, and AWS alone gives you more than a dozen ways to run them. Rather than walk the entire catalog, this note zooms in on one: AWS AppRunner — where it sits next to ECS, why it shines for small auto-scaling services, and a CloudFormation template to spin one up. First, a quick look at the popular ways to run containers on AWS:

Pre-commit hooks with Husky

Introduction

Keeping code consistent and tested gets harder the more people touch a repo, and sooner or later some unlinted code or a failing test slips through. Husky heads that off by running linting, formatting, and tests automatically before a commit lands. This note sets up pre-commit hooks with Husky and lint-staged in a fresh NestJS project.

AWS S3 Storage Tiers and Lifecycle

S3's appeal isn't only durability — it's the range of storage tiers that let you trade retrieval time for cost. This note breaks down each S3 storage class and shows how to use Lifecycle Configuration to automatically transition objects between tiers as they age, so you keep availability where it matters and trim cost where it doesn't.

Serverless Cloudformation Parameters

Introduction

Infrastructure as code is second nature on AWS, and CloudFormation Parameters are what keep templates flexible across environments and stages. This note walks through defining and passing those parameters when deploying with the Serverless Framework — and why I reach for it over AWS SAM.