Senior iOS Engineer
16 years on iOS — shipping Swift & SwiftUI at SRF on apps with 1M+ daily users. Flutter contributor to Lichess, the world’s most popular chess platform with 5M+ daily games. Based in Switzerland.
Featured
Opaque Types in Swift: Understanding the `some` Keyword
Posted on:February 15, 2025· 6 min read`some` doesn't just hide a type behind a protocol — it preserves the underlying concrete type identity through the compiler. Here's what that means for performance and why `any` exists alongside it.
Unit Testing AWS Lambda Functions Without a Framework
Posted on:October 8, 2024· 3 min read151 unit tests, no Jest — just Node's built-in runner, tsx, and sinon. The hard part wasn't the test framework, it was understanding module loading order and what the bundler does to your exports.
SwiftUI Under the Hood: Its Architecture and Relationship to UIKit
Posted on:June 5, 2024· 10 min readSwiftUI is not a black box replacement for UIKit. It's a view graph diffing engine that runs on top of UIKit and AppKit. Here's how it actually works.
Understanding Copy-on-Write in Swift
Posted on:January 10, 2024· 5 min readSwift's value types avoid expensive copies until you actually mutate them. Here's how CoW works under the hood.
Concurrency and Parallelism in iOS
Posted on:September 19, 2022· 1 min readiOS offers several ways to run tasks concurrently. This article is a short summary of them.
Recent Posts
16 Years of iOS Concurrency: From Dispatch Queues to async/await
Posted on:May 14, 2026· 10 min readConcurrency hasn't gotten easier. The sharp edges just moved. Here's what survived from the dispatch_async era, what Combine got right, and where async/await and actors actually help — from someone who's shipped iOS apps at scale across all three.
Lighthouse Auditing a Static Blog Until the Scores Hit 100
Posted on:May 12, 2026· 5 min readI ran Lighthouse against my Astro blog and got a performance score of 56. Three iterations later it was 100. The tools weren't the problem — it was the dev server, the font loading, and a 629KB PNG being used as a 48×48 thumbnail.
How Does an LLM Know It's Done?
Posted on:May 6, 2026· 4 min readLLMs don't 'feel' done. They stop because the math tells them to. Here's how.
Why Flutter Can't Easily Do Liquid Glass
Posted on:January 12, 2026· 5 min readApple's Liquid Glass isn't just a blur — it's a physically-based, real-time glass simulation that samples the entire render tree behind it. Flutter paints onto a single texture. Those two facts are incompatible.
LLM Token Context Windows and the Attention Architecture
Posted on:August 20, 2025· 15 min readA deep dive into how LLMs manage context through attention mechanisms, and the engineering tricks that push context windows past their quadratic limits.
SQL-Style Triggers in NoSQL: DynamoDB Streams, CosmosDB Change Feed, and When Not to Bother
Posted on:July 20, 2023· 5 min readNoSQL databases don't have triggers. But their event-driven primitives — streams, change feeds, CDC — let you build the same things with better decoupling. Here's how, and where it hurts.
AWS Lambda, Azure Functions, and When to Reach for Step Functions Instead
Posted on:March 15, 2023· 6 min readLambda and Azure Functions are the easy part. Coordinating them — handling retries, state, error paths, timeouts — is where serverless gets hard. Step Functions solves that, but it's not always the right call.
Best Practices for Unit Testing iOS Apps
Posted on:October 20, 2022· 2 min readTests are automated. Run often. Preferably on each commit or pull request to quickly catch regressions.
Reference Cycles in iOS
Posted on:September 20, 2022· 1 min readStrong reference cycles prevent instances from ever being deallocated, causing a memory leak.
Troubleshooting Graylog Problems
Posted on:July 10, 2022· 2 min readCommon Graylog problems and how to fix them — starting with journal backlog and ElasticSearch flood warnings.