Good architecture is a direction.
Practical software design for iOS engineers. Each ring may know about the ones inside it, never the ones outside.
Latest articles
Where Errors Belong: Use Case Outputs, Not Error Passed Around
Most apps leak Error across boundaries and downcast in ViewModels. Model failures in the use case output vocabulary instead. Swift and Kotlin.
Complex Forms Should Not Make Your ViewModel the Use Case
Architect complex SwiftUI forms with drafts, validators, mappers, form operations, and use cases without making the ViewModel the whole feature.
AI Coding Still Needs Architecture
AI coding tools make architecture more important, not less important. Learn why I give AI agents an ARCHITECTURE.md file before asking them to write code.
Selection Is Not Navigation in Jetpack Compose
Learn how to model list selection in Jetpack Compose without mixing UI state, domain identity, and navigation decisions.
Selection Is Not Navigation in SwiftUI
Learn how to model list selection in SwiftUI without leaking navigation, domain identity, or behavior into the wrong place.
Unidirectional Data Flow in Jetpack Compose
Learn unidirectional data flow in Jetpack Compose with UI state, user intents, use case outputs, and navigation events.
Clean ViewModels in Jetpack Compose
Learn how to keep Jetpack Compose ViewModels focused on UI state, screen events, and presentation mapping.
Explore by topic
Foundations
The principles behind maintainable architecture.
Composition
Adding behavior by wiring focused pieces together.
- The Open-Closed Principle in Swift: Add Behavior Without Breaking Existing Code
- Practical Polymorphism in Swift: Protocols, Decorators, and Composition
- Dependency Injection in Swift Without the Ceremony
- Factories, Builders, and Composition Roots in Swift
- Use Cases in iOS Apps: Helpful Boundary or Extra Layer?
- The Repository Pattern in Swift: Useful Abstraction or Fancy Wrapper?
- The Composition Root in SwiftUI Apps
- The Composition Root in UIKit Apps
SwiftUI
Boundaries, ownership, and dependency wiring.
UIKit
Navigation and composition for UIKit apps.
Scaling
Organizing, testing, and improving as codebases grow.