I started my new project Fullstack Frontend to help frontend devs to go fullstack without in-depth knowledge of backend development.
My opinion is not that backend devs became obsolte, it's just that more and more backend things are now simpler and available for frontend devs. (Severless, hint, hint!)
But I think, I have to start from the beginning to motivate this idea.
So in this article, I will explain what led me to start the Fullstack Frontend project and why you, a frontend dev, might need a backend.
If you think I forgot something important or have a different opinion on some of these points, I'm eager to know! So comment away!
If you aren't interested in my motivation and just want to read about reasons you need a backend, you can skip the next part! :D
When I started doing Web development in 2006, my main job was to build simple homepages and online shops. Not everyone could do this, and I made good money with it.
Over the years, it got easier to build such software, even for non-technical folk. Frontend technology evolved into something available to people who would have needed a CS degree before.
This let the hourly rates for basic web development drop drastically, and devs had to find something else to do, which wasn't that easy and in demand.
Luckily, the wheels of time don't stand still, and other opportunities showed up. Mobile development was a new path to choose, and many desktop apps also were reimplemented as SaaS solutions. Things that were impossible or very hard for the average dev slid into the realm of possibility and demand for their skills were save.
Every part of the stack evolved in these years, also the backend.
The Cloud also became significant. First, we had to buy servers and wait for weeks to get them. IT people had to be paid to put the servers into the racks.
Then we were able to rent them. Which cut the costs and time to a new system.
I can fondly remember the first time I used VMWare in 2001, a virtual server? That was crazy talk!
With that technology, cloud providers were able to supply us with new servers with just a few minute's notice. If you choose a managed server, they would even use their own IT staff to maintain it!
Infrastructure as Code came along, and the DevOps movement let the devs pour into IT like nobodies business.
Now we have serverless. A term that describes managed cloud technology that can be paid on-demand and scales effortlessly.
I think this is the next significant shift. Some things will become easier for non-tech people to do, so no dev needed anymore.
The free capacity on the frontend and the simplification through serverless leads to some backend tasks moving to the frontend.
In the end, backend devs get more time to do other things. Building highly specialized platforms or maybe integrating more technology like AI or such.
After all the talk, why do you need it, the backend? Can't we just build stand-alone frontends? After tall, the lower the latency, the happier the user!
Well, there are multiple reasons.
- Central Data Access
- Privacy & Security
- Resource Constraints
- Cost Distribution
The most obvious reason for a backend is hosting.
If you build a HTML based web app, you need some way to host it, so your users can access it in the end.
If you build a native app for a mobile or desktop system, you can get away without hosting. Back in the days such applications were distributed by DVD, CD, and even floppy disks, via real stores, haha.
In today's world, many people use many devices. They have a desktop, laptop, tablet, smartphone, smartwatch, smartTV, game console, etc.
Even if they don't like the idea of social media or online communication with other people, at least they need a way to share information with themselves. Carrying USB sticks around isn't very convenient.
You need a way to facilitate that shareability, and a backend simplifies that process.
I think peer to peer tech will get much easier to handle too. As the devices get better performance and internet connections to get faster, p2p-tech will eat many backend use-cases for breakfast.
If information is shared over a network, it can help to have a backend in the middle that protects the user from each other.
Something that is tended to by a professional, so consumers don't have to learn much before using it.
It can also help to protect your company. If you have one place of entry, you can keep track of who enters. You can lock-down your essential assets, be it content or algorithms, so only people who paid for it can use it.
Often your systems aren't stand alone. You want to integrate some of the vast numbers of APIs on the internet. Problem is, if they don't allow CORS access, you can't access them directly from within a browser, so you need to route the access through some kind of backend.
In the wake of the JAMSTack, many API/SaaS providers provide CORS access, so you can use their services directly from the client, but it's still some way to go before this is the case for all offerings.
Facebook, GitHub, LinkedIn, Twiter, etc. all these platforms can help to ease user onboarding for your app. If you integrate sharing capabilities, it even helps to spread the word about your app.
Payments are also an important part. Somehow the bank of your customer and your own bank have to find out that you get money. While cryptocurrencies are an exciting peer to peer way to solve this problem, most users don't use them yet, so some kind of backend has to be involved in the transaction.
Often a new app is simply just a new GUI for an old platform. With these legacy systems chances are high they don't allow for direct browser access, so you have to go through a custom backend to get the data in and out.
Most people around the world use smartphones to access the internet, and for most of them, a high end 1000€ iPhone Pro Plus Extra III isn't an option.
A smartphone can't store the entirety of Wikipedia or Netflix. It is also to slow to train highly sophisticated neuronal networks, and many can't run a machine learning model locally.
Doing peer to peer streaming with hundreds or thousands of viewers will also kill most internet connections.
If you want to deliver high tech services with enormous amounts of data or very high computing or I/O requirements, a backend that provides the resources to do so, is the only option.
Like with all of humanity's inventions, it's a race to the bottom when it comes to costs. You don't want to own a farm if you just need a bunch of potatoes a week.
A backend lets users distribute the costs of specific tasks between them. Everybody could do everything locally on their device and pay the costs of those tasks. Still, they could also do it once at a central backend and get the results from there.
While there are many reasons you need a backend, there are also reasons you don't need one.
Many tools and games work without an internet connection and the features that need a backend are only additions, but not central to their core purpose.
If you build software to use free of charge, it could be that you don't want to pay for a backend, so you implement the app in a way that it just has to be installed and never has to talk to the internet again.
Privacy and security is a huge point here too.
An app that doesn't talk over the network doesn't need extra mechanisms to protect its users. The safest computer is the one that doesn't have an internet connection, haha.
In the future, when peer to peer systems finally get ready for the masses, it could very well be that all use-cases I mentioned here are gone too and your app will talk with other "clients" over the network without a backend at all, "real" serverless so to say.
Anyway, what do you think about backends?