Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
163689 stories
·
33 followers

How I Develop .NET Apps With AI and Still Trust the Code

1 Share
&&

I judge code quality by how confidently I can trust a feature today and how easily someone else can change it tomorrow.

That applies whether I accept a suggested method or hand an agent a whole feature. With an agent, I also delegate decisions about where logic belongs, what to reuse, and how to verify the result. Reviewing the code means reviewing those decisions and the evidence behind them.

Over the past year, I’ve turned lessons from recurring mistakes into rules and skills for Uno Platform work. These are the standards I use. The reference matrix at the end lists the skills you can borrow.

Take a form with a Save button. The user fills it out, clicks Save, and sees a confirmation. I want to know what happens when the connection drops or the user clicks twice. I also want someone to find and change its validation rules confidently a month later.

I start with behavior I can trust

If the form calculates an order total, the agent needs the product’s rules for quantities, discounts, and rounding before it can implement or test them. That’s why uno-write-spec runs before any code. Anything the agent would otherwise assume goes under Unresolved Questions for me to decide.

Reliability belongs in that definition. A failed save should preserve what the user typed and offer a way to recover. A double click should save once. For screens that read or write data, uno-component-states defines loading, empty, and error states. Retry has to work in the running app before the change counts.

I also want help finding failures I’ve missed. uno-break-it gives a separate QA agent scenarios to try in the running app: double-fired navigation, navigating mid-load, a spammed toggle, forced errors, and an older response arriving after a newer one. Each finding gets a severity and a screenshot.

Security is part of the same review. The service should verify that the user is authorized to submit the form, and sensitive data should stay out of logs. The spec’s Architecture Brief records what gets logged, but authorization is something I still review by hand. None of my skills check it yet.

I need to understand the code

When I read the implementation, I want to follow how the form’s values become a saved record. Names should explain their purpose. I should be able to tell where validation ends and storage begins.

Before changing anything, the agent reads HANDOFF.md, the Git state, and the spec. If a save service already exists, it should use it. Before writing a custom control or helper, or adding a package, it checks what Uno Toolkit and Uno Extensions already provide.

The code should follow the project’s conventions too. If screens share an approach to loading and errors, the next screen should use it. The agent loads the relevant skill and names its chosen pattern in one line so I can review that choice.

A hook called xaml-semantic-lint checks after every edit for departures from those conventions, including hand-drawn cards, code-behind handlers, hard-coded colors, and blocking waits on tasks. Its feedback names each problem and its fix:

Hook feedback
xaml-semantic-lint: 2 hit(s) in FooViewModel.cs (PLATFORMLEAK, SYNCWAIT)

- PLATFORMLEAK: platform branch on __ANDROID__ in a model
- SYNCWAIT: blocking wait: Async().Result

PLATFORMLEAK fix: move the branch into a platform service and inject it;
models stay platform-neutral.

SYNCWAIT fix: await the task. If the caller cannot be async
(constructor, property), start the load from a command or MVUX
feed instead of blocking.

Readability still takes judgment. A longer method can be easy to follow; several vaguely named helpers can make the same logic harder to understand. The agent’s explanation helps during review, but the code has to make sense once the chat is gone.

Comments should explain constraints and decisions. I use uno-audit to remove comments that merely narrate the next line and keep the ones that explain why the code works a particular way.

I check what the next change will take

Maintainability becomes concrete when a requirement changes. If the form needs a new validation rule, the next developer or agent should find the existing rules and add it where it belongs.

I probe that before anyone makes the change. In uno-audit, a change-cost probe takes the app’s main feature and three plausible requests. For each, it lists the affected files, identifies the test that would catch a mistake, and gives a verdict: Contained, Scattered, or Unguarded.

Here’s what it revealed in Patina, my public-art conservation app:

