Apr 19, 2026 | 11 min read
When a scheduled job can be invoked more than once at the same time, the reliable fix is not a distributed lock. It is one UPDATE … RETURNING that claims a row by flipping its status, plus a lease that recovers work if a run stalls.
crondistributed-systemsleaderless-coordinationbackendreliability
Mar 31, 2026 | 7 min read
What helped while building a Teams integration for a real product, without pretending it is just one API and one happy path.
microsoft-teamsbot-frameworkmicrosoft-graphintegrations
Jan 19, 2026 | 7 min read
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
May 05, 2025 | ClearFeed
A practical guide I wrote at ClearFeed on how engineering teams can test Slack apps without stepping on each other.
slackdeveloper-toolsengineering-teams
Apr 28, 2025 | 7 min read
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
Aug 22, 2024 | 6 min read
How a deployment process with too many AWS-specific paths turned into one Slack-first release flow that people could actually use.
deploymentsslackawsautomation
Nov 17, 2023 | 5 min read
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
Nov 14, 2023 | 8 min read
In a Slack Connect channel, installing the same app on both workspaces does not mean you will receive two Events API deliveries. The fix starts with the event envelope, not the business logic.
slackslack-connectevents-apiintegrations
Apr 19, 2023 | 11 min read
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
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
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
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
Mar 18, 2021 | 6 min read
What it took to build a manufacturing quote flow that looked beyond the outer shape of a 3D model and priced the harder details too.
threejsmanufacturing3d-modelspricing