Back to home

Writing

Notes from work that taught me something concrete: integrations, backend systems, and the awkward details that only show up once the product is live.

Jan 19, 2026 | 7 min read

What Shared Channels Actually Change For A Teams Bot

The confusing part about shared channels in Teams is that your bot setup can be correct, reads can work, and regular message events can still fail unless the bot is explicitly mentioned.

microsoft-teamsshared-channelsmicrosoft-graphbot-framework

Apr 28, 2025 | 7 min read

Making CloudWatch Logs Actually Queryable

We had logs in CloudWatch, but not in a form CloudWatch could really use. This is the pattern that split local and production formatting, preserved structure, and made Sentry point back to the right logs.

cloudwatchloggingawsobservability

Nov 17, 2023 | 5 min read

The SQS Long Poll That Never Came Back

A debugging story about a poller that looked healthy for years, then started hanging forever when the network dropped at exactly the wrong moment.

awssqslong-pollingdebugging

Apr 19, 2023 | 11 min read

Making Cron Jobs Boring In Distributed Systems

Once scheduled work runs across multiple app instances and tenant data, the hard part stops being cron syntax and starts being coordination.

crondistributed-systemsbackendreliability

Feb 01, 2023 | 8 min read

Making Sentry Alerts Better For HTTP Exceptions

Default Sentry alerts for outbound HTTP failures were too generic to act on quickly. This is a pattern that works well: group by method, URL, and status, carry over the useful response body, and scrub the sensitive parts before the event leaves the process.

sentryhttpobservabilityerror-handling

Dec 14, 2022 | 9 min read

Business-Context Logging With async_hooks, Not Just Request IDs

We wanted logs to carry business identifiers automatically, not just request IDs. The useful lesson was that async context propagation is also a lifecycle problem, and a naive map-based store can quietly turn observability code into a memory leak.

nodejsasync-hooksloggingobservability

Sep 14, 2022 | 6 min read

Rolling Out Risky Crons In Production

A practical pattern for dangerous cron jobs: do not trust staging alone, start with a tiny allowlist, and widen the blast radius in phases.

cronproductiondata-safetyoperations