Clean code, S.O.L.I.D., testability, abstractions, separation of concerns, etc.
These and other important iOS / Swift development good practices
explained simply and with memes
Recent Posts:
- 2026-09-01
- 23 min read
Developer Skills After AI: Survival of the Valuable
Have you ever wondered what your developer skills are actually worth now? Let's price it! Take a simple SwiftUI + SwiftData note-taking app - the kind you've probably written as a recruitment task. Models, @Query bindings, list-detail navigation, a repository layer, a few tests. Call it 2,500 lines. One Claude…
- 2026-07-24
- 23 min read
AI Broke Code Review. Here’s How to Rebuild It
You're deep in a tricky bug when Slack pings: a colleague needs a code review. You sigh and click through. 47 files changed. 2,800 lines added, 400 removed. The size of the commit suggests the code wasn't written entirely by hand. That suspicion is confirmed the moment you start scrolling.…
- 2026-06-02
- 22 min read
How to Refactor an RxSwift Monolith into a Modular Swift App
Imagine a quarter-long refactor: turning a big ball of mud, held together by RxSwift and 1500-line view models, into a modular, fully testable codebase. All while actively developing other features and shipping the app. What triggered that massive refactor? An innocuous estimation request. And a decision that shaped the future…
- 2026-04-11
- 18 min read
Interface Segregation Principle In IOS: How To Prevent A Protocol From Becoming A Prison
It's Monday morning. You're halfway through your coffee when a Slack message pops up from the Platform team: Hey, we noticed UserService.fetchLoyaltyPoints() is throwing an error for 12% of users. Can you take a look? You open UserService.swift, and your heart sinks. Eleven dependencies. Twenty-five methods. Eight hundred forty-seven lines…
- 2026-02-16
- 16 min read
How to Migrate to @Observable Without Breaking Your App
So, you've finally convinced stakeholders to raise the deployment target from iOS 15 to iOS 17 - and the first thing on your mind is @Observable. You've read the docs, watched the WWDC sessions - it looks like a straightforward swap. Replace ObservableObject, drop the @Published wrappers, change @StateObject to…

