To code or not to code?

Lately various no-code and low-code development platforms have been all around the news. It is easy to understand their allure: software development is expensive; what if we could replace software developers with less specialised workers? The rapid rise of advanced AI technologies has also accelerated the trend – could AI function as the missing link between non-technical project stakeholders and computer language?

The Allure and Limitations of No-Code and Low-Code Platforms

No-code and low-code development platforms have a market size in the billions – it would be foolish to disregard them as merely snake oil. It is absolutely true that no-code and low-code development platforms lower the barrier of entry significantly for many types of software applications. A substantial amount of software in the world is quite simple: they need to display, update, create, and delete data. No-code and low-code solutions can abstract the technical details of many operations away, so the no-coder doesn’t have to worry about them. Emerging AI technologies can make no-code and low-code solutions even more powerful, and they can abstract away a lot of the complexities of software development.

However, no-code and low-code solutions are precisely that—abstractions. Abstractions are an extremely important concept in software development, and all software nowadays is built upon layers and layers of abstractions. Creating a modern web application does not involve any signal processing, TCP packet management or memory allocation at the hardware level, because these tasks have already been abstracted away by previous layers of software and hardware.

In the same vein, AI-assisted code, no-code and low-code platforms serve as additional layers of abstraction, enabling developers or non-coders to create complex applications without diving deep into the nitty-gritty details of code.

Unfortunately, sometimes abstractions break. When the framework throws unexpected null pointer exceptions or a complex calculation returns an incorrect result, the developer needs to dive into the abstractions to find the error. This becomes harder and harder the more layers of abstractions there are, and sometimes it may feel like the abstractions are actively fighting against you.

The Complexity Conundrum

The real challenge in any sufficiently large software system is complexity.This complexity isn’t just a byproduct, it’s a necessity; if the task were simple, it wouldn’t require a software solution to begin with. Traditional software development has had decades to try and tackle this inevitable chaos – strategies such as automated testing, robust design patterns and powerful debuggers are some examples of tools that aim to make order out of chaos.

No-code and low-code solutions are often lacking in these kinds of tooling. When everything works, all is well; but when they don’t, the problems have a tendency to be really hard to resolve. A good example of this is the world’s most well-known low-code platform, Excel. Excel sheets are easy to create and can handle surprisingly complex calculations, but when the end result is incorrect and you have to backtrace through hundreds of functions and cells, you quickly start yearning for a robust set of unit tests and a good debugger.

Is No-Code or Low-Code Right for You?

Seasoned software developers usually only have one answer to any technology-related question: “it depends”. This applies here just as well. With low-code solutions you can hit the ground running, but sometimes haste makes waste. No-code and low-code solutions work great for quick prototyping and for simple software solutions, but code is still an extremely powerful tool in the never-ending fight against the complexity of software development.

Selecting the wrong tools and technologies can doom a software project from its inception. At Teamit, we specialize in helping you make the right choices, tailored to your specific needs and requirements. By partnering with us, you equip yourself with the expertise needed to navigate the complexities of software development, ensuring your project’s success from the get-go.