The Future of No Code is Low Code
Or why we should write more programming languages instead of trying to build virtual legos.
I clearly remember my dad coming home from work with a roughly 50 page manual for the Scratch programming language and placing it on my desk, next to my family’s behemoth of a personal computer. I was around 8 or 9 and would spend many of my weekends trying to build different games in the Scratch block-based IDE.
For those of you unfamiliar with Scratch, it is a super high-level visual programming language intended to behave primarily as an educational tool. It aligns with Bret Victor’s theses on learning programming, perhaps to a perfect T.
Programming is a way of thinking, not a rote skill. Learning about "for" loops is not learning to program, any more than learning about pencils is learning to draw.
People understand what they can see. If a programmer cannot see what a program is doing, she can't understand it.
Bret Victor in Learnable Programming
Scratch did exactly both of those for kids.
Through a visual language, Scratch made it difficult for users to make mistakes (only certain blocks can fit with others) while enabling them to begin building the programmer’s style of thinking. However, this was at the cost of low maintainability (it’s incredibly difficult to build even slightly complex systems with Scratch) and a limited feature set.
But Scratch excelled in the education space. It served as training wheels for Gen Z’ers before they were ready to write their first Python script.
There’s been a fairly recent emergence of block-based visual programming outside the context of education. IFTTT, Zapier, Coda, and Notion (among several tools in practically every vertical) have developed visual programming environments under the hip term of no code. The presumption of no code is that not everyone can write code, but they can probably put together IKEA furniture or a lego set.
No code is fundamentally skeuomorphic legos. It’s the same idea brought into the digital world so non-technical users can build logical automations, interactive web apps, etc. without touching a single line of code.
There are a couple key issues with this train of thought.
Drag-and-drop is not scalable. If I want to build a large automation that will change with the expanding needs of my business, scouring over an infinite digital canvas hunting for a particular block is likely not the best use of my time.
Most people are better at “coding” than you think. Excel has been around for 35 years. SQL has been around for even longer. Most people are used to working with some form of programming in their day to day, especially those who are in the target audience of no code software.
No code lacks expressivity. No code restricts a user to thinking in a very lego-esque kind of way. Decision trees can be modeled with no code, for example on IFTTT. But what do for or while loops look like? These important design decisions are difficult to factor in when dealing with no code environments.
Visual editors == UI bugs. Building a graphical no code platform is its own can of worms. UI is tricky to get right.
Don’t get me wrong, no code tools make for a hell of a demo. Click a couple times, drag together some connectors, and boom. For hyperspecific use cases, they can make the consumer’s life much, much easier.
However, we should shift gears as an industry to building more programming languages that empower users in their day-to-day tasks.
I was using Notion the other day and was pleasantly surprised to see the use of a special formula language users can use to programmatically fill in table cells.
A domain specific language (DSL), such as the one in Notion, solves for all of the problems I listed above. As you write a query, Notion automatically figures out properties of the data you’re examining and provides autocomplete options. It is the web-native, low code solution that enables users to build complex, maintainable projects.
DSLs are easier to read and can help save time in the long run. There’s no need for complex user interfaces since text editors are a well solved problem. Visual programming might be easier to learn, but ultimately is better off left as an educational tool.
Imagine a world where you didn’t have to jump through convoluted user interfaces to get things done. Instead, you could just write a simple script in a language that looks very similar to Python/VBA. Like the DSL in Notion, tools should provide intelligent, educational scaffolding when it comes to writing out a query to expedite the process.
Learning the syntax for new low code language operates on a J-curve. While it may take some time to pick it up, the payoffs can be exponential in utility. In fact, I believe the benefits justify the initial engineering effort it could take to identify a minimally viable grammar and build out an interpreter.
Even if you are still solidly in the no code camp after reading all of this, imagine low code being a choice in any application. Sure, you can first prototype your system with a visual interface. Once you want more comprehensive logic or scalable workflows, you should be able to switch to a low code interface that allows you reap more benefits at the cost of visual candy.
And this is what customers want as well! Take a quick look at the pros and cons online for some of these no code platforms and you will notice that everyone wants more programmatic capabilities and customizability. Here are some comments on various no code tools from TrustRadius.
“It's a little too basic and has issues working with a more complex use case. When you have requirements to do transformations, it is not the right solution.” (re: IFTTT)
“Some services lack ingredients. "Ingredients" are attributes passed from one service to another to enhance IFTTT's power. However, some services (like Evernote's notes, for example) currently have too few ingredients available.”
“The basic functionality of designing and developing in Webflow is easy to learn quickly, but advanced features and expert level experience can take a lot longer to achieve.”
“Learning Curve. There is a bit of learning curve to understanding how the pages can be built to your needs, especially when it comes to table creation.” (re: Notion)
No code seems to be a lot like chess: easy to learn but takes a lifetime to master.
Retool is a great example of low code. They provide technical users with a simple drag and drop user interface for building apps with Javascript hooks and API calls. This makes Retool incredibly expressive and easy to use.
As an aside, the Retool YouTube channel is fantastic. This is the kind of support and documentation that should exist with every low code tool.
They’ve done a great rundown on what is low code, which I recommend reading. However, I wholeheartedly disagree with their notion that low code is only intended for technical users (and I hope you do as well).
No code will only get you so far. Low code can take you significantly further.
Interesting opinion! Definitely pushed me to think more about the potential cons of the no code trend. My team at meta rewrote some react native code into iOS/android native languages for better performance and scalability. There seems to be a parallel here with how the simplicity of no code / cross platform solutions removes the level of control developers may need.
Really enjoyed this piece, thanks for sharing!