Marco Wüthrich
Software engineer and founder of AirPace
I build robust Kotlin software, and I founded AirPace, a breathwork app for iOS and Android.
About
I like problems that don't give up easily.
I'm an engineer because I want to understand why something breaks, not just make it go away. I dig until I find the root cause, measure it and fix it where it belongs, upstream if need be.
What I want to reach: software people can rely on, built by small teams that move fast without cutting corners.
Along the way I co-founded two companies. At ACME Software Solutions I was a developer and partner from 2016 to 2021. At Ida, a design and code agency in Zürich, I was co-founder and Head of Engineering from 2022 to 2024.
After Zürcher Kantonalbank, where I was a Senior Software Engineer until June 2026, I now build AirPace end to end, alone. Next comes Muryo, a new project I'm already working on. More about it when it's ready.
AirPace
AirPace
A precision breathwork timer for iOS and Android, built in Kotlin and Compose Multiplatform.
How it is built
- One Kotlin codebase, two native apps
- Millisecond state machine
- Offline-first with SQLDelight
- Sync hosted in Switzerland
- Camera PPG and Bluetooth LE heart-rate variability, computed on the device
- About 4,000 tests, 98.8% core coverage
- Self-hosted CI and 30 architecture decision records
- Agentic engineering workflow
Open source
Pull requests to JetBrains
- JetBrains/
compose-multiplatform-core, pull request 3539 merged 3 Nov 2026CMP-11004: the iOS accessibility display link no longer wakes the main thread on every frame once something reads the accessibility tree (about 62 wakeups per second instead of about 2 on a 60 Hz iPhone). The scroll to an element now runs on the window's frame clock.
-
CMP-11027: on iOS, a memory warning now releases the GPU memory a closed Dialog keeps (34 MB of Metal textures, measured in the simulator) by closing the Skia context of the view that left the window.
-
KT-90955: fixes a false EXPECT_ACTUAL_IR_MISMATCH in Kotlin Multiplatform incremental compilation.
Repositories
-
Root cause and fix for the iOS accessibility CADisplayLink that keeps waking a Compose Multiplatform app every frame. Reproduction, device measurements, fix. The fix landed upstream in compose-multiplatform-core pull request 3539.
-
Kotlin Multiplatform and Quarkus spatial inventory, built with a spec-driven agentic workflow.
-
IDEA Islands, a JetBrains-style dark and light theme for T3 Code.
Experience
- 2026 to now
Founder
AirPace, Zürich
- 2025 to 2026
Senior Software Engineer
Zürcher Kantonalbank, Zürich. Kotlin, Angular, Spring Boot
- 2022 to 2024
Co-founder & Head of Engineering
Ida, Agentur für Design & Code, Zürich
- 2019 to 2021
Software Developer
aspectra AG, Zürich. DevOps focus
- 2016 to 2021
Software Developer & Partner
ACME Software Solutions GmbH, Fehraltorf
- 2018 to 2019
Java Software Developer
Loyalty Gift Card AG, Thalwil
- 2015 to 2018
IT Supporter
Gemeindeverwaltung Wallisellen
- 2010 to 2015
Electrician (Elektroinstallateur)
EKZ Eltop
Skills
- Kotlin
- Kotlin, Kotlin Multiplatform, Compose Multiplatform, Java
- Backend
- Spring Boot, Spring Data, Ktor, Quarkus, Koin
- Frontend
- Angular, TypeScript
- Architecture
- Microservices, Software architecture
- Platform
- Kubernetes, OpenShift, ArgoCD, GitLab CI
- Data
- SQLDelight, PocketBase
- Ways of working
- Agentic engineering with AI agents
Agentic engineering
I build software with AI agents inside a harness I run myself. The agents do the work; the system decides what ships.
One change
passed
- ask
- research
- spec
-
- subagent
- subagent
- delegated agent
- review
- tests
- merge
- Context as code
- Rules, memory and skills are versioned and reviewed like code. A change to an agent's instructions runs against evals first, and a context budget in CI keeps the prompt lean.
- Secrets agents never see
- A credential broker of my own: the vault session key is sealed by the Secure Enclave, Touch ID opens a time-limited window, and a secret goes straight into the process that needs it. Output is masked, every access is logged, a hook blocks the direct ways around it.
- The same gates for everyone
- An agent's change passes the same review and tests as mine. Nothing merges on trust.
- Parallel and isolated
- Research, then a spec, then agents in parallel, each in its own worktree with the model and reasoning effort its step needs.
- Event-driven, not polling
- Agents wake on events (a failed check, a review, a finished subagent) instead of polling, and a turn ledger keeps one from stopping with work still open.
- Infrastructure built for agents
- Self-hosted CI with ephemeral VMs and device lanes for simulators, machines rebuilt from code, and measured audits of tokens, tool calls and build times.
Education and certifications
- 2017 to 2020
BSc Computer Science
- 2014 to 2017
Dipl. Techniker HF Informatik, object-oriented programming
grade 5.2
Certifications
- 2024
Kotlin Developer
Hyperskill
- 2024
Spring Certified Professional
VMware
- 2023
iSAQB CPSA Foundation Level
- 2020
Kotlin for Java Developers
Coursera
- 2020
Angular Certification
Simplilearn
- 2018
ISTQB Certified Tester
- 2016
Oracle Certified Associate, Java SE 8