Use concurrency tokens to detect lost updates

Make stale writes fail explicitly instead of silently overwriting newer database state.

August 25, 2026 · 3 min · Lukas Walter

Primary constructor parameters are not automatically properties

A primary constructor parameter stays a parameter. Declare a property or field when the value should be an explicit member of the type.

August 24, 2026 · 2 min · Lukas Walter

Retries Are Not a Recovery Strategy

Why bounded retries help with transient faults but cannot resolve unknown outcomes, partial workflows, or duplicated side effects in AI systems.

August 23, 2026 · 12 min · Lukas Walter

Separate ingestion health from retrieval readiness

A failed ingestion run should not stop retrieval while an accepted index remains queryable and eligible to serve.

August 23, 2026 · 5 min · Lukas Walter

Cap tool-call loops explicitly

Set a hard iteration limit on automatic function invocation and treat hitting it as an explicit application outcome.

August 22, 2026 · 2 min · Lukas Walter

Embeddings in .NET

How to generate text embeddings with Microsoft.Extensions.AI and keep the model, dimensions, comparison metric, and indexing behavior compatible.

August 19, 2026 · 11 min · Lukas Walter

What Happens When Your AI Feature Fails?

A practical way to identify failure modes, choose explicit application behavior, and test an AI feature before its successful path hides the hard decisions.

August 15, 2026 · 12 min · Lukas Walter

Designing an AI Service Layer

How to place model access, prompts, retrieval, tools, and application policy behind a maintainable use-case boundary in a .NET application.

August 12, 2026 · 11 min · Lukas Walter

Use App Configuration for operational switches

Keep runtime switches and adjustable operational settings in Azure App Configuration instead of requiring a deployment for every change.

August 11, 2026 · 2 min · Lukas Walter

Validate tool arguments at the execution boundary

Treat model-generated tool arguments as untrusted input even when they satisfy the generated schema and bind successfully to the expected C# types.

August 11, 2026 · 2 min · Lukas Walter