Home / Blog

Blog

Your blog category

Managing an app localized into 36 languages: automation is non-negotiable

My 12 iOS apps are localized into 36+ languages. Manual management isn't an option. String management, release workflow, and translation services.

Blog 6 min

Read replica strategy: when it earns its keep, when it’s just complexity

A read replica is the classic database scaling tool. On some projects it creates more problems than it solves. When to add…

Blog 6 min

Migrating from WatchKit to a native watchOS app: lessons from two apps

watchOS 9 deprecated the old WatchKit extensions. I ran the migration on two apps and a few surprises showed up along the…

Blog 5 min

REST vs GraphQL: when GraphQL actually wins

GraphQL gets pitched as the default for modern APIs. On most projects REST ends up winning. Here's where GraphQL really pays off.

Blog 6 min

Apple Watch companion apps: five decisions that actually matter

I added a Watch app to Dentii, and syncing with the iPhone app was trickier than I expected. Five decisions that actually…

Blog 5 min

Database connection pool sizing: why the defaults are wrong

Every framework picks a different connection pool default, and most of them are wrong. How I size pools from real production experience.

Blog 5 min

iOS deep linking in 2025: URL schemes, Universal Link, App Clip

Deep linking on iOS has had three generations: URL scheme, Universal Link, App Clip. Which one when, and how to set them…

Blog 5 min

API versioning: URL, header, content negotiation, which one ships?

/api/v1/users versus header-based negotiation. What holds up in production, and what looks clean on paper but bites you in production.

Blog 4 min

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.

Blog 5 min

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.

Blog 5 min

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.

Blog 5 min

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.

Blog 5 min