- Why programming is difficult
- Inventing on Principle
- Name It, and They Will Come
- How To Be Successful
- Do Things that Don't Scale
- Effective Mental Models for Code and Systems
- Small Functions considered Harmful
- Mental Models in API Design
- A Philosophy of Software Design
- Fail fast and noisely, fail politely
- Making Illegal States Unrepresentable
- From Problem to Solution
- Invariants in Code Design
- REST vs. RPC: what problems are you trying to solve with your APIs?
- Swift Concurrency Manifesto
- The Reactive Manifesto
- Swift Combine Patterns and Recipes
- App Architecture: iOS Application Design Patterns in Swift
- The State of Statelessness
- Coordinators Redux
- You Might Not Need Redux
- iOS Architecture: A State Container based approach
- iOS Architecture: Separating logic from effects
- Technical debt 101
- Common Roadblocks when Thinking about Repaying Tech Debt
- Chernobyl: The True Cost Of Technical Debt
- iOS "versus" JavaScript: How to Learn From Other Programming Communities
- React Native at Artsy, 3 years later
- Why use GraphQL, good and bad reasons
- Beyond the First Few Years
- The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change
- Getting Promoted Isn’t the Same as Being a Leader
- The Traits of a Proficient Programmer