Proposed changeFiles it would touchTest coverageVerdict
Escalate a survey at two moderate findings instead of threeThe rule class, the rule restated in the page, both .resw files, and their generation scriptUnit tests cover the code; nothing covers the copyScattered
Move storage to another file-like storeA new storage-interface implementation and one dependency-injection registrationStore tests use an in-memory fakeContained
Show an error and allow retry when a save failsThe store, survey model, page message, and stringsNone yet: the fake has no write-failure switchUnguarded
Table 1The change-cost probe on Patina.

The first row exposed a weakness that passing tests had hidden. The rule was correct and tested, but the page and both resource files restated it without checks on that text. Changing the behavior could leave the explanation wrong.

So the review needs to cover every place that describes the rule. Each copy creates another opportunity for drift, and I want to understand why the duplication exists before adding more.

Structural decisions go in the spec with a reason and a trade-off. The handoff skill updates HANDOFF.md after each substantial session so the next session starts with that context.

Workarounds need an explicit removal condition. My uno-scaffolding rule requires a comment such as:

Workaround comment
// WORKAROUND(<gotcha name>): <what it works around>; remove when Uno.Sdk > 6.7.30

The next person should know why it exists and when it is safe to remove.

I want evidence before calling it done

I want to verify a validation rule without launching the app and clicking through screens. I also want to know which checks passed, failed, or couldn’t run.

The build gates in uno-scaffolding accumulate with the scope of the work:

ScopeRequired evidence
Any changeBuild, tests, and lint pass, with zero warnings on the touched target
Adds or changes a business rule or state transitionA unit test that runs without launching the app and fails when the rule is broken
Touches UI or runtime behaviorThe changed states exercised and confirmed in the running app
Fixes a P1 or P2 bugA regression test that fails before the fix, named in the finding, or an explanation of why one cannot be written
Any “done” or “ready to demo” claimA full completeness audit saved to docs/COMPLETENESS.md
Table 2The build gates in uno-scaffolding.

If a check cannot run because, say, a device is unavailable, the agent must report it and explain why. I need to know where confidence ends.

I also check where the expected results came from. If the agent assumes discounts apply before tax and writes tests around that, code and tests agree while both contradict the product. Tests need to reflect an agreed requirement.

For UI changes, uno-verify launches a Debug build through Uno Platform’s app automation server, invokes controls, and reads the visual tree and DataContext after each action. In uno-completeness-audit, anything graded as proven at runtime must name its evidence: an element, a DataContext value, a trace line, or a test.

A stop hook enforces the reporting requirement. In an Uno Platform repository, if the agent claims the work is done or ready to demo without a completeness report newer than the last source commit, the hook stops it. The agent then runs uno-completeness-audit and saves the report, or narrows its claim to match the evidence it has.

I question the complexity, including my own checks

A small internal tool can stay simple. A larger app with more teams and integrations needs firmer boundaries.

When an agent proposes an abstraction, I want to know what it makes easier today. Giving a business rule a clear home or making an external dependency testable is useful. Imagined future requirements make a weaker case.

My global rules include a Do Not Overbuild section. They also require the agent to pause for my decision before adding a dependency, changing a data model, or changing a public API. The agent lays out the options, and I choose.

The spec records the trade-offs of choices I accept:

Spec decision record
Decision: MVUX for the survey page
Reason:   durable async state with loading, error, and refresh
Tradeoff: {Binding} on the data surface, no compile-time x:Bind checks

My checks get the same scrutiny. A lint rule for x:Bind without a Mode flagged 16 places in one app, and all 16 were correct, so I kept it as a report that does not block. A check needs to earn the interruption it creates.

I measure performance changes

A long list should stay responsive with realistic data. Memory and network use should be reasonable for the work the app performs.

uno-hill-climb gives a performance agent one metric to improve. It changes one thing per attempt, measures the result, and keeps a change only when the metric improves and screenshots of fixed app states still match within tolerance.

Other skills cover stress cases. uno-completeness-audit binds a 200-row list and a 400-character string to check for clipping and overflow. uno-break-it navigates between two pages 20 times while watching memory. Those checks give me something to inspect beyond a screen that looks fine with a few sample records.

