Where Does Web Development Complexity Come From?
And no, it is not JavaScript.
About a month ago Andrej Karpathy, a famous AI researcher, posted an interesting tweet about his frustration with web development.
He stated – and I quote – "The second you stray just slightly from the 'getting started' tutorial in the docs, you're suddenly in the wilderness." I was surprised to read it, because I remember how things were 10 years ago. The fact is, it is much much better today.
And I think IKEA is a misleading comparison, because IKEA furniture is exactly a “full-stack” product. It comes with every piece included, you just need to assemble it. In web development, however, you are required to search for pieces by yourself, figure out whether they fit together, and then assemble them.
So, I decided to write a short post exploring why web development is so convoluted. It seems there are few other areas of software development that cause as much frustration among those who work in them.
In reality, I would argue that web development is no more complex than modern video game development or mobile application development. Although there are plenty of important differences.
Contributors to complexity
The first reason why web development is so complex, and at the same time the most apparent one, is that web wasn't originally designed to meet the requirements it is now expected from. At first, it only needed to support text, but today it is possible to create full-blown applications and games inside of a browser.
Nobody anticipated in early 1990s that the Internet would be so ubiquitous in today's world. And it continues to evolve. That places enormous pressure on those who design web protocols and standards, and on those who develop libraries and APIs to conform to them. Not only must they keep up with the pace of new demands, but they also have to maintain backward compatibility. Everything is expected to work – even a website created in 1992 – because breaking things is not an option. Compare this to desktop or mobile apps: it is quite common for an old video game not to work on modern versions of Windows, and you certainly can't run a relatively recent game on Windows 98.
But I think there are far more significant contributors to web development complexity.
When you are building a web app, you are automatically dealing with building a distributed application by design. Any application that has its state spread across different nodes (and a user's browser is also a *node*) is a distributed system. And building them is a hard task full of consensus challenges and difficult decisions. That’s why even a small one-page app can become a nightmare to develop and maintain, despite how simple it may appear on the surface.
But the most crucial reason is that the web became the perfect medium for aggressive marketing, thanks to its social nature. Ads are everywhere today: on web pages as banners, in YouTube videos, and across the feeds of Instagram, Facebook, and X. They are often blended so natively that, at first glance, it can be hard for the unversed to even recognize them as advertisements. No other medium has been so diverse in its monetization techniques – not TV, not radio, not offline advertising.
This "social" feature is also what helped the web become so widespread. In fact, it has been so successful that we now see similar patterns in mobile apps (which are often just disguised web apps) and even in desktop applications.
I recently decided to replay Diablo 2. Quickly I discovered that there is a remaster version called Diablo 2 Resurrected. But to play it, I must create account on Battle.net (it is not an advertisement) and download their dedicated application to launch the game from it. There is no other (legal) way to play this game – an account is required.
My point is that this has actually contributed to the complexity we now see in the web development. Think about it: why would you need analytics or emails? To communicate with the users of the app. Emails and analytics are not inherent parts of a web app. The app would work just fine without sending emails or tracking user activity. In other words, they not inherent and essential for the app itself to work. You would do exactly the same with any other kind of application, if it needed to communicate with outer world.
Now that aggressive marketing has made its way into dev tools, that even smart people like Andrej are falling for it. Going back to his post, you could easily cut half, or even 2/3, of the items in the list he mentioned or just replace some of them with simpler alternatives.
You don’t need a cloud or PaaS to host an application; a VPS can do the job, and often do it better, giving you much more control.
You don't need CI/CD or, god forbid, Kubernetes. These tools are designed for teams of professional developers who need to ship on a daily basis without blocking or conflicting with each other. If you are working alone, CI/CD will likely slow you down rather than speed you up.
You probably don’t need to separate the backend and frontend either. It’s totally possible to start with full-stack frameworks (like Rails, which I discussed in one of my previous posts). Separation starts to make sense when you have separate teams working on each part.
Focusing on simplicity is incredibly difficult in today's noisy world, but it is possible, – and it should be the mission of every developer.


