~/goldbarth $ whoami

Felix Wahl — .NET Backend Engineer mit Fokus auf distributed systems — Reliability, Consistency, und das Zeug, über das niemand redet, bis es kaputt ist.

Notizen aus der Arbeit: Überlegungen hinter technischen Entscheidungen, halbgare Gedanken und was ich gerade baue. Unfertig, hauptsächlich für mein zukünftiges Ich — öffentlich, falls es jemandem hilft.

baue metricgate — auth, caching, microservices in .net · lese project hail mary — andy weir

Projekte

alle Projekte →

Ingestor

Live

Eine .NET 10 Import-Pipeline, gebaut um Reliability: Outbox Pattern, strikte Domain State Machine, idempotente Verarbeitung und eine config-switchable Dispatch-Strategie — jede Design-Entscheidung auf Korrektheit und Nachvollziehbarkeit ausgerichtet.

.NET 10OpenTelemetryPostgresEF Core 10DockerASP.NET Core Minimal API

ServiceDeskLite

Archived

Eine .NET 10 Backend-Referenz, gebaut um striktes Layering: compiler-enforced Boundaries, zwei austauschbare Persistence-Adapter und result-basiertes Error Handling — jede architektonische Entscheidung dokumentiert und begründet.

.NET 10PostgresEF Core 10DockerASP.NET Core Minimal API

Artikel

alle Artikel →

Was ich baue

Die Entscheidung, nachdem es ein paar Tage gesackt ist.

Damit arbeiten

Angst ist ein schlechter Kompass. Wie ich als Entwickler mit KI umgehe, ohne auf das Rauschen zu reagieren.

Architecture, vom Compiler durchgesetzt

Warum ServiceDeskLite Clean Architecture Dependency-Regeln durch Project-References statt Naming Conventions durchsetzt — und was das kostet.

Minimal API ohne MediatR

Warum ServiceDeskLite Handler direkt in Endpoints injiziert statt über einen Mediator zu dispatchen — und wann diese Entscheidung überdacht werden sollte.

Result Pattern an der Application Boundary

Wie ServiceDeskLite einen expliziten Result-Typ verwendet, um Handler-Ergebnisse sichtbar zu machen — und wo DomainExceptions noch hingehören.

RFC 9457 als einheitlicher Error-Contract

Warum ServiceDeskLite ProblemDetails mit benutzerdefinierten Extension-Feldern als einziges Error-Format verwendet — und wie der Contract geteilt wird, ohne das Web an die API zu koppeln.