The rules and skills I use

Quality questionSkill, rule, or hookRole
Do we know what the feature should do?uno-write-specRequirements and unresolved questions
Have we accounted for loading and failure?uno-component-statesLoading, empty, error, and recovery states
What failures have we missed?uno-break-itSeparate QA agent exercising failure scenarios and a memory loop
Does the code follow project conventions?xaml-semantic-lint (hook shipped with uno-audit)Checks after edits, with suggested fixes
Can someone understand and change it?uno-auditComments, structure, and change-cost probes
What checks must pass?uno-scaffoldingBuild gates and documented workarounds
Does the workflow work in the app?uno-verifyControl interactions and runtime state checks
Is there evidence behind “done”?uno-completeness-auditEvidence grading, long-content checks, and the report required by the stop hook
Did the performance change help?uno-hill-climbOne measured change at a time
Table 3The rules and skills, by the quality question each answers.

When the next validation request arrives, I want a developer or agent to find the rule, make the change, and show how they checked it. That is the practical test behind all of this.

These checks earned their place by catching my mistakes. Yours will come from the mistakes you keep making. If you want a starting point, the rules and skills are here: github.com/noknowscode/mt-uno-workflow.

Borrow the rules and skills

Start from the checks in this post, then replace them with the ones your own mistakes call for. They sit on top of Uno Platform’s skills, which install as the uno-platform-studio plugin in agents that support plugins.

The post How I Develop .NET Apps With AI and Still Trust the Code appeared first on Uno Platform.

Read the whole story
alvinashcraft
38 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Firefox Tries to Bring Back the Internet's 'Good Old Days'

1 Share
Mozilla launched a new ad campaign for Firefox that leverages early internet nostalgia in a bid to win back users who switched browsers. "Today's internet tracks you, interrupts you, and asks for permissions it already took. But it wasn't always that way, and it's not how it's supposed to work," writes Mozilla CEO Anthony Enzor-DeMeo in a post on LinkedIn. "It's how a few companies decided it should work, because it pays." "We're making a different bet at Firefox. Remember us? Well, we're still here, and we don't think the internet should be like this..." The ad features viral internet stars from yesteryear, including Tay Zonday of "Chocolate Rain" fame, Gary Brolsma of "Numa Numa", Noah Ritter, better known as the "Apparently Kid", and Laina Morris, the face of the "Overly Attached Girlfriend" meme, among others.

Read more of this story at Slashdot.

Read the whole story
alvinashcraft
38 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Visual Studio Adds a Way to Resume Unsaved Markdown Investigation Notes

1 Share
The Visual Studio team describes standalone Markdown notes and an opt-in Hot Exit preview that can restore unsaved work after restarting the IDE.
Read the whole story
alvinashcraft
40 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Introducing a Voluntary Exit Offer

1 Share

Amy Coleman, Executive Vice President and Chief People Officer, shared the below communication with Microsoft employees today.

Today, we’re introducing a new Voluntary Exit Offer (VEO) to eligible employees within participating organizations. This offer gives eligible employees who may be considering a future outside the company a new choice to make that transition now with support. It also gives participating organizations another way to adapt their workforce to changing needs.

The Voluntary Exit Offer reflects an important part of how we’re evolving our approach to change: creating greater flexibility and, where possible, more ways for employees to shape their next chapter. This builds on what we learned earlier this year through the Voluntary Retirement Program.

What employees should know

This offer will be available to eligible employees in participating teams in Canada, India, the United Kingdom and the United States at level 70 and below. This is a time-limited, voluntary program that gives those who are eligible the opportunity to leave Microsoft with financial support and career planning resources. Some organizations are providing the Voluntary Exit Offer, and some are not. Participation varies based on each business’s priorities, customer commitments and workforce needs.

Eligible employees will receive an email with a link to their Voluntary Exit Offer details within the next few hours.

Looking ahead 

