<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>C# on lukaswalter.dev</title>
    <link>https://www.lukaswalter.dev/tags/c%23/</link>
    <description>Recent content in C# on lukaswalter.dev</description>
    <image>
      <title>lukaswalter.dev</title>
      <url>https://www.lukaswalter.dev/images/LW%20Dev%20Thumbnail.png</url>
      <link>https://www.lukaswalter.dev/images/LW%20Dev%20Thumbnail.png</link>
    </image>
    <generator>Hugo -- 0.150.0</generator>
    <language>en</language>
    <lastBuildDate>Sun, 05 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.lukaswalter.dev/tags/c%23/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>Assign least-privilege Azure roles, not broad contributor rights</title>
      <link>https://www.lukaswalter.dev/tips/assign-least-privilege-azure-roles-not-broad-contributor-rights/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/assign-least-privilege-azure-roles-not-broad-contributor-rights/</guid>
      <description>Give workloads and people the narrow Azure role they need instead of defaulting to Contributor.</description>
    </item><item>
      <title>Avoid hidden allocations in hot paths</title>
      <link>https://www.lukaswalter.dev/tips/avoid-hidden-allocations-in-hot-paths/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/avoid-hidden-allocations-in-hot-paths/</guid>
      <description>Watch for small per-item allocations inside loops, parsers, serializers, and request paths.</description>
    </item><item>
      <title>Do not hide exceptions inside fire-and-forget tasks</title>
      <link>https://www.lukaswalter.dev/tips/do-not-hide-exceptions-inside-fire-and-forget-tasks/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/do-not-hide-exceptions-inside-fire-and-forget-tasks/</guid>
      <description>If work can fail, give it ownership, logging, cancellation, and a lifecycle.</description>
    </item><item>
      <title>Expose a Python FastAPI AI tool as an Aspire service</title>
      <link>https://www.lukaswalter.dev/tips/expose-a-python-fastapi-ai-tool-as-an-aspire-service/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/expose-a-python-fastapi-ai-tool-as-an-aspire-service/</guid>
      <description>Keep Python AI code behind an HTTP boundary and let Aspire wire it into the local system.</description>
    </item><item>
      <title>Keep model name and deployment name in config</title>
      <link>https://www.lukaswalter.dev/tips/keep-model-name-and-deployment-name-in-config/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/keep-model-name-and-deployment-name-in-config/</guid>
      <description>Do not hard-code model routing decisions into application logic.</description>
    </item><item>
      <title>Keep vector search filters separate from semantic ranking</title>
      <link>https://www.lukaswalter.dev/tips/keep-vector-search-filters-separate-from-semantic-ranking/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/keep-vector-search-filters-separate-from-semantic-ranking/</guid>
      <description>Use filters for eligibility and ranking for relevance instead of blending both concerns.</description>
    </item><item>
      <title>Measure before you optimize</title>
      <link>https://www.lukaswalter.dev/tips/measure-before-you-optimize/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/measure-before-you-optimize/</guid>
      <description>Use traces, counters, profiles, and focused benchmarks before changing code for performance.</description>
    </item><item>
      <title>Middleware order is important</title>
      <link>https://www.lukaswalter.dev/tips/middleware-order-is-important/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/middleware-order-is-important/</guid>
      <description>Place ASP.NET Core middleware in the order that matches routing, security, and endpoint behavior.</description>
    </item><item>
      <title>Nullable warnings are design feedback, not noise</title>
      <link>https://www.lukaswalter.dev/tips/nullable-warnings-are-design-feedback-not-noise/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/nullable-warnings-are-design-feedback-not-noise/</guid>
      <description>Treat nullable warnings as pressure to make object state and API contracts clearer.</description>
    </item><item>
      <title>Pass CancellationToken through real boundaries</title>
      <link>https://www.lukaswalter.dev/tips/pass-cancellationtoken-through-real-boundaries/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/pass-cancellationtoken-through-real-boundaries/</guid>
      <description>Thread cancellation through every expensive operation instead of dropping it mid-chain.</description>
    </item><item>
      <title>Prefer health checks that test dependencies deliberately</title>
      <link>https://www.lukaswalter.dev/tips/prefer-health-checks-that-test-dependencies-deliberately/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/prefer-health-checks-that-test-dependencies-deliberately/</guid>
      <description>Health checks should say something useful about readiness without turning every probe into production load.</description>
    </item><item>
      <title>Prefer keyset pagination for deep lists</title>
      <link>https://www.lukaswalter.dev/tips/prefer-keyset-pagination-for-deep-lists/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/prefer-keyset-pagination-for-deep-lists/</guid>
      <description>Use seek-based pagination when users move through large ordered result sets.</description>
    </item><item>
      <title>Separate prompts from authorization</title>
      <link>https://www.lukaswalter.dev/tips/separate-prompts-from-authorization/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/separate-prompts-from-authorization/</guid>
      <description>Do not let prompt instructions decide what data or actions a user is allowed to access.</description>
    </item><item>
      <title>Start independent tasks before awaiting them</title>
      <link>https://www.lukaswalter.dev/tips/start-independent-tasks-before-awaiting/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/start-independent-tasks-before-awaiting/</guid>
      <description>Create unrelated asynchronous operations first, then await them together.</description>
    </item><item>
      <title>Use approval for side effects, not for every tool call</title>
      <link>https://www.lukaswalter.dev/tips/use-approval-for-side-effects-not-for-every-tool-call/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/use-approval-for-side-effects-not-for-every-tool-call/</guid>
      <description>Reserve human approval for actions where a wrong call would actually matter.</description>
    </item><item>
      <title>Use file-based C# apps for small repo utilities</title>
      <link>https://www.lukaswalter.dev/tips/use-file-based-csharp-apps-for-small-repo-utilities/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/use-file-based-csharp-apps-for-small-repo-utilities/</guid>
      <description>Use a single C# file when a repo utility is useful but a full project would be ceremony.</description>
    </item><item>
      <title>Use HybridCache when cache stampedes matter</title>
      <link>https://www.lukaswalter.dev/tips/use-hybridcache-when-cache-stampedes-matter/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/use-hybridcache-when-cache-stampedes-matter/</guid>
      <description>Use HybridCache for expensive shared lookups where many callers can miss at once.</description>
    </item><item>
      <title>Use managed identity before connection strings</title>
      <link>https://www.lukaswalter.dev/tips/use-managed-identity-before-connection-strings/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/use-managed-identity-before-connection-strings/</guid>
      <description>Prefer Azure-managed identities over long-lived secrets in deployed applications.</description>
    </item><item>
      <title>Use OpenTelemetry before you need production debugging</title>
      <link>https://www.lukaswalter.dev/tips/use-opentelemetry-before-you-need-production-debugging/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/use-opentelemetry-before-you-need-production-debugging/</guid>
      <description>Add traces, metrics, and logs while the system is still easy to reason about.</description>
    </item><item>
      <title>Use ProblemDetails as your API error contract</title>
      <link>https://www.lukaswalter.dev/tips/use-problemdetails-as-your-api-error-contract/</link>
      <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.lukaswalter.dev/tips/use-problemdetails-as-your-api-error-contract/</guid>
      <description>Return one predictable error shape instead of inventing a new JSON format for every failure.</description>
    </item>
  </channel>
</rss>
