matthewedmondson.com
Matt Edmondson
Producer · Game Developer · Software Engineer · Melbourne, Australia
Notes on game production, engineering, and the places they meet. More about me →
Writing
-
Design Principles Behind the ktsu.dev .NET Library Catalog
ktsu.dev is the open-source .NET project I have been building since 2023. The libraries vary in size and scope, but they share four principles that govern what I will build and what I won't. This is the design philosophy underneath the library catalog.
-
Atomic Configuration Persistence for .NET Desktop Applications
Persisting application config is the kind of work every project does, every project gets slightly wrong, and every project regrets having rolled its own. ktsu.AppDataStorage is the small library I built so I would never write that code again (safe writes, debounced saves, automatic backups, and a one-line API).
-
Type-Safe Strings, Paths, and Physical Quantities in .NET
Primitive obsession is the bug class where everything is a string or a double and the compiler can't help. ktsu.Semantics is the library I built to make domain types impossible to misuse. Email addresses, file paths, temperatures, and user IDs become first-class types with built-in validation and zero runtime cost over their primitives.
-
Build Infrastructure for 79 .NET Repositories with a Custom MSBuild SDK
How a custom MSBuild SDK, topological dependency sorting, automated versioning, and cross-repo synchronization keep 79+ independent .NET libraries building and publishing consistently.
-
A Layered Security Architecture for .NET Data Processing
A layered security architecture for .NET data processing systems: input validation, JWT auth, role-based access, rate limiting, encryption, and security headers with working code.
-
Distributed Tracing and Structured Logging in .NET
A scientific approach to debugging .NET systems: correlation IDs for request tracing, structured logging, Activity-based distributed tracing, and practical patterns for finding bugs faster.
-
Reducing GC Pressure in .NET with ArrayPool and Span
Practical techniques for reducing GC pressure in .NET: object pooling, Span<T>, ArrayPool, LOH management, and continuous memory monitoring.
-
Threading and Synchronization Patterns in Production .NET Libraries
Practical threading patterns from production .NET code, including lock objects as parameters, thread dispatch queues, ReaderWriterLockSlim vs Lock, and how to actually test for thread safety.
-
Eliminating Primitive Obsession in C# with Semantic Types
How wrapping strings and paths in semantic types catches entire categories of bugs at compile time, and a look at the CRTP-based approach used in the ktsu.dev Semantics library.
-
Enforcing Using Directive Grouping with IDE0055 in C#
How C#'s IDE0055 formatting rule behaves with using directives, why some formatting problems never trigger a violation, and how to work around it.
-
Object Initialization Order in C# and How to Design Around It
How C# object initialization order works, why object initializers run after the default constructor, and how to design types around that behavior.
-
Duplicate Project GUIDs and MSBuild Build Server State
Debugging a cryptic .NET restore error that turns out to expose a design flaw in MSBuild's GUID-based project identity system, and why it bites anyone using Git worktrees or forks.
Nothing matches that combination.