Thumbtack Scott Southerland Aug 12, 2025

Thumbtack's Journey to Swift 6

Article Summary

Scott Southerland from Thumbtack just shared what most iOS teams won't tell you: migrating to Swift 6 took 16+ months and broke their entire test suite. Here's the battle-tested playbook they wish they'd had.

Thumbtack's iOS team started adopting Swift concurrency in Fall 2023, moving through three enforcement levels before finally reaching Swift 6 in January 2025. Their journey reveals the hidden complexity behind Swift's promise of compile-time thread safety, including compiler bugs, framework incompatibilities, and runtime crashes that slip past compilation.

Key Takeaways

Critical Insight

Thumbtack spent 16 months navigating three Swift concurrency levels, discovering that compile-time safety promises don't prevent runtime crashes from Objective-C interop.

The article reveals a specific code pattern that compiles perfectly in Swift 6 but crashes instantly at runtime (and how to fix it).

About This Article

Problem

Thumbtack's warnings-as-errors policy meant they couldn't flip the Swift concurrency enforcement flag right away. The compiler had no way to suppress individual warnings, so the team had to fix all existing issues before they could enable targeted concurrency checks.

Solution

Scott Southerland's team built a local command to flip the compiler setting and created a burndown list with a signup sheet. This let engineers work through concurrency warnings at their own pace instead of blocking the whole codebase.

Impact

By December 2024, Thumbtack had enforced complete concurrency in CI. They fixed mutable data passing between contexts and replaced their @unchecked Sendable mocked networking stack with one that was actually thread-safe. The result was no more test timeouts and crashes.