Engineering Leadership
Michael Kroes
Twenty-odd years in software, most of it spent building teams rather than features. I share the leadership of a value stream at Thales with one other manager, delivering infrastructure software for naval vessels. Before that I spent a decade self-employed and fully remote, working with distributed teams.
Currently — Software Engineering Manager, Thales
Running agents against my own infrastructure
Most of what I know about agentic AI I learned by pointing it at my own infrastructure, where the blast radius is mine to deal with. It runs as one git-tracked repository covering a Proxmox host, thirty-odd Docker Compose stacks, Home Assistant and UniFi networking, with a single deploy path and a commit before and after every change, so anything is one command from being reverted. Claude Code works in that repo under rules I'd want in production anyway: irreversible or shared-state actions like firewall rules and DNS need an explicit human confirmation, and read-only investigation runs through permission-scoped subagents that structurally cannot write.
On top of that sit around forty monitoring checks rolled up into a single health signal. When that signal flips from healthy to broken, an autonomous session starts on its own and attempts the repair. The interesting engineering there isn't getting an agent to fix something. It's deciding when it is allowed to try. So the launch sits behind explicit quality gates: a written authorization scoped to container-level recovery only, a problem-class filter that refuses to act on anything touching firewalls, DNS, disks or data, a concurrency check, a rate limit of three attempts per twenty-four hours, and a global kill switch. Out of scope, it is required to investigate and report rather than improvise, and it leaves its session open and remote-controllable so I can take over from my phone.
Two rules keep that honest. Alerting is deliberately independent of the fixer, so a disabled or crashed agent can never quietly suppress a page: the worst case is being told about a problem nobody tried to fix, never a problem going unreported. And no severity tier is allowed to become a silencing mechanism. Downgrading something from blocking to minor changes what the overall status means, not whether it still notifies.
The same approach carries into side projects: a daily-refresh content pipeline for a local events aggregator runs as a scraper → verifier → QA-reviewer agent chain rather than a single unsupervised job, and a shipped bilingual mobile app uses a cost-tuned visual-QA subagent for UI regression checks. I've also introduced Claude Code tooling into an existing open-source medical-device codebase (Trio, an automated insulin-delivery system) without disrupting its established contributor workflow.
The thing I keep relearning: an agent is useful in proportion to how well you've bounded what it can break. That turns out to be a management problem more than a technical one, which is probably why I find it interesting.
Shipped on the side
-
Home Assistant integration
50+ Mobiel
A Dutch mobile carrier whose customer portal is a JavaScript application with no documented API and nothing to scrape. Reverse-engineered its authentication and JSON endpoints into a published integration that reports bundle usage, refresh dates and contract end dates for every SIM in a household: multi-account config flow, English and Dutch translations, distributed through HACS. When the carrier silently replaced its login flow, the break was traced and shipped as a fix the same way I'd expect of a supported product.
-
Home Assistant integration
Scaleway
Cloud spend, instances, Kubernetes clusters and object storage surfaced as sensors, plus a backup platform that registers a Scaleway bucket as a Home Assistant backup location, with multipart uploads, streamed restores so a multi-gigabyte backup never has to fit in memory, and checksum verification on every upload. Hand-rolled REST and S3 SigV4 client with no added dependencies, hardened through a deliberate red-team review pass before release.
-
Browser game
Star Struck
A logic puzzle in the Star Battle / Queens family, built end-to-end with Claude Code: puzzle generator, solver-based difficulty rating and hint engine, in a single dependency-free HTML file. Play it here.
Beyond the day job
Since 2021 I've contributed to the Type 1 Diabetes Care community, improving Nightscout, AndroidAPS and Loop, the open-source tools behind DIY closed-loop insulin delivery. I also help new parents make sense of the technology after a diagnosis.
I've also been an open-source contributor and former co-maintainer of Mail-in-a-Box since 2015, reviewing pull requests and building features in Python and Bash.
The day job
- I share leadership of the value stream with a fellow line manager. Between us we cover multiple engineering teams, cross-segment architecture functions, and a nearshore partnership I look after personally.
- The part I care most about is that people end up somewhere they're good. I run hiring, performance and development for my own reports, and I'd rather move someone to a role that fits than lose them.
- I own how the teams build software: the process, the quality bar, and the argument when those two collide with a deadline.
- Some of my work sits outside my own line: a cost-improvement programme for the wider business, and an ongoing argument that we escalate people when what we actually need is knowledge.
The detail lives on my CV. Ask me for it.
Technical background
Fifteen years leading teams hasn't come at the expense of staying hands-on. A career spent mostly in the .NET ecosystem, with working fluency across a few others as projects have called for it.
- Languages
- C#, Java, Kotlin, Python, TypeScript, Swift, Dart
- Platforms
- .NET, ASP.NET Core, Node.js, Flask, Vue.js, Flutter
- Data
- PostgreSQL, MS SQL Server, MongoDB, SQLite
- Tooling
- Azure DevOps, TeamCity, Git, Docker, CI/CD
- Infrastructure
- Proxmox, Docker Compose, Traefik, ZFS, SSO, monitoring & alerting
- AI & agents
- Agentic coding workflows, LLM-assisted code generation, applied AI tooling