The agent brand is irrelevant; the work item is everything.
I have watched teams argue about Copilot Studio versus Claude Code versus Codex as if the model decides whether their build succeeds. It does not. Your agentic development power platform effort lives or dies on one thing: whether the Azure DevOps work item you hand the agent is a machine-readable spec or a vaguely worded wish. Swap the agent all you want. If the requirement is unstructured, every agent guesses, and every guess is a different guess.
This article is opinionated on exactly one point and neutral on everything else. Neutral on the tool. Ruthless about the spec.
Why "AI-assisted" Power Platform dev stalls on real teams
The agent guesses intent because the acceptance criteria live in a stale wiki, a Teams thread, or someone's head. That is the whole failure. Switching from one agent to another does not close the gap. The missing spec does.
Prompt-by-prompt building has a second problem that shows up later and hurts more. One maker gets a working flow out of a chat session, but nobody else can reproduce it and no one can audit it. You have a solution that exists and a rationale that evaporated. For teams doing serious dynamics 365 ai development, that is not acceleration. That is a single point of failure wearing a productivity costume.
Frame the cost honestly. Say a rework cycle caught in UAT runs roughly 5x the cost of the same fix at design time. Illustrative; calibrate against your own data, actuals vary. Under that assumption, the line item bleeding your budget is the improvised requirement, not the agent license. You are paying to rediscover intent three environments too late.
Takeaway: if your requirement is not structured, your agent is improvising, and the brand of agent does not matter.
Make the ADO work item the single source of truth
An agent reads fields. It does not read the room. So the work item has to carry everything the agent needs in a shape a parser can trust every single time.
Define the structure once and apply it to every Feature and User Story:
Acceptance criteria as Given/When/Then (Gherkin), one scenario per behavior.
Entity and table definitions as fenced YAML: logical name, columns, types, relationships.
Business rules stated as conditions and outcomes, not prose.
Security roles the artifact assumes, named explicitly.
Use a consistent work item template so the same machine-readable blocks appear in the same headings every time. The whole point of azure devops power platform ai work is that the agent finds the schema block under the same H3 in every item, not that it hunts for intent in freeform text.
Here is the practitioner caveat. The Azure DevOps for a direct fetch, or a , , or a homegrown agent equally. The spec is the input contract. The consumer is swappable.
Feed the structured spec in and generate the components that map 1:1 to the fields: Dataverse tables from the YAML schema, model-driven components, Power Automate flows from the trigger/action pairs, plugin code where the business rules demand it. One block in, one reviewable artifact out.
This is spec driven development ai in practice. The spec is portable. The agent is a detail.
Caveat, and it applies to every vendor equally: agents drift on multi-entity relationships. Generate the schema first, validate it, commit it, then generate logic against the committed schema. Do not ask one prompt to invent five related tables and the plugins that traverse them in a single shot. It will hallucinate a lookup that does not exist. For deeper patterns on wiring the consumer side, see our notes on to dev only, giving it a custom security role instead of System Administrator, and configuring a plus custom scripts and the covers the pipeline plumbing this gate sits inside.
Takeaway: governance is the spec checked automatically, not a doc nobody reads.
Walkthrough: one Feature, end to end
Take a generic case-routing requirement. Illustrative throughout; calibrate against your own data, actuals vary.
The work item body carries a fenced schema block and behavior block:
# mrd_ prefix per our solution naming convention
entity: mrd_supportcase
columns:
- { name: mrd_priority, type: choice, options: [Low, Medium, High] }
- { name: mrd_assignedteam, type: lookup, target: mrd_team }
relationships:
- { type: N:1, from: mrd_supportcase, to: mrd_team }
Scenario: High-priority cases route to the escalation team
Given a support case with mrd_priority = High
When the case is created
Then mrd_assignedteam is set to the escalation team
And an approval flow notifies the team lead
The prompt is boring on purpose: "Read work item AB#4821. Generate the Dataverse table, the routing flow, and any plugin logic to satisfy every Given/When/Then scenario. Commit to the feature branch with AB#4821 in the message. Do not touch any environment other than dev." The same prompt drives Copilot Studio, Claude Code, or Codex with zero change to the work item. That is the point.
Out comes a component list: the mrd_supportcase table, a Power Automate routing flow, an approval flow, and a linked commit. It flows ADO item to generated solution to pipeline, where the CI gate runs the scenarios and the dev-scoped identity makes the red zone physically unreachable.
| Prompt-by-prompt | Spec-driven agentic build | |
|---|---|---|
| Source of truth | The chat session | The ADO work item |
| Reproducibility | One maker, non-repeatable | Any agent, same output shape |
| Traceability | None after the session ends | AB# links commit to requirement |
| Where errors surface | UAT or production | CI gate on the PR |
| Governance | Prompt wording, hope | Scoped identity plus DLP |
Takeaway: you leave with a template you can paste into your own ADO project today.
The one artifact to build first
Agentic development power platform work only pays off when the Azure DevOps work item is structured enough for any agent to build from and verify against, and when that agent physically cannot reach what it must not touch. The spec is the constant. The identity is the fence. The agent is a swappable detail.
Before your next sprint, convert a single Feature to the fenced spec template and commit it. One item, with the YAML schema and the Given/When/Then block, under standard headings. Everything else in this piece follows from that one artifact.
This article was originally published at .
SOCIAL SHARE CARD GENERATOR