Calling a Model Is Easy. Running an AI System Is Not

Why a successful model call says little about whether an AI feature is reliable, secure, observable, affordable, and ready to operate in production.

July 26, 2026 · 9 min · Lukas Walter

Choose rate-limiting policies by endpoint cost

Apply different ASP.NET Core rate limits to cheap reads and expensive AI or data-processing endpoints.

July 19, 2026 · 3 min · Lukas Walter

Design queue handlers for duplicate delivery

Assume a queue message can arrive more than once and make the handler’s business effects safe to repeat.

July 19, 2026 · 3 min · Lukas Walter

Validate structured model output before using it

Treat deserialized model output as untrusted data and apply normal business validation before it drives application behavior.

July 18, 2026 · 2 min · Lukas Walter

Use PeriodicTimer for cancellable asynchronous loops

Use PeriodicTimer when a background loop needs an awaitable cadence, cooperative shutdown, and sequential executions.

July 16, 2026 · 2 min · Lukas Walter

Validate required options at startup

Fail during application startup when required configuration is missing or invalid instead of waiting for the first request.

July 15, 2026 · 2 min · Lukas Walter

Use idempotency keys for retryable writes

Make a retried write replay the same operation instead of creating a duplicate side effect.

July 12, 2026 · 3 min · Lukas Walter

Make logs structured before adding dashboards

Capture queryable fields first so dashboards are built on data, not text search.

July 9, 2026 · 3 min · Lukas Walter

Use IHttpClientFactory

Create configured HttpClient instances through the factory instead of scattering clients and handlers.

July 8, 2026 · 2 min · Lukas Walter

Do not hide exceptions inside fire-and-forget tasks

If work can fail, give it ownership, logging, cancellation, and a lifecycle.

July 5, 2026 · 2 min · Lukas Walter