Use CSnakes when Python is a function call, not a service

Embed a small typed Python capability in .NET when an HTTP service would be more boundary than value.

July 8, 2026 · 2 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

Cache GET responses only when user context is clear

Do not cache a GET response unless the cache key matches the user, tenant, and permission boundary that shaped it.

July 7, 2026 · 3 min · Lukas Walter

Assign least-privilege Azure roles, not broad contributor rights

Give workloads and people the narrow Azure role they need instead of defaulting to Contributor.

July 5, 2026 · 2 min · Lukas Walter

Avoid hidden allocations in hot paths

Watch for small per-item allocations inside loops, parsers, serializers, and request paths.

July 5, 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

Expose a Python FastAPI AI tool as an Aspire service

Keep Python AI code behind an HTTP boundary and let Aspire wire it into the local system.

July 5, 2026 · 1 min · Lukas Walter

Keep model name and deployment name in config

Do not hard-code model routing decisions into application logic.

July 5, 2026 · 2 min · Lukas Walter

Keep vector search filters separate from semantic ranking

Use filters for eligibility and ranking for relevance instead of blending both concerns.

July 5, 2026 · 2 min · Lukas Walter

Measure before you optimize

Use traces, counters, profiles, and focused benchmarks before changing code for performance.

July 5, 2026 · 2 min · Lukas Walter