Blog
Thoughts on engineering, design, and building great products.
What's New in AWS: a re:Invent 2025 → Early 2026 Recap
The opening edition of a recurring AWS digest, catching up on six months from re:Invent 2025 to early 2026. The features worth your attention: Lambda Durable Functions, EKS Capabilities (managed Argo CD), DynamoDB multi-Region strong consistency, Bedrock's 18 new open-weight models, S3 Vectors, Security Hub GA, plus the list of services being retired. Every item is grounded in the AWS docs; whatever can be demoed is run for real, then cleaned up.
Multi-Tenant: Each User Their Own Data Slice, and Blocking IDOR
Turn the URL shortener into a true multi-tenant system. Add a list-links route scoped to the identity in the token, and a delete-link route that checks ownership inside the write operation so one user can't delete another's link even if they guess the code right. Tested with two real users to see the boundary hold.
Wiring DynamoDB Into Code: Safe Writes and Atomic Counter
Wire the two handlers into the real DynamoDB: create-link writes an item with a conditional write so it never overwrites a duplicate code, resolve-link does a lookup then counts clicks with an atomic counter. Fire many opens in parallel to see the atomic counter count exactly, and hit a real account limit — Lambda concurrency — when 40 of 50 requests come back 503.
Global Secondary Index and Sparse Index: Opening a New Query Path
The single-table from the previous article answers 'open a link by code' fast, but is helpless at 'list a user's links'. This article adds a global secondary index to invert the key and open exactly that query path, then uses a sparse index so the index holds only links and naturally drops the stat records. Create a real GSI, run a real query to see the mechanics.
DynamoDB Single-Table Design: Start From the Questions, Not the Table
DynamoDB design runs opposite to a relational database: you start from the query questions, not from tables. This article lists the URL shortener's access patterns, explains what partition key and sort key actually do, then builds a single-table with an item collection — a link and its click stats live in the same partition and come back in one query. Create a real table, put and query real items to see the mechanics.