Topic

Engineering Practice

Testing, reviews, diagnostics and the habits that keep software changeable as teams and tools change.

.NET & C#17 min

Modernize an ASP.NET API Without Rewriting Its Wire Contract

A rewrite can return 200 and still break every client: enums, UTC dates, rounding, JSON types and nulls. Pin the contract with examples, adapt at the wire and rehearse rollback.

Engineering Practice16 min

A SQL Diagnostic Is a Product: Version the Query, Schema and Rule

A stale-statistics check can fail green: absent fields read as zero, filtered statistics and the wrong target. Version the collector, schema and rule, and make Unknown useful.

Azure & Architecture14 min

Executable Deployment Recipes: Prove the Result, Own the Cleanup

A recipe that starts is not a recipe that works. Separate ready from accepted, own every process with a job object, keep cleanup errors, and date the last accepted run.

Performance & Data13 min

Verify the Statistics Your SQL Maintenance Job Actually Changed

A green UPDATE STATISTICS job can refresh the wrong table, sample when you asked for a full scan, or be undone by an automatic update. Check the object you meant, by id, and say unknown when unsure.

Engineering Practice14 min

Refactor a Pricing Function Without Rewriting Its Rules

Pin a small C# pricing function with hand-calculated contract tests, refactor it with behavior frozen, make a one-predicate change and prove the tests catch real mistakes.

AI Engineering15 min

A 403 Is Not Enough: Mutation-Test Agent Tools at the Effect Store

A refused agent tool call can still commit its row. Run an ASP.NET Core endpoint over real HTTP and SQLite, plant five mutants, and see which assertions catch them.

AI, Work & Business14 min

When Code Gets Cheap, the Scarce Part Is the Promise Around It

AI cuts the cost of a first version, not of checking, upkeep and exit. An effort model, the measured speed-ups and three products built on one codebase show where value moves.

Performance & Data14 min

Why This Total Changed: Lineage That Survives Retries and Corrections

Give every derived total an identity from its rule and exact source versions, record each contribution, and correct sources by replacement, so retries count once and changes explain themselves.

Engineering Practice17 min

A Link Is Not a Citation: Pin the Claim, the Bytes and the Date

A real .NET release note kept its November heading while a December SDK appeared under it. Build a small C# resolver that binds each claim to a pinned revision, a hash and a review.

Engineering Practice13 min

Disagree with the Assumption, Then Shrink the Counterexample

A sensible "normalize to UTC" review comment changes a customer's requested day. Use an independent anchor, a real FsCheck run and its shrinking to turn disagreement into a fix.

Engineering Practice12 min

More Agents Will Not Decide What Your Price Means

Four plausible parts turn EUR 19.90 into EUR 0.20 and then a free item. A runnable repair shows why one narrow, complete slice should come before parallel work, human or agent.

Engineering Practice13 min

What Technical Judgment Looks Like When AI Knows the Syntax

Two runnable .NET cases: an invoice total that depends on where it rounds, and a timeout that frees a semaphore permit while the work still runs. Judgment is finding the question the API leaves open.