Blog
Notes on iOS development, Swift, SwiftUI, app architecture, and on-device AI.
There Has Never Been a Better Time to Learn a New Programming Language
I'm learning Kotlin for Android after a decade of Swift, and it's the easiest language pickup of my life - not because I got smarter. The cost of learning a new language just collapsed.
Every Compiler Error Is a Bug That Didn't Ship
Sendable, actors, optionals, exhaustive switches - Swift's strictness used to feel like friction. Now that half our code starts life in an AI agent, the compiler quietly became the most valuable tool in the chain.
Migrating to Swift Testing Without a Heroic Weekend
The reason nobody's finished migrating off XCTest was never the syntax - it was that a half-migrated suite used to fail silently. Xcode 27's interop mode is the part that actually unblocks this.
Scaling an iOS Codebase: Features Vertical, Logic Horizontal
Layers or features? Wrong question. Split product code vertically, platform code horizontally, and let the compiler enforce the boundary.
Streaming LLM Responses with Swift Concurrency
Token streams are a natural fit for AsyncSequence, until cancellation, actor isolation, and UI update frequency get involved. Here's the shape that works.