Universal Links: four things Apple’s docs skip over
Universal Link setup looks simple in the docs and gets messy in production. Four real problems I hit across five apps.
Cache invalidation: two hard problems and the patterns that work
Phil Karlton's old joke: "Two hard problems in computer science: cache invalidation and naming things." Here are the patterns for the first.
Push notifications: the retry and dedupe strategy that actually holds up
Some users get the same push twice, others get nothing. The retry and dedupe patterns I've pulled from 12 apps in production.
JWT vs Session: real decision criteria, not tribal debate
The internet is split down the middle on this. A clear framework for the questions that actually matter when you pick.
App Clips: great in theory, niche in practice
Five years after App Clips launched with iOS 14, they're still niche. The real-world scenarios and the rough edges in practice.
Event sourcing: who actually uses it, who’s just posturing?
Event sourcing is a conference darling. In real projects, who is actually using it, and who quietly walks away?
WidgetKit: the real design rules for Home Screen and Lock Screen
Widget design isn't app design. I've shipped widgets in three apps and learned something new each time. Timeline, relevance, and sizing calls.
90% of webhooks are wired wrong: the retry/ack logic that actually works
Webhooks from a payments provider, an email service, a CRM. Test your handler against five minutes of downtime and it almost certainly…
HealthKit integration patterns: practical notes from 3 apps
I've used HealthKit in ByteBreak, Dentii, and Snoozio. Notes on authorization, background delivery, and interpreting the data.
Distributed transactions without the saga pattern
Saga pattern is complex, sometimes overkill. How to get distributed-transaction-like behaviour with simple compensating actions.
Building an offline-first app on CloudKit
How to build an app that keeps working without the internet and auto-syncs when it comes back. What I learnt across two…
Skip idempotency in your REST API and the invoice goes out twice
Payments, orders, message sends: idempotency is non-negotiable. How to wire it up, and the subtleties you cannot skip.