Code is bad. It rots. It requires periodic maintenance. It has bugs that need to be found. New features mean old code has to be adapted. Code is the enemy — Skrentablog
Microsoft is talking about the citizen developer, improving PowerApps and Flow. Should developers and companies invest time and effort to master PowerApps and creating no code/low code solutions?
Customers question the levels of customisation and the cost of creation and maintenance of code. Everyone’s line of code costs to create, maintain and extend, code has a yearly cost.
With no code solutions like Flow and PowerApps, Azure manages the lifecycle and performance, leaving the developer focusing on what they should do.
No code makes the skill level needed to create and maintain lower but how much knowledge do you need to create PowerApps?
Simplifying creating customisations is like moving from C to C# and memory management/Garbage collection. You get better performance doing it yourself, but it takes more skilled developers and [MB1] increases complexity in creation and maintenance.
It’s simpler to let a computer manage memory than write the garbage collection routines yourself. Delegating garbage collection gives the developer more time to focus on creating business functionality code and less time focused on creating plumbing code (which enables business functionality code).
As a Java developer, I hated doing framework code for security, database writing, passing making web pages. These plumbing codes enabled business functionality but took time to write and created extra code to maintain.
When I saw Microsoft Dynamics CRM 4 it was amazing, which is impressive because Dynamics CRM was not amazing! CRM had lots of out of the box functionality, this meant creating less framework code and I focused on creating customisations to deliver business functionality and Dynamics CRM did the framework and security functionality.
The framework benefits of no code solutions are great, so why isn’t everyone using them?
I work on complex projects with complex requirements, out of the box functionality is limited to the flexibility of the solution it can create. Can the users change their processes to fit with the out of the box process or do they need custom validation and functionality?
Requirements and validation are bespoke to each business. A solution should help people do their job, a good solution will automate and validate for users. Technology should not dictate solutions, it should enable solutions.
When a user selects a field on a form, it should set other values on other fields or validate values, update other fields in the solution. Automate the creation of data, speed up processes and ensure quality data.
Design patterns are common patterns to common requirements, can workflows achieve the common problems addressed by design patterns?
Workflows struggle to deliver complexity, they are limited to simple tasks. Anyone who has created a complex workflow in Dynamics 365 knows they are unmaintainable beasts, as is trying to create smaller focused ones and intertwining them is also difficult. This is due to the workflow editor and trying to visualise complexity with workflows.
Why is it hard to deliver complex requirements with workflows? Let’s first understand what does complex code do:
- Retrieves, complex retrievals possibly using multiple records
- Sorts, filters
- Updates and creates related records
Code should not be complex, it should be focused steps put together. Codes ability to do complex things and combine them makes it powerful.
GUI customisations struggle (Workflows, Business rules) to do complex solutions.
Workflows cannot sort or filter, they can retrieve records which have a direct link to the entity being processed.
Business rules and workflows struggle to validate multiple fields at once and can’t combine fields.
Strengths and weaknesses
The citizen developer is being mentioned, PowerApps and Flows are being seen as the future companies and projects should be heading. Is this being asked for by customers or pushed by Microsoft?
Flows connect different systems and data sources, they connect and move data between systems/service. This is mapping and moving data, standard repeatable process.
PowerApps, Workflows, Business rules are simple customisations but struggle to carry out complex customisations. When you mix multiple simple customisations, you can end up with a complex customisation which is very difficult to manage.
PowerApps work for one simple app but 500 PowerApps? Will citizen developers understand over lapping PowerApps integrate to create one solution? Will Citizen developers manage PowerApps in different environments (because despite what Microsoft sells, it’s not good practice to make changes directly in production)?
These are the things Software Engineers do:
- Unit tests
- Data Set
- Design and create simple designs
- Overlapping customisations
- Create long term customisations which can be maintained and extended
Positives of no code
There are positives of no code and in certain circumstances it could be the best choice:
- Simple customisations can deliver simple requirements
- Lower level of knowledge\skill needed to build no code solutions
- Services manage performance
- No servers needed
- Lower maintenance
Code offers solutions which can match the needs of the clients but expensive skilled software engineers need to create, support and maintain it. The increased flexibility of code costs more.
No code solutions can deliver simple needs and smaller, less complex projects. The benefits of reduced cost and complexity increase the longer the solution takes to create and maintain.
Comparing the cost of no code/low code and bespoke code should be done over years. Bugs can hide in both but code means bugs are harder to find and fix.
There will be demand for code because complex requirements need complex solutions. Code allows you to create solutions to fit companies working practices, the custom validation and automation can deliver big productivity gains.
No code cannot deliver complex requirements, but companies can simplify working processes to align to out of box features and no code solutions. The answer can be to have both working together.
The problems happen when you scale and have multiple code/no code components. You get overlapping, integrating and conflicting customisations and the solution is difficult to understand, manage and extend.
It will be interesting to see where no code solutions lead. So far, the low code solutions don’t seem straight forward, and we are still waiting for the functionality to catch up with the Microsoft hype. When the landscape changes there are opportunities for developers to become experts.