Debouncing with Swift concurrency
When developing an iOS application, it is a common need to handle the frequency at which information is processed. For example, when making changes to a search field, we might want…
Thibault Wittemberg · Mobile architect
I write about the systems I build, the mistakes I learn from, and the ideas that make software a little easier to live with.
Side Effect / 2026 01 / A little context
After more than two decades in software—and a long love affair with Swift—I work with teams on mobile architecture, functional programming, and the small choices that make a codebase last.
02 / The name
In functional programming, a side effect is the moment code touches the outside world. I chose the name because that is where software becomes real—and where good architecture earns its keep.
03 / From the blog
When developing an iOS application, it is a common need to handle the frequency at which information is processed. For example, when making changes to a search field, we might want…
Swift 5.5 introduced structured concurrency, and with it came AsyncSequence, a new way to provide a flow of values over time. Wait, what? Isn't this what Combine is all about? From…
Error is a base type in Swift that aims to represent an issue happening in the application flow; thus, it is very common to use it as an existential type that will cross the…
State machines are great tools to describe systems with a finite number of states. They are predictable and testable, which is something we praise for as developers. State machines…
04 / Open source & side projects
Libraries, experiments, and collaborations that have shaped how I think about software.
Explore projects ↗