<?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>Developer Experience | The .NET Blog</title><link>https://thedotnetblog.com/tags/developer-experience/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>en</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sun, 21 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/tags/developer-experience/index.xml" rel="self" type="application/rss+xml"/><item><title>Reviewing Pull Requests Inside Visual Studio Is Exactly the Kind of Friction Reduction I Like</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/visual-studio-pull-request-review-inside-the-ide/</link><pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/visual-studio-pull-request-review-inside-the-ide/</guid><description>Visual Studio can now review pull requests end to end without leaving the IDE. That may sound incremental, but for teams living in Visual Studio all day, it removes a lot of unnecessary context switching.</description><content:encoded>&lt;p&gt;The browser has been stealing too much of the code review workflow for too long.&lt;/p&gt;
&lt;p&gt;So I am very happy to see Visual Studio pushing further into &lt;strong&gt;end-to-end pull request review inside the IDE&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is one of those features that may not generate huge headlines, but it can absolutely improve everyday development.&lt;/p&gt;
&lt;h2 id="the-main-value-is-simple-less-context-switching"&gt;The main value is simple: less context switching&lt;/h2&gt;
&lt;p&gt;When your review loop lives partly in the IDE and partly in the browser, the friction adds up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;open the PR elsewhere&lt;/li&gt;
&lt;li&gt;inspect changes in one tool&lt;/li&gt;
&lt;li&gt;jump back to the solution for deeper investigation&lt;/li&gt;
&lt;li&gt;switch again to comment or approve&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is not catastrophic. It is just inefficient.&lt;/p&gt;
&lt;p&gt;If Visual Studio can let you open, inspect, comment, approve, and merge from the same working environment, that is a real productivity win.&lt;/p&gt;
&lt;h2 id="the-review-without-checkout-option-is-especially-nice"&gt;The “review without checkout” option is especially nice&lt;/h2&gt;
&lt;p&gt;One part I particularly like is the ability to review without checking out the PR branch.&lt;/p&gt;
&lt;p&gt;That sounds small, but it is perfect for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;quick review passes&lt;/li&gt;
&lt;li&gt;interrupt-driven feedback requests&lt;/li&gt;
&lt;li&gt;keeping your current branch and local state intact&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is exactly the kind of flexibility good code review tooling needs.&lt;/p&gt;
&lt;h2 id="my-take"&gt;My take&lt;/h2&gt;
&lt;p&gt;This is not a revolutionary feature.&lt;/p&gt;
&lt;p&gt;It is something better: a practical one.&lt;/p&gt;
&lt;p&gt;For teams spending most of their day in Visual Studio, tighter PR review support means fewer workflow breaks and a smoother path from inspection to action.&lt;/p&gt;
&lt;p&gt;That is a worthwhile improvement in my book.&lt;/p&gt;
&lt;p&gt;Original post: &lt;a href="https://devblogs.microsoft.com/visualstudio/review-pull-requests-without-leaving-visual-studio/"&gt;Review pull requests without leaving Visual Studio&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Agent Harnesses Matter Because Prompts Are Not Enough</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/agent-harness-claw-why-the-runtime-shell-matters/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/agent-harness-claw-why-the-runtime-shell-matters/</guid><description>The new Microsoft Agent Framework claw and harness walkthrough is a useful reminder that real agents need a runtime shell around the model: tools, planning, memory, sessions, and a practical execution loop.</description><content:encoded>&lt;p&gt;One of the easiest mistakes in agent development is thinking the prompt is the product.&lt;/p&gt;
&lt;p&gt;It is not.&lt;/p&gt;
&lt;p&gt;The new &lt;strong&gt;agent harness and claw&lt;/strong&gt; walkthrough from the Microsoft Agent Framework team is valuable because it keeps the focus on the part that really determines whether an agent feels usable: the runtime shell around the model.&lt;/p&gt;
&lt;p&gt;That includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tools&lt;/li&gt;
&lt;li&gt;planning&lt;/li&gt;
&lt;li&gt;session state&lt;/li&gt;
&lt;li&gt;memory&lt;/li&gt;
&lt;li&gt;execution modes&lt;/li&gt;
&lt;li&gt;a usable console or interface for iteration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is where agents stop being clever demos and start feeling like software.&lt;/p&gt;
&lt;h2 id="the-harness-pattern-is-a-practical-one"&gt;The harness pattern is a practical one&lt;/h2&gt;
&lt;p&gt;What I like here is how approachable the idea is.&lt;/p&gt;
&lt;p&gt;You start with a chat client.&lt;/p&gt;
&lt;p&gt;Then you wrap it into a harness with instructions and tools.&lt;/p&gt;
&lt;p&gt;Then you run it through a shell that supports planning, todos, sessions, and streaming interaction.&lt;/p&gt;
&lt;p&gt;That is a healthy pattern because it separates concerns clearly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the model handles reasoning&lt;/li&gt;
&lt;li&gt;the harness handles runtime behavior&lt;/li&gt;
&lt;li&gt;the app decides which tools and experiences matter&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="this-fits-very-well-with-how-net-developers-build-systems"&gt;This fits very well with how .NET developers build systems&lt;/h2&gt;
&lt;p&gt;The harness idea also maps nicely to the .NET mindset.&lt;/p&gt;
&lt;p&gt;We usually do better when runtime behavior is explicit and composable. Middleware, pipelines, options, providers, and adapters all feel natural in this world.&lt;/p&gt;
&lt;p&gt;That is why I think Agent Framework has a good chance of landing with .NET developers. It is not forcing everyone into one magical abstraction. It is giving you structured runtime pieces you can wire together.&lt;/p&gt;
&lt;h2 id="my-take"&gt;My take&lt;/h2&gt;
&lt;p&gt;The most useful part of this post is the reminder that agents need more than a good model and a clever instruction string.&lt;/p&gt;
&lt;p&gt;They need a runtime shell that gives them structure, memory, tool access, planning, and a workable developer loop.&lt;/p&gt;
&lt;p&gt;That is what the harness gives you.&lt;/p&gt;
&lt;p&gt;And honestly, that is why this pattern is worth paying attention to.&lt;/p&gt;
&lt;p&gt;Original post: &lt;a href="https://devblogs.microsoft.com/agent-framework/meet-your-agent-harness-and-claw/"&gt;Meet your agent harness and claw&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Aspire in VS Code 13.4 Tightens the Developer Loop in All the Right Ways</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/aspire-vscode-13-4-developer-loop/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/aspire-vscode-13-4-developer-loop/</guid><description>Aspire in VS Code 13.4 is not just a feature update. It is a real improvement to the daily development loop with better debugging, resource visibility, panel integration, and TypeScript AppHost support.</description><content:encoded>&lt;p&gt;The best tooling updates are the ones you feel after a few days, not the ones that only look good in release notes.&lt;/p&gt;
&lt;p&gt;That is how &lt;strong&gt;Aspire in VS Code 13.4&lt;/strong&gt; reads to me.&lt;/p&gt;
&lt;p&gt;This update is all about tightening the inner loop: creating projects faster, debugging mixed-language resources more naturally, surfacing health and commands directly in the editor, and keeping the dashboard close without making it the only place you can work.&lt;/p&gt;
&lt;p&gt;That is a very good direction.&lt;/p&gt;
&lt;h2 id="the-big-win-is-less-context-switching"&gt;The big win is less context switching&lt;/h2&gt;
&lt;p&gt;If you use Aspire seriously, you are usually moving across several surfaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AppHost code&lt;/li&gt;
&lt;li&gt;terminal&lt;/li&gt;
&lt;li&gt;dashboard&lt;/li&gt;
&lt;li&gt;logs&lt;/li&gt;
&lt;li&gt;debug sessions&lt;/li&gt;
&lt;li&gt;service endpoints&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What 13.4 does well is reduce the friction between those surfaces.&lt;/p&gt;
&lt;p&gt;The new VS Code experience makes more of the app state visible exactly where you are already working:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;resource health in the editor&lt;/li&gt;
&lt;li&gt;commands next to resource declarations&lt;/li&gt;
&lt;li&gt;easier dashboard access&lt;/li&gt;
&lt;li&gt;log access from the AppHost context&lt;/li&gt;
&lt;li&gt;a panel that remains useful even before full debugging starts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That sounds small until you do it every day.&lt;/p&gt;
&lt;h2 id="debugging-mixed-stacks-matters-more-than-people-think"&gt;Debugging mixed stacks matters more than people think&lt;/h2&gt;
&lt;p&gt;One of the strongest parts of this update is the more natural story for debugging &lt;strong&gt;C#, TypeScript, Python, Go, browser apps, and Azure Functions&lt;/strong&gt; in one Aspire-driven flow.&lt;/p&gt;
&lt;p&gt;That reflects the real shape of modern apps much better than pretending everything lives in a single runtime.&lt;/p&gt;
&lt;p&gt;For .NET developers especially, that is valuable because many of us are now building systems that mix API projects, frontends, workers, and AI-adjacent services in different languages.&lt;/p&gt;
&lt;p&gt;The fact that Aspire is making this feel more unified inside VS Code is a very practical improvement.&lt;/p&gt;
&lt;h2 id="typescript-apphost-support-reaching-ga-is-also-meaningful"&gt;TypeScript AppHost support reaching GA is also meaningful&lt;/h2&gt;
&lt;p&gt;I would not ignore the TypeScript AppHost side of this release.&lt;/p&gt;
&lt;p&gt;Aspire becoming more natural for both C# and TypeScript broadens who can work in the same system model without weird second-class workflows. That matters for teams where platform code, frontend code, and service orchestration all live close together.&lt;/p&gt;
&lt;h2 id="my-take"&gt;My take&lt;/h2&gt;
&lt;p&gt;Aspire 13.4 in VS Code is not about one killer feature. It is about smoothing the rough edges in the daily loop:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;start faster&lt;/li&gt;
&lt;li&gt;see more state where you code&lt;/li&gt;
&lt;li&gt;debug more naturally&lt;/li&gt;
&lt;li&gt;jump to logs and the dashboard only when needed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is exactly how good tooling should evolve.&lt;/p&gt;
&lt;p&gt;If you are already using Aspire, this update looks worth installing. If you are still wondering whether VS Code is a serious home for Aspire-based development, the answer is becoming more and more obvious.&lt;/p&gt;
&lt;p&gt;Original post: &lt;a href="https://devblogs.microsoft.com/aspire/aspire-vscode-extension-13-4/"&gt;Aspire in VS Code: the 13.4 developer loop&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>The New Plan Agent in Visual Studio Fixes a Very Real AI Workflow Problem</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/visual-studio-plan-agent-build-before-code/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/visual-studio-plan-agent-build-before-code/</guid><description>The new Plan agent in Visual Studio matters because it creates a structured planning stage before implementation, which is exactly what bigger features and refactors often need.</description><content:encoded>&lt;p&gt;One of the more frustrating AI coding workflows is when the implementation starts too fast.&lt;/p&gt;
&lt;p&gt;The code may even be technically fine, but it is solving the wrong version of the problem you had in mind.&lt;/p&gt;
&lt;p&gt;You wanted a refactor. It started a rewrite.
You wanted a scoped improvement. It touched half the project.
You wanted to talk through options. It jumped straight into file changes.&lt;/p&gt;
&lt;p&gt;That is why the new &lt;strong&gt;Plan agent&lt;/strong&gt; in Visual Studio is such a useful addition.&lt;/p&gt;
&lt;h2 id="this-fixes-a-real-workflow-problem-not-a-cosmetic-one"&gt;This fixes a real workflow problem, not a cosmetic one&lt;/h2&gt;
&lt;p&gt;The source post describes a very familiar situation: “&lt;strong&gt;The code isn’t wrong… it just isn’t what you were going for.&lt;/strong&gt;”&lt;/p&gt;
&lt;p&gt;That line is perfect.&lt;/p&gt;
&lt;p&gt;Because the weak point in a lot of AI-assisted development is not whether the model can produce code. It is whether the workflow creates enough space to agree on the intended shape of the work before implementation begins.&lt;/p&gt;
&lt;p&gt;That matters most for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;larger features&lt;/li&gt;
&lt;li&gt;unfamiliar codebases&lt;/li&gt;
&lt;li&gt;non-trivial refactors&lt;/li&gt;
&lt;li&gt;architecture-sensitive changes&lt;/li&gt;
&lt;li&gt;work that needs team review before edits start&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In those situations, jumping straight into implementation is often the wrong move.&lt;/p&gt;
&lt;h2 id="planning-is-not-overhead-when-the-task-is-real"&gt;Planning is not overhead when the task is real&lt;/h2&gt;
&lt;p&gt;I think teams sometimes underestimate how much time they lose by starting implementation too early.&lt;/p&gt;
&lt;p&gt;If the agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;touches the wrong files&lt;/li&gt;
&lt;li&gt;chooses the wrong approach&lt;/li&gt;
&lt;li&gt;misses a key constraint&lt;/li&gt;
&lt;li&gt;ignores a required edge case&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;then the “fast” start becomes a slower overall workflow.&lt;/p&gt;
&lt;p&gt;That is why I like this feature.&lt;/p&gt;
&lt;p&gt;It makes room for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;clarifying questions&lt;/li&gt;
&lt;li&gt;plan drafting&lt;/li&gt;
&lt;li&gt;editing the plan directly&lt;/li&gt;
&lt;li&gt;sharing the plan before code changes happen&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not bureaucracy. That is often just good engineering.&lt;/p&gt;
&lt;h2 id="the-markdown-plan-file-is-a-smart-choice"&gt;The markdown plan file is a smart choice&lt;/h2&gt;
&lt;p&gt;One detail I especially like is that every plan is saved to &lt;code&gt;.copilot/plans/plan-{title}.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That makes the planning step tangible.&lt;/p&gt;
&lt;p&gt;It means the plan is not trapped inside a chat transcript. It becomes something you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;review&lt;/li&gt;
&lt;li&gt;edit&lt;/li&gt;
&lt;li&gt;version mentally&lt;/li&gt;
&lt;li&gt;discuss with teammates&lt;/li&gt;
&lt;li&gt;hand off into implementation more deliberately&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes the feature feel much more serious than a temporary preamble before code generation.&lt;/p&gt;
&lt;h2 id="this-is-where-ai-workflows-start-respecting-team-process"&gt;This is where AI workflows start respecting team process&lt;/h2&gt;
&lt;p&gt;I think this is one of the stronger signs that these tools are maturing.&lt;/p&gt;
&lt;p&gt;The best AI developer workflows are not the ones that remove all intermediate steps. They are the ones that improve the right intermediate steps.&lt;/p&gt;
&lt;p&gt;Planning is one of those steps.&lt;/p&gt;
&lt;p&gt;If the plan is strong, implementation gets easier.
If the plan is weak, implementation gets noisy.&lt;/p&gt;
&lt;p&gt;This feature acknowledges that directly.&lt;/p&gt;
&lt;h2 id="my-take"&gt;My take&lt;/h2&gt;
&lt;p&gt;This is not just an AI nicety.&lt;/p&gt;
&lt;p&gt;It is a workflow improvement.&lt;/p&gt;
&lt;p&gt;And for real features and refactors, it is exactly the kind of improvement that can save a lot of unnecessary churn, review noise, and “this is not what I meant” rework.&lt;/p&gt;
&lt;p&gt;I think more agent experiences will eventually need something like this.&lt;/p&gt;
&lt;p&gt;Visual Studio just got there sooner in a way that feels useful.&lt;/p&gt;
&lt;p&gt;Original post: &lt;a href="https://devblogs.microsoft.com/visualstudio/plan-before-you-build-introducing-the-plan-agent-in-visual-studio/"&gt;Plan Before You Build: Introducing the Plan agent in Visual Studio&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Your Dev Loop Is Full of Tribal Knowledge — and Aspire Has the Right Response</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/tribal-knowledge-dev-loop-aspire/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/tribal-knowledge-dev-loop-aspire/</guid><description>A new Aspire post makes a strong point: many teams do not lack tooling, they lack a consistent application model that turns hidden operational knowledge into something humans, scripts, and agents can actually use.</description><content:encoded>&lt;p&gt;This might be one of the most important Aspire posts for understanding &lt;em&gt;why&lt;/em&gt; the product matters.&lt;/p&gt;
&lt;p&gt;Not because it announces a huge new feature.&lt;/p&gt;
&lt;p&gt;Because it names a problem that almost every engineering team has felt and not every team has described well:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the dev loop is full of tribal knowledge.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That phrase lands because it is true.&lt;/p&gt;
&lt;h2 id="the-problem-is-not-lack-of-tools"&gt;The problem is not lack of tools&lt;/h2&gt;
&lt;p&gt;The core argument of the source article is excellent: teams often do not lack infrastructure, scripts, dashboards, or commands.&lt;/p&gt;
&lt;p&gt;What they lack is a coherent model that turns all the hidden operational knowledge around the application into something visible and repeatable.&lt;/p&gt;
&lt;p&gt;The real architecture of many apps lives in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;shell history&lt;/li&gt;
&lt;li&gt;scattered scripts&lt;/li&gt;
&lt;li&gt;README fragments&lt;/li&gt;
&lt;li&gt;Slack threads&lt;/li&gt;
&lt;li&gt;the one senior engineer who knows the order of operations&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not a sustainable dev loop for humans.&lt;/p&gt;
&lt;p&gt;And it is definitely not one for agents.&lt;/p&gt;
&lt;h2 id="the-quote-i-think-captures-the-whole-post"&gt;The quote I think captures the whole post&lt;/h2&gt;
&lt;p&gt;There is one sentence in the source article that I think captures the broader point really well:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“&lt;strong&gt;Applications already exist as systems. Aspire makes those systems explicit, because explicit systems scale better than tribal knowledge.&lt;/strong&gt;”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the entire case in one line.&lt;/p&gt;
&lt;p&gt;And honestly, it is one of the strongest one-line explanations of Aspire I have seen so far.&lt;/p&gt;
&lt;h2 id="why-this-matters-more-now-than-a-year-ago"&gt;Why this matters more now than a year ago&lt;/h2&gt;
&lt;p&gt;I think this post lands especially well in the current moment because AI-assisted development changes the cost of ambiguity.&lt;/p&gt;
&lt;p&gt;Humans can compensate for incomplete systems surprisingly well.&lt;/p&gt;
&lt;p&gt;We remember:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which script to run first&lt;/li&gt;
&lt;li&gt;which environment variable is secretly required&lt;/li&gt;
&lt;li&gt;which terminal usually shows the useful logs&lt;/li&gt;
&lt;li&gt;which service needs to be restarted twice for reasons nobody documented&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agents are much worse at that sort of hidden operational folklore.&lt;/p&gt;
&lt;p&gt;So if we want agents to become meaningfully useful in real repositories, we need the system to become more explicit, not less.&lt;/p&gt;
&lt;p&gt;That is why I think this Aspire framing matters.&lt;/p&gt;
&lt;h2 id="aspires-real-value-is-not-just-orchestration"&gt;Aspire’s real value is not just orchestration&lt;/h2&gt;
&lt;p&gt;One mistake people make with Aspire is thinking of it only as a distributed app launcher or local orchestration helper.&lt;/p&gt;
&lt;p&gt;That is too small a frame.&lt;/p&gt;
&lt;p&gt;The stronger value proposition is that Aspire gives the application:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a model&lt;/li&gt;
&lt;li&gt;a shape&lt;/li&gt;
&lt;li&gt;named resources&lt;/li&gt;
&lt;li&gt;explicit dependencies&lt;/li&gt;
&lt;li&gt;health and operations surfaces&lt;/li&gt;
&lt;li&gt;commands that humans and automation can both understand&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That changes the development loop more than people sometimes realize.&lt;/p&gt;
&lt;p&gt;Because once the app stops being a pile of implicit conventions and starts being a system with a real model, several things get easier at once:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;onboarding&lt;/li&gt;
&lt;li&gt;debugging&lt;/li&gt;
&lt;li&gt;repeatable setup&lt;/li&gt;
&lt;li&gt;CI consistency&lt;/li&gt;
&lt;li&gt;AI-assisted workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a lot of leverage from one design choice.&lt;/p&gt;
&lt;h2 id="i-especially-like-the-commands-as-first-class-operations-angle"&gt;I especially like the “commands as first-class operations” angle&lt;/h2&gt;
&lt;p&gt;Another point from the source post that I think deserves more attention is the move from README instructions to resource-attached commands.&lt;/p&gt;
&lt;p&gt;That is a deceptively big shift.&lt;/p&gt;
&lt;p&gt;Instead of saying:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;run this script, then that one, then maybe this other one if the first thing fails&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;you can model operations directly in the app context.&lt;/p&gt;
&lt;p&gt;That means humans can discover them more easily.&lt;/p&gt;
&lt;p&gt;And it means agents do not have to guess intent from prose.&lt;/p&gt;
&lt;p&gt;That is the sort of thing that turns an application from “operable if you already know it” into “operable by design.”&lt;/p&gt;
&lt;h2 id="what-i-would-take-from-this-as-a-team-lead"&gt;What I would take from this as a team lead&lt;/h2&gt;
&lt;p&gt;If I were looking at my own team’s dev loop through this lens, I would ask a few blunt questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how much of our setup depends on memory?&lt;/li&gt;
&lt;li&gt;how many critical dev actions only exist in docs or chat threads?&lt;/li&gt;
&lt;li&gt;how often do new contributors get blocked on invisible system behavior?&lt;/li&gt;
&lt;li&gt;could an automation tool or coding agent understand our app topology from the repo itself?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the answer to that last question is “not even close,” then this post should hit a nerve in a useful way.&lt;/p&gt;
&lt;h2 id="my-take"&gt;My take&lt;/h2&gt;
&lt;p&gt;This is a very strong framing of Aspire’s real value.&lt;/p&gt;
&lt;p&gt;It is not just orchestration.&lt;/p&gt;
&lt;p&gt;It is about making the app model explicit enough that the system becomes easier to operate, understand, and automate.&lt;/p&gt;
&lt;p&gt;That matters for humans.
It matters for teams.
And it matters even more now that so much of modern development is moving toward agent-assisted workflows.&lt;/p&gt;
&lt;p&gt;This is exactly the kind of article that helps explain why Aspire feels increasingly relevant beyond just the .NET marketing label.&lt;/p&gt;
&lt;p&gt;Original post: &lt;a href="https://devblogs.microsoft.com/aspire/dev-loop-tribal-knowledge/"&gt;Your dev loop is full of tribal knowledge&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Hermetic Aspire End-to-End Tests Are the Kind of Pattern More Teams Should Steal</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/hermetic-aspire-tests-why-this-pattern-matters/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/hermetic-aspire-tests-why-this-pattern-matters/</guid><description>The Azure Chaos Studio testing write-up shows a very practical pattern: hermetic, ephemeral Aspire-based end-to-end environments that improve reliability for both humans and AI-assisted development.</description><content:encoded>&lt;p&gt;Flaky end-to-end tests are expensive in a way that does not always show up on a dashboard.&lt;/p&gt;
&lt;p&gt;They do not just fail. They slowly train the team to stop trusting the feedback loop.&lt;/p&gt;
&lt;p&gt;That is why this &lt;strong&gt;Azure Chaos Studio + Aspire&lt;/strong&gt; write-up hit me immediately. It is not a flashy product announcement. It is a grounded engineering story about how to make end-to-end testing stop feeling like a negotiation with luck.&lt;/p&gt;
&lt;p&gt;And honestly? I think more teams should copy this pattern.&lt;/p&gt;
&lt;h2 id="the-core-idea-is-simple-but-the-payoff-is-huge"&gt;The core idea is simple, but the payoff is huge&lt;/h2&gt;
&lt;p&gt;The key move is giving each test its own &lt;strong&gt;hermetic, ephemeral environment&lt;/strong&gt; with real services, real dependencies, and explicit health-based startup.&lt;/p&gt;
&lt;p&gt;That sounds obvious when you read it in one sentence. It is much harder in real systems, especially when cloud dependencies, shared environments, and distributed services enter the picture.&lt;/p&gt;
&lt;p&gt;The source article puts the problem very clearly: shared test environments bring “&lt;strong&gt;cross-talk, the flake, and the ‘who broke staging’ group chat messages&lt;/strong&gt; as the cost of doing business.”&lt;/p&gt;
&lt;p&gt;That line is funny because it is painfully real.&lt;/p&gt;
&lt;p&gt;Too many teams accept that tradeoff as normal. I do not think they should.&lt;/p&gt;
&lt;h2 id="why-this-pattern-matters-beyond-testing"&gt;Why this pattern matters beyond testing&lt;/h2&gt;
&lt;p&gt;What I like most here is that the article is not just saying, “we made tests more reliable.”&lt;/p&gt;
&lt;p&gt;It is really saying something bigger:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if your distributed system is hard to reproduce, hard to isolate, and hard to verify, your whole engineering loop slows down.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That affects more than CI.&lt;/p&gt;
&lt;p&gt;It affects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how confidently developers refactor&lt;/li&gt;
&lt;li&gt;how quickly regressions are diagnosed&lt;/li&gt;
&lt;li&gt;how safely larger architectural changes can be attempted&lt;/li&gt;
&lt;li&gt;how much trust the team puts in automated validation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And in 2026, it also affects how useful AI-assisted development can become.&lt;/p&gt;
&lt;h2 id="the-most-important-quote-in-the-post"&gt;The most important quote in the post&lt;/h2&gt;
&lt;p&gt;There is one line in the article that I think deserves to be repeated:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“&lt;strong&gt;Agents don’t have to be perfect. They have to be checkable.&lt;/strong&gt;”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is such a good framing.&lt;/p&gt;
&lt;p&gt;People spend a lot of time asking whether AI coding agents are reliable enough to help with non-trivial work. I think the better question is whether &lt;strong&gt;our systems are testable enough to judge that work correctly&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If an agent proposes a meaningful refactor and your only safety signal is a pile of brittle, semi-random end-to-end checks running against a shared environment, then the problem is not just the agent.&lt;/p&gt;
&lt;p&gt;The problem is your validation model.&lt;/p&gt;
&lt;p&gt;This Aspire pattern improves that dramatically.&lt;/p&gt;
&lt;h2 id="what-makes-this-implementation-especially-good"&gt;What makes this implementation especially good&lt;/h2&gt;
&lt;p&gt;Several parts of the source story make this more than a vague “we improved our tests” post.&lt;/p&gt;
&lt;h3 id="1-real-service-graph-not-fake-theater"&gt;1. Real service graph, not fake theater&lt;/h3&gt;
&lt;p&gt;The tests are not built around a pile of disconnected mocks pretending to be end-to-end validation.&lt;/p&gt;
&lt;p&gt;They run the &lt;strong&gt;real binaries&lt;/strong&gt;, wire up emulators where possible, and use the same application model used for local development.&lt;/p&gt;
&lt;p&gt;That matters.&lt;/p&gt;
&lt;p&gt;Because once end-to-end tests become mock-against-mock theater, they stop telling you anything trustworthy about real composition.&lt;/p&gt;
&lt;h3 id="2-readiness-based-startup-instead-of-magical-sleeps"&gt;2. Readiness-based startup instead of magical sleeps&lt;/h3&gt;
&lt;p&gt;This part is bigger than it looks.&lt;/p&gt;
&lt;p&gt;The article explicitly calls out that tests wait for real health with &lt;code&gt;WaitForResourceHealthyAsync&lt;/code&gt;, rather than relying on arbitrary timing guesses.&lt;/p&gt;
&lt;p&gt;That is a huge difference.&lt;/p&gt;
&lt;p&gt;A test suite that says “sleep 30 seconds and hope” is basically documenting uncertainty. A suite that waits for real readiness is documenting system intent.&lt;/p&gt;
&lt;h3 id="3-the-same-model-drives-local-dev-and-tests"&gt;3. The same model drives local dev and tests&lt;/h3&gt;
&lt;p&gt;I really like this because it aligns with the strongest Aspire stories overall.&lt;/p&gt;
&lt;p&gt;The same app model drives:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;local development&lt;/li&gt;
&lt;li&gt;service wiring&lt;/li&gt;
&lt;li&gt;emulated dependencies&lt;/li&gt;
&lt;li&gt;health checks&lt;/li&gt;
&lt;li&gt;hermetic test orchestration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That reduces drift, and drift is one of the hidden killers of trust.&lt;/p&gt;
&lt;h2 id="this-is-the-kind-of-devex-investment-people-underestimate"&gt;This is the kind of devex investment people underestimate&lt;/h2&gt;
&lt;p&gt;One reason I wanted this post to be longer than a quick reaction is that I think these kinds of engineering improvements are often undervalued.&lt;/p&gt;
&lt;p&gt;They are not shiny.&lt;/p&gt;
&lt;p&gt;They do not demo like a new AI feature.&lt;/p&gt;
&lt;p&gt;They do not always produce a single slide that executives get excited about.&lt;/p&gt;
&lt;p&gt;But they create something much more valuable over time: &lt;strong&gt;a team that can move faster without lying to itself about quality&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That is a big deal.&lt;/p&gt;
&lt;p&gt;The article says they now run roughly &lt;strong&gt;90 hermetic tests&lt;/strong&gt;, including scenarios like zone outages, DNS failure, and geo-replication failure. That is not just better test hygiene. That is a much stronger confidence model for a distributed platform.&lt;/p&gt;
&lt;h2 id="what-i-would-take-from-this-if-i-were-running-a-distributed-net-system"&gt;What I would take from this if I were running a distributed .NET system&lt;/h2&gt;
&lt;p&gt;If you are working with distributed services, Aspire, and CI pipelines today, here is what I would pull from this immediately:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;stop normalizing shared-environment flakiness&lt;/li&gt;
&lt;li&gt;move to health-based startup gates wherever possible&lt;/li&gt;
&lt;li&gt;treat the AppHost as real production-grade orchestration code&lt;/li&gt;
&lt;li&gt;build end-to-end checks that validate service composition, not just individual service correctness&lt;/li&gt;
&lt;li&gt;if you are adopting AI-assisted development, invest in &lt;strong&gt;checkability&lt;/strong&gt; before you chase automation breadth&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That last point is the one I think more teams need to hear.&lt;/p&gt;
&lt;h2 id="my-take"&gt;My take&lt;/h2&gt;
&lt;p&gt;This is one of the strongest Aspire posts in this batch because it solves a deeply practical problem.&lt;/p&gt;
&lt;p&gt;It is not trying to impress you with abstraction. It is showing how to make end-to-end tests more deterministic, more useful, and more trustworthy in a real distributed system.&lt;/p&gt;
&lt;p&gt;And once you see the connection to agent-assisted development, the pattern becomes even more compelling.&lt;/p&gt;
&lt;p&gt;If your end-to-end test story still depends on shared environments, hidden setup knowledge, and a little bit of prayer, this is absolutely worth studying.&lt;/p&gt;
&lt;p&gt;Original post: &lt;a href="https://devblogs.microsoft.com/aspire/hermetic-aspire-tests-chaos-studio/"&gt;How Azure Chaos Studio ships with hermetic Aspire end-to-end tests&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>