Simple is not easy

Low-code development from a developer's perspective — are there benefits for engineers?

Which misconceptions about low-code prevent a fair assessment of the approach, where it helps, and when classic development is the better choice.

  • We'll send you the materials you need or a commercial proposal
  • A Brief Look at the State of the Industry
  • Is low-code development not a philosophy?
  • The code-first philosophy

5/14/2021 We break down the most common misconceptions about the low-code approach in development.

A Brief Look at the State of the Industry

Low-code is not a philosophy? Low-code gets confused with mature code-first platforms

Low-code does not include the traditional control tools familiar to developers (code review, deploy)

Developers are better off writing code that delivers immediate value than building visual builders.

  1. Low-code is something you can fail to grasp, some kind of artifact.

  2. Reading time: 12 min. In the previous article about low-code in enterprise solutions, we addressed business readers.

  3. However, on Habr, most users are engineers (Captain Obvious!), and in the comments on the article I saw a fair number of typical objections to LCDPs (low-code development platforms). And while those who do not know about the effect

  4. Dunning-Kruger. Before you start looking for the dislike button, let's break down the most common misconceptions and assumptions.

  5. In our view, the most common misconceptions are the following. Some people think that low-code means using ready-made products rather than a development philosophy.

  6. By low-code, people mean advanced code-first platforms. Some colleagues even cited WordPress as an example. Low-code lacks proper DevOps (code review, versioning, deploy, etc.), proper code reuse, and other abstractions.

  7. And in general, low-code is for some standard solutions, which no-code is meant for.

  8. Developers are better off writing code that delivers immediate value than building visual builders. "Low-code does not need to be understood; it is just some kind of artifact.

  9. We'll just keep coding as usual." However, some developers still do not fully understand DevOps and think it is a job title.

  10. So the situation with low-code is not unique.

  11. Why did we decide to raise the topic of low-code and the future of the IT industry?

  12. By education I am a physicist and an entrepreneur. In the mid-90s I owned an ISP, and after that I held positions ranging from engineer at Beeline to managing partner at a company specializing in automation software development (my current role, which I have held for 7 years). And now it is interesting to think about what tomorrow will bring."

A Brief Look at the State of the Industry

  1. Starting with machine instructions, moving into procedural programming and giving up memory management, with the rise in the number of frameworks and the development of high-level languages, what comes next?

  2. Will the level of development abstraction keep rising, and if so, how?

  3. At the same time, demand for new products and automation is growing.

  4. The shortage of specialists in the industry is easy to see in salary growth: it is outpacing productivity growth in IT.

  5. In addition, the longer one development team stays on a project, the deeper it gets into operational support: more features generate more required fixes.

  6. Development costs increase, and at the same time a conflict of interest appears: the business needs to change faster, while developers want interesting tasks.

  7. But most business changes are uninteresting.

  8. The IT industry has always responded to such challenges by raising the level of abstraction and simplifying development. The "assembly era" was replaced by the "C++ era," then came the era of high-level languages with complete freedom from memory and resource management, and after that the number of frameworks and libraries kept growing.

  9. There are no signs that this trend will change.

  10. Let's think about whether low-code can continue it.

Is low-code development not a philosophy?

In the CIS-speaking internet, every article about low-code ends with comments about the shortcomings of a specific product or products. We will talk about products separately a little later, but first I suggest thinking about the low-code concept as a whole.

The code-first philosophy

  1. Developers deliver the final value to the customer.

  2. Element layout, new fields in entities, calculation logic, and integration flows — all of this is implemented through program code. Yes, it sometimes has settings that occasionally allow changes to be made without involving developers.

  3. But most change requests are still handled by developers. And here developers may have two wishes.

  4. How can we write only interesting code and hand off the boring operational tasks ("move a button") to someone else? Let people come to us for operational matters only in rare cases, the number of which should ideally keep decreasing.

  5. If we are asked for operational changes, let it be done more specifically.

  6. Communication should take less time. And it would be nice if it were easier to make sense of your own code that perhaps no one has touched in six months. In code-first, these wishes are hard to fulfill.

The low-code philosophy

  1. Imagine that you deliver to the client not the final value directly, but a building kit for realizing that value. No, of course, you'll have to implement the initial functionality in your kit yourself for debugging purposes.

  2. But at the same time you'll be able to create calls, functions, and components that...

  3. In the vast majority of cases, they are self-documenting. Every component has settings that make it reusable.

  4. Here it's important to note that code-first platforms also have many settings, and they are even distributed across components.

  5. In practice, however, their use does not allow most of the operational work to be taken off the developer.

  6. From this and other components, you can assemble fundamentally new value for the business.

  7. Technically these are the same interfaces, business-process components, and integrations, but for the business this is fundamentally different functionality.

  8. If some very exclusive logic is needed (one of the components is missing) and that logic clearly won't be reusable, you can insert the required component by writing a small piece of code. Unlike code-first systems, here you don't need to write a whole module or microservice — you insert the code into the right fragment without service boilerplate ("sugar").

  9. Often such code is easily read not only by a developer but also by an experienced manager or business analyst, and consists of 2–20 lines.

  10. When you face a new requirement, you either assemble new functionality in the kit you've already built, or you add activities and components to it if they're missing.

  11. If you look at low-code development through the eyes of a code-first developer, what changes first of all is the level of component abstraction.

  12. Besides the familiar services, libraries, and builders, there is one more, higher level of abstraction — the abstraction of business logic.

  13. This holds true both when using ready-made LCDPs and when developing within the low-code paradigm.

