Software Defined Redneck

My Issues with Low Code

Specifically the Microsoft™ Power Platform™

Power automate is a useful tool. It lets you connect almost anything in the Microsoft ecosystem (and even outside the Microsoft ecosystem if you pay for premium). Unfortunately it is not a good tool.

If Janice from Accounting wants to have an email appear when there’s a new SharePoint item with their name on it, sure. That’s possible. And fairly simple. Power Automate is quite good at this. Easy enough UI, no need to “deploy” or “host” the automation anywhere. It’s great.

The problem comes when power users are given this one automation tool and when someone says “hey can you automate our procurement process” they don’t say no because technically it’s possible. It just requires a bit of code smell (nested for loops and conditions, anyone?). Fast forward 2 years and there are 200 flows scattered across 2 environments with no central way to manage them.

Inevitably there will be problems. Either a bug occurs in your flow, or SharePoint decides to just reject your requests, and it breaks. So you need to build error logging (why is that not built in?) to catch the issue and fix the flow before somebody’s business process breaks. This needs to be applied to every flow individually, as again there is no bulk management functionality.

My main complaints stem from its browser-only, ““low-code”” nature

I don’t think the people designing these platforms are malicious - I do however think they’re lazy, and never need to use their own tooling. Even if they know it’s a bad experience, they might brush it off as “low code developers don’t know what they’re missing”, which is not a good reason to make a tool unusable. For example, when you expand the code pane on the PowerApps editor, it doesn’t resize the app preview to accomodate it. If you’re working on the functionality in the top half of an app, get used to expanding, collapsing, and expanding the code view pane. Here’s a screenshot on a 1080p monitor, aka my laptop screen. Screenshot This is not a usable state. I suspect it comes down to the idea that the expanded code view isn’t a real “panel” in the UI, it’s a seldom-used view that just covers the page.

I think if they added a toggle of low-code on/off, I’d be a lot happier. Let me check it out as a git repo, make my changes, and push it to make it live. That’s effectively already happened with PowerApps and PowerBI, but strangely not with the tool trying to be the most “backend automation” of the group.

For anything moderately complex, I’d argue python + Microsoft graph API would be easier. But that’s not officially sanctioned by the workplace, so it’s forbidden.

I’ve heard there’s a plan to use PowerFx (used in PowerApps) in flows, which includes regex, better data table manipulation, and a functional linter for code editing. My hope is this will coincide with a lower level code view to get feature parity with PowerApps (Git! Find/Replace!) Until then I’m dumping as much logic as possible into the App and only having the flow do the bare minimum.

The broader issue with PowerAutomate (and especially PowerApps), is they give you all the hassle of real development (typing, obtuse errors, weird syntax) with none of the tooling and none of the skills that can go on a resume to get a “real” software job.

Pick a lane, Microsoft. Either make this truly low-code (so people can make simple things quickly but no more) or give me a full fat development system with source code.

This was not intended to be a rant, moreso a critique. But as I encounter mistakes my precessor made through no fault of their own, I feel the need to point out the flaws in this system that led to those mistakes.

Additional Ranting below, don’t look there.

I need to do a lookup for a sharepoint list item using a unique column value. In power apps, there’s a Lookup() function which does a filter based on column values, and returns the first result. But for power automate, the best you can do is Get Items with a filter, which returns a filtered table, not just the single record. Yes the table only contains one record, but it’s still a table. As a result, any attempts to use the resulting record will wrap you in a for loop since it thinks you’re iterating over a list. Because you are. Becuase there’s no lookup.

Sure, you can define a new variable that’s equal to the first (and only) record in the table, but the editor isn’t smart enough to keep track of that, so you lose the autocompleting/searchable column name functionality. As a result I leave it in this table-of-one form, and end up with a single “send an email” action at the bottom of 23 nested for loops, each of which will only run a single time.

Even after all that, I can’t save the flow because it’s nested too deeply - so now I need to go back and change all variables to reference first(table_variable) instead of items(for each) and move the action out of the nested hole before I can save.

I sure love working in an online-only development environment with a flaky VPN. Not only do formulas not always update when there’s an issue, any attempts to save will just spin forever. Even once you’re back online, it’s a 50/50 whether it will save or force you to reload the tab, losing all your progress.

I don’t know if there’s a better solution - maybe remoting into a VDI server and editing apps from there? That would be equivalent to running a terminal session/editor in tmux (which is what I already do) I know the VDI infra is very laggy but surely a powerapp can be edited using RDP without too much noticeable latency

Tags: