Daily DevOps & .NET - Where Code Meets Culture

Opinionated .NET, Azure and DevOps engineering. Hard-won lessons from production, no tutorials.

Migrating 35 Repositories to NuGet Trusted Publishing

Migrating 35 Repositories to NuGet Trusted Publishing

All 35 of our repositories now publish to nuget.org without a long-lived API key. How NuGet Trusted Publishing works with GitHub Actions, a working workflow, why reusable workflows fail and a composite action does not, the pitfalls that cost time, and why the migration is small enough to do this week.
Managed DevOps Pools: Scale Agents Without Burning Money

Managed DevOps Pools: Scale Agents Without Burning Money

Managed DevOps Pools can feel instant or painfully slow, and the difference is mostly configuration. A walkthrough of agent state, standby modes, prediction preferences and image buffers, with Terraform, ARM and CLI examples, a cost-aware recommendation for each team shape and lessons from cascading pipelines and fan-out deployments.
.NET 11 Performance Gains That Matter for AI-Adjacent Backends

.NET 11 Performance Gains That Matter for AI-Adjacent Backends

Cancellation is the steady state for inference gateways, not the edge case, and .NET 11 targets exactly that pain: runtime async collapses per-boundary exception rethrows, JIT deabstraction cuts allocations, and bounds-check elimination speeds up tokenization loops. None of it makes a slow model call faster, but it buys flatter tail latency and fewer instances for the same throughput.
What Actually Changed Inside the .NET 11 JIT Compiler

What Actually Changed Inside the .NET 11 JIT Compiler

.NET 11’s JIT ships real codegen wins: guarded devirtualization, wider escape analysis, a smaller delegate layout, and sharper bounds-check elimination. All of them are conditional on shapes the JIT can prove, not blanket speedups; here is what changed, why, and how to check whether your hot path qualifies.
Closed Hierarchies in C# 15: Exhaustive Switches and Versioning

Closed Hierarchies in C# 15: Exhaustive Switches and Versioning

Closed hierarchies let the compiler prove a switch over a class tree is exhaustive, no discard arm required. Genuinely useful for internal domain models, and something to think through carefully before using it in a public library API, where adding a subtype breaks every consumer’s build.