Low-code development is confused with advanced code-first platforms

In discussions, I keep seeing low-code treated as nothing more than very flexible systems. For example, Bitrix, because "it has business processes and table modeling" or WordPress. An LCDP is a platform in which everything is built with a visual builder, because if that is not the case, maintaining such a platform will eventually turn into code-first. I would define the following LCDP criteria.

The system core contains only builder elements and everything related to them, that is, you do not have to apply a code-first approach to implement what the LCDP is meant for. In the visual editor, you can insert code where it is needed. And in some platforms, you can even slightly override the code of the current component.

Here are our favorite examples. ETL / ESB Talend, WSO2 are low-code mechanisms for building integrations. Mendix, Pega, Appian, OutSystems, Caspio are platforms for building applications of different classes. Reify, Builder.io, Bildr are for the frontend.

Among the newcomers of 2021 are Corteza (fully open-source, Go + Vue.js) and Amazon Honeycode.

For gamers: when was the last time you looked at Unity and products built on it?

CIS ones include ELMA BPM, Creatio (developed by Terrasoft) and Comindware, as well as the general-purpose CUBA Platform and Jmix.

Products from major vendors include Microsoft Power Apps, Oracle APEX, Salesforce Platform, IBM BAS, SAP BTP.

Partially open source - Builder.io (front end), Bonita, Joget.

There are borderline cases too. For example, Pimcore, which in terms of the front end, workflow, and information model design with calculated fields is essentially low-code, with some caveats, but that is not the topic of this article.

If you try to do something beyond that, you will fall back into traditional monolith maintenance.

Or Bitrix itself. It is convenient for data modeling and for building business processes into which PHP code can be packaged in a low-code style, if desired, that is, without long initializations.

However, the huge amount of out-of-the-box functionality built outside the LCDP style, and the lack of mature low-code tools in other parts, lead to traditional code-first. In short, if you hear that "we tried a low-code platform and it did not work for us," I recommend looking into the details.

It may be that it was not an LCDP; it was a truly bad LCDP (there are plenty of those); or the team tried to write more code in the LCDP than necessary.

Instead of reusability, you get one custom component with a huge block of code pasted into it. We have seen that!

We'll curate materials for your task

We'll reply within 30 minutes and send relevant cases, diagrams, or analyses tailored to your context.

Low-code does not include the traditional control tools familiar to developers (code review, deploy)

You will find these components in the vast majority of platforms.

Many (Mendix, Pega) have their own CI with low-code elements. Although, of course, review is not always easy.

If the component code is clear, that part is the same as in traditional code-first. But as for what you can do in the builder... Imagine you built a shooter game in Unity, changed the walls, added mountains, then saved it and sent it all for review. Clearly, you would not version every single wall change, and you would end up with huge change sets that would be hard to understand in principle.

All the more so when it comes to visual changes and code inserts.

The review process becomes more difficult as the number of changes in a single commit increases. Reusability is also usually fine: processes can be used as subprocesses, and one "job" can call others, and so on.

If there is a desire to do it well, reusability will not be a problem.

