Stories
Problems from a production platform I work on: what I tried first, what broke, and what I would do again.
Why I became more careful with DynamoDB Streams
Stream-triggered processing looked clean until duplicates, batch retries and silently swallowed errors showed up. Moving website scraping to SQS made failure handling explicit.
- DynamoDB Streams
- SQS
- Lambda
Scheduled email campaigns, end to end
One durable task and one EventBridge Scheduler schedule per email, a reconciler for drift, and live delivery status in the UI.
- EventBridge Scheduler
- Lambda
- DynamoDB
- React
Why auto-generated CRUD was not enough
Where custom AppSync mutations backed by Lambda took over from generated CRUD: batch commands, guarded deletes and payload limits.
- AppSync
- GraphQL
- Lambda
- Amplify Gen 2
How webhooks completed the async task loop
External services report job status through webhooks. The handler treats them as notifications, fetches results itself and acknowledges duplicates idempotently.
- API Gateway
- Webhooks
- Lambda
- DynamoDB
I forgot try/catch in a Lambda. AWS did not forget.
Unhandled errors are not just code errors, they are infrastructure behavior: how synchronous and asynchronous invocations retry, and what I do about it.
- Lambda
- SQS
- EventBridge