From Combine to async/await: a six-week code diff
I moved an iOS app from Combine to async/await. What I gained, what I lost, with real code numbers.
Drawing bounded-context boundaries: 4 concrete ways
Bounded context is DDD's most confusing idea. Four angles that let you actually draw the line.
SwiftData or CoreData? Choosing after iOS 17
Apple started replacing CoreData with SwiftData. I've shipped both on real apps; in some situations CoreData still wins. Practical selection criteria.
Domain-driven design in practice: when it’s overkill, when it saves you
DDD isn't for every project, but for the right project it's the only way out. From years of consulting: when it earns…
How to stop getting rejected by App Store review: lessons from 40+ submissions
Every rejection costs three days. I've made 40+ submissions across 12 apps. Here are the reasons I've been bounced most, and how…
SwiftUI state: when to reach for @State, @Observable, or @Environment
SwiftUI's state APIs feel tangled. Here's a practical decision tree worth the two minutes it'll save you on picking the right one.
How I hold a 0% crash rate across 12 App Store apps
Crash-rate discipline doesn't come from a tool, it comes from a code culture. The concrete techniques I use in production.
How I stopped silently losing 10% of StoreKit 2 subscription revenue
Five subscription-flow edge cases that look fine in code but quietly leak money. The expensive lessons I picked up moving to StoreKit…