The Computer Weekly Developer Network gets high-brow on low-code and no-code (LC/NC) technologies in an analysis series designed to uncover some of the nuances and particularities of this approach to software application development.
Looking at the core mechanics of the applications, suites, platforms and services in this space, we seek to understand not just how apps are being built this way, but also… what shape, form, function and status these apps exist as… and what the implications are for enterprise software built this way, once it exists in live production environments.
This piece is written by Andrew Davis in his capacity as senior director of research and innovation at Copado – a company known for its low-code DevOps and testing platform technologies that work to power enterprise software, specifically within the realm of Salesforce deployments.
Davis writes as follows…
Low-code & no-code programming provides teams with a way of building applications at a higher level of abstraction. This means instead of thinking about classes and method calls, teams can think in terms of screens, business processes and a data model. This allows professional coders to build more quickly, but more importantly, it opens the arena of software development to a massive new community of builders.
Companies today are filled with digital natives, and most people have at least a basic familiarity with building digital systems from webpages, to complex spreadsheets, to simple integrations. Low-code and no-code systems lower the barrier to entry for creating applications to allow subject matter experts from finance, sales, support, and IT to moonlight as digital innovators.
Software development is a thinking process… and allow me to tell you what that leads us to and why it matters.
A new line of logic
It involves gaining clarity, communicating logic with others on a team, discussing and refining. This has traditionally been done through verbal discussion between software developers (who can offer potential solutions) and those [typically businesspeople] who are familiar with problems that need to be solved. What happens when you give the people who experience a problem the tools and training they need to solve it for themselves? Low-code [and for businesspeople] no-code systems make it much easier for the people who understand problems to build their own solutions, or at least to be able to visually review and understand the logic involved in a solution.
Low code systems make more work possible with less effort, by using fewer moving parts in each solution. Each line of code, and to some degree each character of code, is a moving piece that adds to the complexity of an application. When people can build using larger pre-built modules, such as drag and drop page layouts, visual flows that describe logic, and simple ways to create data models, they create systems that are faster to build, easier to understand, and easier to maintain.
Low code platforms come in two key flavours: pure low-code tools like Mendix, Appian and Outsystems [in no particular order] and low-code platforms attached to SaaS systems like Salesforce, Microsoft Power Apps and ServiceNow.
The SaaS providers have built low-code platforms to give their customers more freedom to innovate and solve their own problems. This frees the SaaS providers from having to support every possible customisation or feature that their customers request and frees customers from having to maintain their own infrastructure and integrate custom apps with their enterprise business data.
Are low code systems reliable tools for building business-critical systems? Absolutely.
Every time we move higher in the layers of abstraction we sacrifice some raw performance and flexibility in favor of simplicity. This has been true of the shift from machine code to assembly language, from assembly to C, from C to Java… and from Java and other higher-level languages to low-code and no-code platforms. The speed of an application is not dictated solely by its execution speed, it also includes the speed to build, modify, review, and deploy the application.
The overall flexibility of an application is also not maximised by offering flexibility at the level of code.
The flexibility of code-based systems is constrained by the ease of understanding the code, the challenge of finding and retaining skilled developers, and the risk of small changes cascading into system-wide failures. Low-code systems provide enabling constraints – limiting some flexibility to allow teams to most easily achieve business goals.
The science of compliance
Ensuring compliance with ethical, legal, and corporate requirements is a critical but often neglected aspect of the development process. Compliance controls generally need to address two key points: what has changed (by whom, why, when, …) and is that change acceptable.
The most fundamental part of compliance is having a history of all changes, who made them, when, why and what else changed at the same time. Version Control is designed to address this need. Version control is universally seen as essential in traditional software development, but low (or at least) no code developers are not typically coders and may not be familiar with such techniques. The most useful step that teams can take to enable compliance is to enable those who change systems to track their work in version control.
This also opens the door to building processes around approvals, deployments and automated analysis.
Importantly, maintaining compliance depends on compliance officers being able to understand the systems teams are building, or at least to ensure that effective controls are in place. By raising the level of abstraction on which a system is built, a far larger segment of the organisation is able to review and evaluate what has been built, and to attest that it will meet the security and legal requirements of the organisation.
Adherents vs. detractors
As with all new development, low-code systems have their adherents and their detractors and valid points can be raised by both sides.
But fundamentally, low-code is simply raising the level of abstraction of the systems that teams are building. This is a critically important development to enable innovation by a wider segment of the population and to enable the creative velocity that organizations need to capture the opportunities and avert the risks they’re faced with every day.