Developers are better off writing code that delivers immediate value than building visual builders.

  1. Developers usually look down on the idea that they could build something by clicking with a mouse.

  2. Meanwhile, the vast majority of developer tasks are not rocket science, but routine work.

  3. The very kind you are not interested in and want to get rid of as quickly as possible. Within a project, your choice of tasks is limited. It is unlikely that only interesting and creative work will come your way (which implies that someone else will handle the boring tasks, and then everything said above applies to that poor person as well).

  4. It is almost impossible to avoid small, and sometimes repetitive, boring issues altogether.

  5. Simply because someone has to handle them.

  6. How will the situation change within an LCDP?

  7. Boring tasks will not go away and will keep appearing just as often, but instead of spending countless hours on them, you will be able to finish them many times faster or even hand them off to someone who is not a developer.

  8. Why write yet another integration between systems when you can build it faster with ETL solutions?

  9. Why fill a sprint with building a new screen if a designer can click it together?

  10. The faster you complete boring tasks, the more time you free up for more interesting ones.

  11. Moreover, statistically, you will get interesting tasks more often, because the break for routine work will shrink many times over. And what about truly talented developers, the ones who can solve any of the hardest problems elegantly and quickly?

  12. After delivering a task as code and then receiving a change request six months later, they face the following: they have to remember how everything is written here; it probably needs refactoring because code becomes outdated quickly.

  13. But very few teams will volunteer for refactoring. And few business users will understand why a minor change was estimated at several days.

  14. We wanted to write interesting code, but after some time we are not writing anything interesting.

  15. What remains for us is operations and a guilty conscience for the fact that things here are already not very pretty.

  16. If you think in terms of an LCDP, it is not limited to just faster handling of routine tasks.

  17. Refactoring happens not at the level of end value, but at a higher level of abstraction - at the level of the builder component implementation.

  18. As a result, you have to think more and design more.

  19. Fewer areas remain outside your oversight, and creating a poorly maintainable task in an LCDP is much harder because even non-developers can spot at least bad naming or flawed logic.

  20. The approach itself makes you think more in abstractions.

  21. Many team leads solve this problem for themselves like this: other team members handle implementation, while they do the thinking.

  22. This leads to nothing good.

  23. Such team leads often start missing code, and the team as a whole becomes more fragile.

  24. The antifragility of such people is ensured by the fragility of other team members, who act as typists.

  25. Both traditional and low-code developers can be susceptible to this flaw.

Low-code technologies do not need to be understood; they are just some kind of artifact. Let's just keep coding as usual.

You can ignore the future of development if you assume that: the number of tasks for developers will grow no slower than the number of developers and development substitutes themselves (accounting for rising labor productivity); the business can afford development's growing appetites without going bankrupt (i.e., ROI in IT will always be positive); and other types of investment won't compete with investment in IT. Let's run a thought experiment and estimate how likely all of this is in real life.

The number of tasks for developers will grow at least as fast as the number of developers themselves and development substitutes

Right now the global developer shortage is around 10%. I can't predict the future, but I can imagine what conditions are needed for this shortage to persist forever. First: developer productivity must not rise enough to offset the shortage gap (i.e., by 10% relative to current productivity). Second: the number of developers must not grow faster than the number of tasks.

An additional condition: the number of development substitutes must not reduce this shortage. And that contradicts the fundamental law of supply and demand, since demand is always balanced by supply to an equilibrium value.

A huge number of people are either thinking about retraining into IT or are already in the process of retraining.

According to surveys, one in five developers has no specialized education and entered IT after completing courses. And that's not counting the pervasive programming courses starting as early as kindergarten and school, and the ever-growing stream of IT-major students at universities. IT is starting to take potential specialists away from other professions.

This flywheel spins up slowly but surely. In investment bank reports, the market for no-code solutions (which are direct substitutes for development) already looks roughly like this. And if you look at this list, you will see that the number of products keeps growing.

Type "name of any company low-code/no-code" into a search engine and you'll see that almost everyone — from CIS's Sber to America's Apple — is thinking about how to substantially raise labor productivity in development. After all, the labor-market imbalance is easy to trace in the ratio between the cost of executives (who carry greater responsibility and on whom the multipliers depend) and mid-level staff (who carry significantly less responsibility).

The income gap is 3–4 times, and that's no accident.

With 20 million developers in the world, just

India supplies the market with a million developers a year (and that number grows each year), meaning there is some probability that the developer shortage may not persist in the future.

There are also more radical opinions: from

German Gref, for example, or a futurologist

Businesses will be able to pay for development's growing appetite without going broke

  1. The more expensive development becomes, the wider the gap between tech companies and everyone else. Everyone else is forced to plug into the ecosystems of the giants. And those ecosystems have very high productivity (because of their scale).

  2. This alone pushes companies into someone else's ecosystem.

  3. There was a time when IT costs were negligible.

  4. But software is becoming ever more complex and varied, and the cost of IT infrastructure is a significant factor for startups and one of their main budget line items.

  5. The more expensive IT becomes, the more substitutes there are for investment.

Other types of investment will not compete with investment in IT

  1. Organizations see digitalization as a well-paying investment.

  2. The wave of digitalization will pass (all companies will be digitalized to some degree, and the rest will leave the market), and the deployed solutions will need to be maintained and supported.

  3. With the ever-rising cost of IT, won't the question of finding other sources of income arise?

  4. Won't the cost of IT at some point become so significant that it automatically cuts off most of the new — currently profitable — projects?

In conclusion

I recommend that developers take a look at low-code and at least complete a few tasks on one of these platforms to expand their own boundaries. We need to understand the scope of applicability, see a snapshot of current capabilities, and learn something new, because we are engineers and should look at new technologies through the eyes of practitioners. You may not find a single LCDP that solves your tasks, but at minimum, exploring this trend to broaden your engineering perspective can be useful today.

Contacts

Let's Discuss Your Project

Leave your current contact details and describe your task. We will come back with clarifying questions and a proposal for the next step.