I ran a no-code app in production and realised what no-code really needs to do
The problem that no-code seems to be glossing over is the one where the real challenge lies.
I have been building web apps and native apps on two of the leading no-code tools out there for the last year. When I started, I was blown away. I could get so much done in so little time.
Being a developer, this was liberating. I had always felt that a lot of the things we developers do aren’t actually that complicated. Unfamiliar syntax and complex developer processes keep people out. 99% of the time, developers are just wiring things. So initially, it made sense. While other developers scoffed at these tools, I was churning out apps after apps in a few weeks time.
As months rolled by, my budding romance with no-code tools ebbed. I struggled to justify why we were building things using them. I was interested in this space so I did my research. I read the no-code manifesto from various sources, tried out a bunch of other tools and began putting my thoughts together.
This essay is the result of that research. Please note, when I say no-code in this article, I mean no-code app builders / website builders. I don’t have any experience with the other types of no-code tools (such as automations, integrations etc) so I won’t comment about them.
Let’s take a logistics example. In logistics, there are standardised solutions for the highways, railroads and seas. That transportation is relatively cheap because you can move a lot of things together and economies of scale kick in.
Getting things from the highways into individual homes, however, is difficult and expensive because you need one transportation medium for each consumer. This is also called as the last-mile problem.
Coming back to software, we now have standardised solutions for the “highway” problems. We have solutions for email, video conferencing, searching, entertainment and so on. These problems are faced by a large number of people and so it makes economic sense for businesses to go solve them.
Then, we have the small problems. For example, an app that one business in the world needs to solve an operational challenge. This use-case is so specialised that businesses just don’t have an incentive to solve it. Without no-code, this business will have to get this software custom built which will take a lot of time and money. This is where no-code shines. It provides simple building blocks that users can use to put together a custom solution. Goes without saying, no-code tools are only as good as their primitives - these fundamental building blocks that they allow mixing and matching.
With no-code, you can build custom things for yourself that you can’t find an out-of-the-box solution for.
A lot of the last-mile problems in software yesterday are now becoming railroad problems. In fact, we are finding more efficient solutions for many of the railroad problems as well.
Take Shopify for example. Does it make sense for anyone to build an e-commerce store from scratch today? Shopify provides so many features for such a low starting price that it’s just impossible for anyone building it from scratch to match it.
Until a few years ago, if you were a SAAS and you needed a decent software for organising your guides, API reference and solutions, your options were Intercom, Freshdesk and Zendesk. All of them are full-blown support platforms which you might or might not need. Today, you can create a public Notion document with all your support articles and you’re done. For free. Notion provides search out-of-the-box, supports all sorts of media types and looks great. There are a dozen other things you can do in Notion for which you previously would have paid to several different vendors.
Airtable has done something similar to operations on entities. If you want to create a form on top of an Airtable base, you can do that at the click of a button within Airtable. In fact, you can assemble entire apps within Airtable.
In the near future, we will see solutions that will introduce even better abstractions and upgrade last-mile solutions into railroads solutions and railroads solutions into their more efficient variants.
What’s my problem
My fundamental problem is that most no-code tools out there say that their users will not need code at all. No, I am not referring to the term “no-code”. Many in the no-code community agree that that name is a misnomer. I am referring to what these tools say on Twitter, or write on their landing pages. They say you can build anything without any code at all. That I think is either a blatant lie or a delusion.
With no-code tools, you are simply putting blocks together. If you need a different block or if you are looking for smaller blocks than the ones that the tool provides, you are stuck.
The truth is - code is king. When you want custom flows, code will come to rescue. When you need a component that doesn’t exist, code will come to rescue. When you want to connect anything that the creators of the no-code tool didn’t envision getting connected, code will be the answer.
Don’t confuse my argument with another argument that people throw at no-code tools - “You are using code underneath. You need developers for that code. What no-code?”
I think there is definitely value in creating a layer on top of code. My big problem is - today’s no-code tools don’t seem to admit that their primitives are not good enough.
That they still don’t have a primitive that comes close to code.
With the primitives that no-code has today, there is no competitive edge. Anyone can build a bunch of components, write some integrations and ship a new no-code tool. Please don’t say these products have communities. When a user is stuck, they are looking for answers and no amount of community support can unblock them.
Worse still, SAAS software such as Notion and Airtable can eventually provide most of the functionalities that no-code tools provide, out-of-the-box. They have access to the same primitives. It’s already happening. There are SAAS today that are providing white-label apps to restaurants, convenience stores, e-commerce stores etc.
Let’s say there is an app that people use a no-code tool today to build. If there are sufficient number of users that need this app, eventually, there will come a SAAS that will generalise what users need and offer a standard solution. Since they will dive deep into that specific problem, they will be able to put together features that no-code app builders would take a long time to build. Some might not even be possible.
I know some will go - “What is he even talking about? I have built so-and-so complicated software with x no-code tool”. Let me take a very specific example and show you what I mean. I have personally struggled with this one, so I know what I am talking about.
Let’s say you have an app with a list of convenience stores. Whenever a user opens your app, you want to sort the list of stores in the increasing order of distance from the user’s current location. That’s it, no big deal.
You have a Google sheet with data that looks as below:
The latitude and longitude for each store are in the Google maps link. Logically, what you need to do is the following -
Extract the latitude longitude from each link.
Get user’s current location
Find distance between each store and user location. You can probably use Haversine formula here which should give good enough results.
Sort the list in the increasing order of distance found in step 3
How do you accomplish this with a no-code tool? Let’s look at our options.
Use an API? Okay, how do we write APIs? Code. Let’s say there is a tool to build APIs without code. How will you write the core sorting logic? Well, code.
Use Apps Script to sort the locations with respect to distance? What is Apps Script? Code.
Some no-code tools slip a coding paradigm of their own and call themselves no-code. That’s still code with the same problems and the same challenges as the other programming languages. So, code.
Your only hope is if the tool provides this capability out-of-the-box. Even then, you will need to do some work to give it the data in just the right format that it needs.
Consider even a small modification to this problem. Let’s say you had to sort the list above with respect to a given fixed location that is available while the app is running, not the user’s location. This small tweak too can wreak havoc to a no-code solution. If the no-code tool expects you to specify the list to sort and the location to sort it by, you will be left wondering how to tell the tool to take user’s current location. If the tool takes user’s current location by default, you will be left wondering how to pass it your custom location.
This is a very small example. In a business that gets any kind of traction, eventually, flows get complex, validations get tricky and integrations get specific. You will see variants of the problem above, over and over again in different flavours. Sometimes, you will need to nudge people down paths that the tool doesn’t support, you will need to collect some data about the user experience that the tool doesn’t give you any visibility into and you will need to introduce business logic that the tool just wouldn’t give you any way to realise. These problems will just push the complexity on some other part of your application.
I have built full-fledged production apps on some of these tools and it makes me cry just to think about how much we had to change things on our side to play nice with the tool. The rigidity of the tool transferred all the responsibility on us to find a way to make a feature work on it.
I will talk more about very specific problems about the challenges I faced in future blog posts. So, if you are interested in this space, why don’t you subscribe to my newsletter?
I worry about all the people who are using no-code tools today to build businesses that one day will get big and as a result, complex. What will their developers do?
Again, don’t mistake my criticism for a lack of respect for the no-code movement. I think the tenets of the movements make a lot of sense. It is the right thing to do. In the history of our world, we have seen over and over again that making creation easier pushes mankind forward.
My only trouble is with the way we are solving this.
Bottomline is, no-code tools need to invent their very own primitives that are more expressive than the ones we currently have. These primitives should enable things that users just can’t get from a SAAS. Only then will no-code be able to establish itself as a *real* alternative to code. Remember what we said in the “Why no-code” section? You use no-code only when your use-cases are custom.
I spent some time thinking about the right way to phrase the problem. It as as below :
Humans are problem-solvers by nature. We all know how to do it. Somehow, problem solving inside computers has become a specialised skill, even though it uses the same principles and needs the same skillset. People are scared of it. The question is - how can we make it as easy as problem solving in the real world? People already know what they want to accomplish. How can we enable them to express what they mean?
That’s the question I will leave you with. I would love to hear what you think. If you found this interesting, please consider subscribing. I will be writing about this area (and some unrelated but fun areas) in my future posts as well.