I recently came across a guide from Nick Doelman about putting the Power Apps Maker Portal in the cupboard and bringing out Visual Studio Code and Claude Code instead. As someone who’s always looking for ways to improve how I work with the Power Platform — and, honestly, someone who likes exploring new ways of doing things — I gave it a go. I should mention up front that I’d never used Visual Studio Code before, and while I have Claude, I’d never used Claude Code either.
Getting set up took a fair bit of authorisation and a lot of saying “Yes”. One difference from Nick’s walkthrough: I created my Dataverse environment myself beforehand rather than having Claude Code do it, so I skipped that step and went straight to building.
My first task was a “Certificate Manager” app — somewhere to record the exam certifications I hold and track their start and expiry dates. Claude did a good job here. It created two tables and the columns I asked for, and it worked out what each column type should be from my natural-language description. I then asked it to add a “Days Until Expiry” column that calculated the difference between the Certification Expiry Date and today’s date. So far, so good.
Next, I asked for a simple business rule: “Display Days Until Expiry if Certification Expiry Date contains data.” Claude told me it had created it. I had a look — and couldn’t find it. It insisted, point blank, that the rule was there. I pushed back, saying I couldn’t see it in the solution or on the table, and it stayed absolutely certain. So I quickly built the rule myself and asked Claude to compare the two. That’s when it found the problem:
Here’s the actual defect in the one I made earlier: a real activated business rule in Dataverse is always a pair of records — a “Definition” row (type=1) and a companion “Activation” row (type=2) that the platform generates when a rule is properly activated, linked via activeworkflowid. Yours has both:
- Definition ee13f7bc-… → _activeworkflowid_value: ‘4bf8601f-…’ ✓
- Activation 4bf8601f-… → _parentworkflowid_value: ‘ee13f7bc-…’ ✓
Mine only ever had the Definition row (962bcf41-…), and its _activeworkflowid_value was None — no companion Activation record was ever generated.
Interesting — once I’d created the rule myself, Claude cleaned up after itself and pointed out its own mistake. It turns out the Dataverse skills don’t properly support business rules, even though Claude was adamant it had made one. Following a conversation on LinkedIn with Sara, I learned why that matters: for things like this, Claude Code is far better at writing JavaScript, and JavaScript is more flexible than a business rule anyway — so it’s worth reaching for that instead.
We got there in the end. The next task was a view for the Certifications table — nothing difficult. This time I used the Claude Code extension in VS Code rather than Claude in the terminal (I do prefer a GUI). It didn’t appear to create the view. When I went back later and asked, Claude spent about 15 minutes investigating and found it had written the view into the XML but never actually created it in Dataverse itself.
Finally, I asked it to build a Model-Driven App to bring everything together. Thirty minutes and several “shell” apps later, Claude came back and told me it couldn’t do it — the “AppModule via the raw API is behaving strangely.” So while it technically produced an app, it was useless.
So where does that leave me? Creating apps this way is genuinely exciting — it shows what’s possible when you can build through natural language alone. For me, at least, it hasn’t saved time yet; in fact it took several hours to put together something I could have done in an hour the usual way. But I’m not writing it off. This is all new to me, and as someone who likes learning and trying new approaches, I’ll keep exploring VS Code and Claude Code and what they can do. My early results were mixed — but the potential is clearly there, and I suspect it’s the direction of travel.
