Do you think developing web applications could be easier? How about way way easier?
Almost 30 years after the world wide web has started, it is still not so easy to achieve basic functionality out of the box when using the web. You can’t easily implement file upload, optimize images, set up a content distribution yourself.
Plethora of SaaS companies provide services to achieve these basic functionality with 100M+ market caps, because there is no widely available stack that lets you do these things.
We use the term “full-stack” when referring to web developers. Why? Because there is no stack! You have to build it from scratch.
Contrast this to other platforms than the web. The Iphone, desktops, Android, all have their operating systems being developed for many, many years. Tremendous effort has been spent in building today’s functionality of operating systems.
The Web has evolved too, (browsers are much better, though off-topic) especially the wide availability of the cloud has emerged. With the Cloud, you can achieve everything in the world you could imagine and immensely powerful computers are available remotely if you need them, with clean and accessible programming interfaces.
However the cloud is still raw. The web and the cloud today is like you just invented hard disks, and can store files, but you haven’t invented the filesystem yet, let alone building the linux of the web, that is open source and widely available. The closest thing to Linux for the web is probably Wordpress, or NodeJS can be considered an OSKit, a kit that lets you build an OS.
Why an OS? You might say, why do we need one anyway? Well, an operating system is a huge utility. It handles all the underlying complexity while heavily “scaling” your computer resources at a local level - you can share disks, devices, have users, have security, organize data in files and folders. An OS does a huge amount of work for you while not getting in the way, e.g. you use it but you can’t easily see it. You see the applications using it.
The web is not there yet. You build your application stack from “scratch”. We see this problem all the time. Entrepreneur wants to build a “marketplace” he/she needs to spend $100K just to get started. Building a scalable backend is the work of experts and not recommended for starting out. Of course, why would you build an operating system if you are trying to validate an “app” that you are trying to get off the ground?
While I believe today this seems normal, maybe a generation later there will be some middleware stack that glues everything to all the biggest / most important SaaS and the cloud services, that people will think how did we do things without it before.
Another example is Facebook and any app that has achieved and grew in scale.
Facebook is hard to fight against, and one reason is Facebook has their operating system worked out. It is centralized, it is proprietary, and it is pay-per-use (pay with your data). When you are starting out you are in a much disadvantage because you don’t have your operating system.
The web is interesting, because of all platforms, it is the most powerful one. It connects everyone in the world. IMO due to the lack of an operating system, it still hasn’t lived up to its full potential. I feel like we are still at the early stages of realizing the full potential of the web, in terms of the number of applications and companies that can be started using it.
Why am I writing this, and how did I come to this conclusion? A few months ago, I started a SaaS builder project that lets people build web applications from scratch. I first implement a resource, and then make it shareable across all the users.
In order to achieve shareability of resources and features I had to implement a number of never-tried-before hacks in ExpressJS and the way I use some NodeJS libraries.
The interesting part is, what I built started to look a lot like an operating system. There is user login, there are roles, there are frontend designs, there are files, there are abstractions for AWS services, and so on, that all users can have access to and use.
The purpose of it is not building a personal OS on the web, mimicing OSes we use for personal or work purposes today. I don’t think that is a good idea, because you already have a personal OS right next to you as your phone or desktop.
The purpose of SaaSBox is to make it easy to build applications and services that run on the web. Create easy-to-use tools and abstractions so that people don’t have to build their backend from scratch, or learn the quirks of a cloud service the same way you are learning how to program a storage disk controller!
I want to share a few resemblances to an operating system kernel that I am building in this ExpressJS based application.
In the linux kernel, you have a special process pointer called “current”. It points at the current process data in the kernel. Based on the domain you are visiting from and the visitor, SaaSBox treats your application the same way. There is a “thisApp” pointer that handles data for the current application.
The web request / response model is surprisingly (or maybe not surprisingly, the world uses the same patterns) similar to the way you would make a system call. You start a system call, for a particular process, and return a result, the same way you return a response in the web application.
What I love about ExpressJS and NodeJS though, is that you don’t need locks, you don’t have concurrency bugs, the promise model is a very easy to use and elegant solution.
Anyway, I was meant to write more, but if you are curious and want to try out SaaSBox I’d love to have your feedback and hear what you have built or started with it.