Hey everyone, I'm a full-stack dev and I've been wanting to build a tool to build backends for front-end and full-stack devs that aren't 100% familiar with the nitty-gritty of cloud development (or don't want to bother). Since yall would be great first users I'd like to float out my design goals and mocks to see if you're interested before I hack away:
--Design goals
Follow in Rails' footsteps whenever possible (https://rubyonrails.org/doctrine/). Users should be able to get something working quickly without much fuss leaning on convention.
Lean into front-end development techniques/technologies. EX: Typescript/Statelessness/Event-driven.
Abstract over infrastructure: the user should just bring code. Users without cloud knowledge should be proficient. This is the delta from existing tools like Serverless Framework and Apex. Those tools require users to know things like what APIGateway is and how it works; this tool would just have some "Http" library that uses APIGateway under the hood with sensible configuration.
Have a strong open source extensibility story. The tool and its libraries should be 100% open source.
Be opinionated about the backend but UNopinionated about the front-end. Users should be able to bring their frontend of choice. As a side note: building the frontend is out of scope; devs already know how to do this. Hosting the frontend (optimally!) is in scope.
Target developers; expect basic JS proficiency and allow for JS experts to leverage their skills.
--Implementation
Here's what I've been thinking and working on a prototype towards:
Users build their business logic and data transformations in JS/TS functions, then the user writes code in the framework that wires the functions together. Mock code examples:
//execute a bespoke database query inside getUsers
Http { method: "get", path: "/users" } => "./getUsers.js"
//Let users write their own event libraries
include "UserRegistration"
//Let users include 3rd party event libraries and "services"
include "Gmail"
UserRegistration.newUser -> "./sendUserEmail.js"
The framework could be another language that sits in configuration files outside your project, native to JS/TS, or a visual programming environment. Not sure which is better right now.
--Outstanding questions
A) Databases, how do they work?
B) Interop with existing backends?
C) Interop with existing tools (docker/terraform/cf/serverless framework)?
D) Operations...
E) I've thought about making this low-code and adding a visual programming environment on top so that less technical people can use it--not sure if this is a good idea.
Thanks for the feedback!
#tech-questions
Easiest way to get started is to look at the closest available options currently out there. I'd say that Firebase functions, Zeit Now, and perhaps Netlify are the easiest ways to build out a backend with serverless functions (using docker/terraform would probably be a lot more work for you to set up). Might require a bit more homework, though. I'm sure there are others (Flynn?); not too sure lol.
The above options don't afford you to connect with Databases easily (Firebase does help with tutorials that include Firestore calls; plus it's configuration system is pretty decent). There's space to make these tools easier to use, or to make a competing tool that defines more of the convention than these do.