The Voluntary Exit Offer is new for us. We’ll learn from it. At the same time, we’ll keep helping people focus on the work that matters most, build new skills and, where it makes sense, find new opportunities across Microsoft. There is no one-size-fits-all approach for every team or every employee. These are a few of the ways we’re trying to meet different business needs while continuing to create opportunities for our own people to grow and contribute.

My promise is to continue to provide clarity, listen and learn and keep improving.

Thank you for everything you continue to do for our customers, Microsoft and for one another.

Amy

This Viva Engage post has been edited slightly for external use.

The post Introducing a Voluntary Exit Offer appeared first on The Official Microsoft Blog.

Read the whole story
alvinashcraft
40 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

9 Interesting New Unity Asset Store Releases This Week! (Oct 17–23)

1 Share
From: Stacey Haffner
Duration: 5:04
Views: 60

I went through over 70 new Asset Store listings from October 17–23 and narrowed them down to nine that I thought were interesting. This week's roundup includes combat AI, boss attack systems, creature models, editor utilities, environmental effects and more.

Resources
1. RPG Enemy: https://af.unity.com/ot/ngklAJX/
2. Telegraph: https://af.unity.com/ot/Xve3Oep/
3. Ikonoblaster Hookmaw: https://af.unity.com/ot/XZ0N44n/
4. Ikonoblaster Viceclaw: https://af.unity.com/ot/yO9Vn94/
5. Ikonoblaster Splitgrub: https://af.unity.com/ot/JpwJ1vW/
6. Ikonoblaster Splitmaw: https://af.unity.com/ot/q3jD11o/
7. MegaLOD Free: https://af.unity.com/ot/WJD3ODk/
8. MegaLOD Pro: https://af.unity.com/ot/9ORWEyD/
9. Anchorkit: https://af.unity.com/ot/20aEwaO/
10. Fracture Tool Free: https://af.unity.com/ot/y81DABO/
11. Fracture Tool Pro: https://af.unity.com/ot/Nd3DNxe/
12. Synty Sidekick Modern Thugs: https://af.unity.com/ot/G92O83J/
13. Synty Sidekick Starter Pack: https://af.unity.com/ot/AJYW5PY/
14. Linthouse: https://af.unity.com/ot/Oqabdym/
15. Beautiful Sky: https://af.unity.com/ot/ERl3woV/

Note: These are affiliate links, which means if you purchase through them, I earn a small commission at no extra cost to you. That includes purchases of anything else, not just what I've linked. It helps me fund making new tutorials.

Timestamps
00:00 Intro
00:20 RPG Enemies – Combat AI + Utility AI
00:50 Telegraph – Spell Indicator
01:23 IKONOBLASTER – Four New Creatures
01:50 MegaLOD-Prefaber Lite + Pro
02:15 AnchorKit – UI Toolkit HUD
02:42 Subscribe & Community Poll
02:56 Fracture Tool Free + Pro
03:26 Synty – Modern Thugs
03:52 Linthouse – Asset & Scene Validator
04:18 Beautiful Sky – Weather & Day-Night
04:49 Wrap-Up

Read the whole story
alvinashcraft
44 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Microsoft Foundry: The Platform for Smarter AI Model Selection

1 Share
From: MicrosoftAzure
Duration: 3:39
Views: 981

Building great AI applications takes more than choosing the right model. See how Microsoft Foundry helps teams continuously improve AI quality and efficiency by bringing model selection, evaluation, and cost optimization into one platform.

Explore the Foundry Model Catalog, learn how to evaluate and iterate using your own data, and see how capabilities like PTU spillover, the model router in Foundry Models, and Explicit Prompt Caching help optimize inference costs.

Then discover how Foundry brings models, agents, evaluations, data residency, and governance together so teams can build and scale AI applications with greater control.

Explore the platform: https://msft.it/6059aaihV

#MicrosoftFoundry #MicrosoftAI #AIAgents

Read the whole story
alvinashcraft
44 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories