Surge Evaluator: sechs Entscheidungen, eine Richtung
Aus einem Fenster von Pegelmesswerten wird eine Stufe — normal, warning, severe. Sechs Entscheidungen, die alle in dieselbe Richtung ziehen: Zuverlässigkeit.
Alle Notizen, Decisions und halbgaren Gedanken — nach Datum sortiert. Unfertig, meistens für mein zukünftiges Ich.
Aus einem Fenster von Pegelmesswerten wird eine Stufe — normal, warning, severe. Sechs Entscheidungen, die alle in dieselbe Richtung ziehen: Zuverlässigkeit.
Der V2-Scope steht. Ein Admin-Frontend plus Demo-Widget für den Hot Path — Angular statt React, BFF statt Token im Browser, und ein vertikaler Slice statt Feature-Liste.
Was beim Bauen eines Quota- und Rate-Limiting-Backends hängen geblieben ist — und was nicht.
MetricGate wurde solo, nebenbei und mit Claude Code als primärer Implementierungshilfe gebaut. Warum ich Kalenderschätzungen aus den Planungsdocs gestrichen habe, wie ich den Aufwand über Commit-Zeitstempel messe — und was die Geschwindigkeit kostet.
Warum MetricGate Token-Bucket-Updates als Lua-Script ausführt statt als naiven GET-SET-Zyklus — was ohne Lua schiefgeht, wie atomare Ausführung das löst und was Lua kostet.
Warum MetricGate Row-Level Locks statt Applikations-Locks verwendet, um konkurrierende Reparent-Operationen im Mandantenbaum zu serialisieren.
Wie MetricGate PostgreSQL, Redpanda und EF-Migrationen in einem Testlauf koordiniert — und welche Domain-Regeln Unit Tests schlicht nicht abfangen können.
Die Entscheidung, nachdem es ein paar Tage gesackt ist.
Angst ist ein schlechter Kompass. Wie ich als Entwickler mit KI umgehe, ohne auf das Rauschen zu reagieren.
Warum ServiceDeskLite Clean Architecture Dependency-Regeln durch Project-References statt Naming Conventions durchsetzt — und was das kostet.
Warum ServiceDeskLite Handler direkt in Endpoints injiziert statt über einen Mediator zu dispatchen — und wann diese Entscheidung überdacht werden sollte.
Wie ServiceDeskLite einen expliziten Result-Typ verwendet, um Handler-Ergebnisse sichtbar zu machen — und wo DomainExceptions noch hingehören.
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.
Warum ServiceDeskLite Guid in einem TicketId Record Struct kapselt — was der Compiler abfängt, was der Mapping-Overhead kostet und wie UUIDv7 es verbessert.
Warum ServiceDeskLite zwei vollständige Persistence-Implementierungen mitbringt — und warum der eingebaute InMemory Provider von EF Core keine davon ist.
Gedanken darüber, was als nächstes gebaut wird — und warum es kein weiteres Clean Architecture Projekt ist.
Warum Ingestor große Import-Dateien in 500-Zeilen-Chunks verarbeitet statt auf einmal — begrenzter Blast Radius, Partial-Success-Semantik und die Trade-offs, die damit kamen.
Deterministische Idempotency Keys für eine Import-Pipeline entwerfen — warum SHA256 über File-Content, was der Unique Index durchsetzt und wie HTTP-Clients davon profitieren.
Warum Ingestor mit einem database-backed Outbox statt RabbitMQ startet — und was das umschaltbare Dispatcher-Pattern später ermöglicht.
Warum Ingestor einen Result<T>-Typ statt Exceptions an Application-Boundaries verwendet — was er explizit macht, was er kostet und wo Exceptions noch hingehören.
Wie eine explizite Domain State Machine mit neun States und einer aufgezählten Transition-Tabelle stille State-Korruption in einer lang laufenden Pipeline verhindert.