Towards a better Serverless
I used to work at Google Cloud, I also worked on a Functions-as-service (FaaS) product (Firebase Functions). I have seen that customers kept complaining about the same things:
- Deploy times are too long
- Cold starts are too frequent
- FaaS is hard to debug/mock
I then went on to work as Cloud consultant for all three major clouds, I also heard customers complain about the Cloud in general, particuarly
- The unlimited risk of a big bill from Cloud providers.
- The opaqueness of operation
As a consumer of digital services. I have have been outraged by
- ISPs selling my data
- Apps selling my data
- A complete lack of transparency on what happens on the other side of the API boundary
Now I have decided to stop working, and rebuild the Cloud in a way that we have all wanted, but that the Big Clouds have chosen not to act upon.
First to improve the developer experience of Serverless
- Browser based developed hosted on Observable.
- No deployments, code is dynamically fetched instead
Cold starts are reduced because the runtime is multi tenancy so everybody shares the same worker pool, its like a fat lambda architecture taken to the multi-tenancy level.
Because Observable is really a front end development environment, and the backend is a browser too, its truly trivial for the first time to share front end and backend code.
It takes about 30 seconds to deploy an endpoint as a result:-
Note this is not “low code”. This is real programming with Javascript, just without native tooling requirements. You can find the quick start here.
In addition to the increased ergonomics of development, I want to innovate on privacy and billing.
Because the runtime only executes public source code, end users can audit code before sending data to an endpoint. I hope this will help hold companies accountable for how they process data. Observable itself writes the version history of notebooks, so you can look back in time and see what code what running when for a given endpoint. Always auditable code. I am trying to extend open source to the server.
Finally I want to encourage open source developers to create software.
- Billing can be payed upfront to remove the risk of large bills for individuals
- When a consumer imports a function into another notebook, this actually redeploys the function to the new host, and therefore gets billed to the consumer notebook. It is the consumer of a library, not the library author, that pays for infrastructure. This will hopefully remove a financial penalty for writing popular open source serverside services.
Observable itself has many nice features to support open source development. All notebooks can be forked, comment on and imported as ES6 modules.
I am just a solo developer, so I need to work smart and lean on what is available. I am not hosting infrastructure, its all really just a wrapper around Google Cloud Run and Firebase. By reusing other cloud infrastructure, I can provide console access to existing production ready features like Google Cloud Monitoring.
Happy hacking, here is to a more open and transparent cloud. Checkout the growing range of services here https://observablehq.com/collection/@endpointservices/services