Senior AI & Software Engineer · Zürich

AI systems that
survive production.

Multi-agent orchestration, integrations and the plumbing underneath. Built to run unattended.

Building software
+5
Systems in production
20
Working languages
DE EN ES

Selected systems

Four things I have built, and what made each one hard.

No client names. The sector says enough, and the constraint is usually the interesting part anyway.

  1. 01

    Defence and optronics

    Retrieval over documents that cannot leave the building.

    Thousands of pages of classified material, and every answer has to point at the page it came from. The model was never the hard part. The hard part was proving what the index holds, who is allowed to ask what, and what the audit trail shows afterwards.

    Retrieval augmented generation, air-gapped, with citations.

  2. 02

    Pharma and lab robotics

    An autonomous testing platform for instrument software.

    A test suite written years ago, in a tool that is being retired, covering machines that handle patient samples. I am moving it to Python and Playwright one test at a time. A migration like this only counts when the old suite and the new one disagree about nothing.

    Python, Playwright, containerised runners, VM snapshots per run.

  3. 03

    Health and wellness

    A CRM with the access rules inside the database.

    One record per person, with contacts, appointments, treatments and follow-ups. Reception sees the administrative side and nothing clinical, and that is enforced by row level security in Postgres rather than by the interface. There is a test for every role that proves it, because an interface can be wrong and a policy cannot.

    Next.js, Postgres with RLS, field-level encryption, audited reads.

  4. 04

    My own systems

    The workspace the rest of my work runs on.

    A control plane for projects, services and agents, and the agents themselves. One reads the morning signals and writes a briefing. Another moves my hours from one employer system into another and asks me on Telegram when a day looks wrong. Each run records what it cost, which is the only honest way to decide whether an agent is worth keeping.

    Next.js, Postgres, systemd timers, agents that report their own cost.

How I work

Four habits, and all four came from getting burned.

  1. 01

    Measure before and after, and let it fail the build.

    A performance target nobody checks is a wish. On this site a single command rebuilds it, runs Lighthouse on phone and desktop, and exits with an error if the mobile score drops below ninety or if anything shifts on the page while it loads.

  2. 02

    Put the access rules in the database.

    If the only thing standing between a receptionist and a medical record is a hidden tab, it is a matter of time. Rules that live in Postgres are still true when the interface is wrong, when someone calls the API directly, and when a new page forgets to check.

  3. 03

    Make failures loud.

    A memory service of mine was down for a month and nothing said a word, because everything degraded politely. Silence is the worst possible default. Now the things I run either work or complain, and I would rather be woken up than quietly wrong.

  4. 04

    Add the dependency last.

    The hero on this page is Three.js and nothing else. No React, no animation library, because the scroll is one division and the entry is a timer. That decision is worth about seventy kilobytes, and seventy kilobytes is the difference between a site that feels instant and one that does not.

The lab

I do not learn this on somebody else’s production.

There is a small server rack in my flat in Au, and it runs about twenty services: single sign-on in front of all of them, a reverse proxy issuing its own certificates, monitoring that reaches me on Telegram, and backups in six layers because the day I need them I will not want to find out that one was enough.

It exists because the fastest way to understand how something breaks is to be the one who has to fix it at eleven at night. Most of what I know about running systems unattended, I learned there first and applied at work second.

Services
Around 20, each in its own container
Access
Single sign-on in front, nothing exposed by accident
When it breaks
It says so, on Telegram, before I notice
Backups
Six layers, tested by restoring them

Contact

If any of this sounds like a problem you have, write to me.

Tell me what is not working. I answer within one working day, and if it is not something I can help with I will say so in the first reply.

Based in Au on Lake Zurich. Working in German, English and Spanish.