Predicting the Unpredictable
Replacing estimates with data-driven forecasting
Swift Type Erasure
A walkthrough of Swift's type erasure pattern, using Force wielders to show how to put protocols with associated types into a collection.
The Virtue of Simplicity
Why simplicity is a choice that takes hard work: complexity smells to watch for and remedies like value types, functional style, and composition.
Design Principle Kata 3 - Liskov Substitution Principle
A refactoring kata for practicing the Liskov Substitution Principle, with a rubber-duck example of why composition beats inheritance.
Design Principle Kata 2 - Open/closed Principle
A refactoring kata for practicing the Open/closed Principle: making changes by writing new code instead of modifying old code.
Design Principle Kata 1 - Single Responsibility Principle
Introducing a refactoring kata for practicing the Single Responsibility Principle, the first in a series on software design principles.
Playing with FlatMap in Swift
Exploring what Swift's flatMap actually does with nested arrays and optionals, including a few surprises along the way.
Colemak: Ergonomic, Unpopular, Less Weird
How I learned to touch type in Colemak, why I chose it over Dvorak and Qwerty, and how I made it coexist with pair programming.
Extrospective: To Pair or Not To Pair
An introvert's honest look at two years of full-time pair programming, with research-backed conclusions about when pairing helps and when it hurts.
First Post
The obligatory hello-world post: why this blog exists and what I planned to write about.