Hi, I'm Koen.
Software engineer & tech lead with 8+ years of experience. I started as an intern, worked my way up to senior, and currently lead the development team at Gomocha. I write about AI-native engineering workflows and ship developer tools on the side.
Tech Lead · Gomocha
Leading the dev team. Drove the .NET Framework 4.8 → .NET 8 modernization, then kicked off FSP Horizon: a ground-up rebuild on .NET Aspire + React, plan-driven and AI-augmented end-to-end.
Senior Developer · Gomocha
Always pushing the platform forward: refreshing UI/UX, tightening the backend, and modernizing the DevOps stack along the way.
Developer · Gomocha
Full-stack on the field-service platform, including DevOps and infra. Promoted from intern to full-time.
Intern · Gomocha
Where it all started.
Ortec optimization integration
Designed and shipped a phased integration with Ortec's optimization engine: messaging + worker scaffolding, periodic syncs, webhook intake with idempotency, batch + single-route + timeslot flows, planboard augmentation, and an admin sync dashboard.
Workspace Designer rebuild
Replaced the legacy react-dnd workspace editor with a feature-flagged rewrite: Layout, Position, Visible/Editable rules, Bulk update, Reset, optimistic-concurrency Save, plus a Playwright suite. Retired the legacy pages, stores, and components at cutover.
Cross-app real-time discussions
Wired Horizon, the legacy main portal, and the customer portal onto a shared RabbitMQ broker via SignalR fanout. Tenant-scoped hub, an embedded MassTransit consumer alongside Wolverine, and an Undo/revert UX for accidental customer-visible sends.
Autonomous nightly fixer loops
Two slash commands run on launchd timers each morning. One triages and fixes failing E2E tests against staging, the other fixes Code Scanning + Dependabot alerts on a daily budget. Both ship one dated PR per run, never dismiss findings, never suppress with comments. A separate monitoring loop watches each PR after it's opened (failing CI, review comments, merge conflicts) and self-heals until it goes green or escalates.
Skipped-test triage pipeline
Built a classifier that buckets every skipped E2E test by reason, plus a daily loop that converts data-missing skips into seeded specs in batches of eight. Added a nightly gate to keep the count from drifting back up.
Multi-pod readiness and zero-downtime deploys
Made the platform horizontally scalable on Kubernetes: SignalR Redis backplane, distributed cache, HPA + PDBs on staging, startup-probe tuning, and a deploy workflow that no longer drops connections. Verified via k6 load tests in CI.
Quote management: workspace and pricing
Shipped the Quote Workspace end to end: wizard, deferred-edit persistence, revision/history lifecycle, the full pricebook hierarchy with CSV export and template management, and synchronous UQTC PDF render on Send.
Re-implemented Planboard on Bryntum Scheduler
Replaced the legacy planboard with a Bryntum-based scheduler: drag-drop on engineer and equipment resources, a batch MoveOrders endpoint, and JSON-based user preferences for panel persistence.
Ship-it pipeline from day one
Wired the delivery loop before the team scaled up. Every PR deploys to staging, runs unit + integration + E2E, enforces a no-coverage-decrease gate, runs AI code review, and auto-deploys to the Kubernetes test cluster on merge. Observability as a first-class citizen: OpenTelemetry to Honeycomb, structured logs to Seq. Shared PowerShell profile so every dev gets the same local setup.
FSP Horizon platform foundation
Set up the technical foundation for re-implementing Gomocha's platform (development started 30 years ago), solo, in a few weeks, before teammates joined for feature-parity work. .NET Aspire orchestrating CQRS Vertical Slice services on .NET 10, Dockerized end to end. Frontend on React + Tailwind v4 + AG Grid + TanStack Query, with bun + oxlint. Architecture, internal technical, and customer-facing documentation, kept up to date with AI.
Coverage-based, AI-unattended unit-test generation
Designed a self-paced test generator with a queue and a durable state cursor that produces tests overnight against a coverage gap list, verifies, and advances on its own.
Ranorex → Playwright UI test migration
Replaced the legacy Ranorex suite with Playwright, plus a CI-resilient playbook: removed nested retries, fixed flaky dropdowns, brought failure diagnostics inline.
Admin tooling on AvaloniaUI + license portal
Converted the legacy admin tools to AvaloniaUI for cross-platform .NET desktop with comprehensive test coverage, and shipped a separate portal for organisation creation, environment management, and license reporting.
BorgDock
A dev tool to stay focused while running parallel Claude Code agents.
AI-native engineering workflows
A weekly series on how my day-to-day has changed.
FSP Horizon · Gomocha
Next-gen field service platform on .NET Aspire + React. Multi-tenant from commit one.
Mechanical keyboards
Daily drivers: Ergodox with Gateron Browns and a Keychron Q1 with Zealios 67g.
Professional Scrum Master II
PSM II
Professional Scrum Master I
PSM I
- Movie nights with my wife Selina (Marvel & Harry Potter rotation).
- Proud dad of our daughter Niya.
- Mechanical keyboard fan: Ergodox with Gateron Browns and a Keychron Q1 with Zealios 67g.