April 16, 2020
I’m building a project called Rafter.
It’s a container-based serverless hosting platform powered by Google Cloud Run. It caters to full-stack frameworks like Laravel, Rails, and WordPress — but it can host anything that fits in a container.
I plan to write a lot about the technical aspects of this service. But first, I wanted to step back and talk about why I’m building this at all.
Here’s a set of four core beliefs that are driving this product:
If you’re building a product or webiste, developer time spent on building the actual product is much better than developer time spent on tooling, debugging Dockerfiles, configuring Helm charts or inspecting Kubernetes ReplicaSets.
I’ve seen far too many developers attempt to solve a simple issue in a codebase only to be blocked by a day of Docker troubleshooting.
As a developer, you shouldn’t have to know a thing about Docker to deploy your app.
Microservices and static-generated JAMStack applications are all the rage. They play a great role in the future of our industry, and they are super powerful. But full-stack frameworks like Laravel and Rails are still valued and used by many products. It’s hard to beat built-in request lifecycles, authentication, middleware, queues, filesystem interaction, and email handling.
These applications deserve to be deployed and scaled as seemlessly as their microservice and JAMStack counterparts.
This is pretty simple. The technology exists. You can find numerous JAMStack-like services with a generous free tier. Container-based serverless options — more likely to support full-stack frameworks — are just starting to offer scale-to-zero features along with those free tiers.
We as developers shouldn’t have to waste any more money paying for a \$5/mo VPS, hosting side projects nobody ever visits.
I can’t tell you how many times I’ve abandoned a product because of poor DX or UX. If a product is not well-designed — or if it’s clear a developer cobbled it together without thinking of how it would be used — it’s likely not going to be a great experience in the long run. This is why I’ve avoided using AWS for so long and been attracted to Google Cloud Platform’s more useful dashboards and documentation. DX should be at the forefront of every new tool and API we build.
In February 2019, I wrote a blog post called My Dream Side Project.
But a lot has happened since then.
In April 2019, Google announced Cloud Run, their container-based serverless platform built on Knative.
And in July 2019, Taylor Otwell introduced Laravel Vapor, which is the exact type of serverless platform I’d envisioned building for Laravel PHP apps, though this was hosted on AWS and powered by Lambdas.
It seems like I’m not the only one who wanted this sort of thing to exist!
I started building Barkpass in 2019 with my wife, and this is what really drove the spark to create a new platform for serverless deployments on Google Cloud Run. While I still haven’t made the transition (I’m paying monthly for a VPS on DigitalOcean), it’s truly what got Rafter’s wheels turning.
Since I wrote that blog post more than a year ago, I’ve been doing a lot of thinking.
Thinking while mowing the lawn …while vacuuming the house …while walking the dogs …while lying in bed.
While I tend to get down on myself when I haven’t actively created something, I need to give myself more credit: I’ve been putting a lot of time into thinking about solutions for this problem!
But up to the beginning of this year, I hadn’t sat down to create anything out of that thinking.
That all changed in January 2020.
Fueled by a new sense of focus in a sleep-deprived state, I started building Rafter right when I became a new dad. This is a silly idea — I wouldn’t recommend all new software projects start this way. But I enjoyed being able to knock out 20 minutes of writing code and then switching back to dad mode.
Feeding my son a bottle or rocking him to sleep gave me just enough time to think about my next coding move. And had I not been pressed for time, I probably wouldn’t have been as productive.
The actual app is not yet in a working state, nor is it ready for alpha/beta testers. Soon though, I hope.
I’ve built quite a few side projects in my decade as a professional software engineer. I’ve learned that most things don’t take off, and I set my expectations accordingly.
I’ve also fallen into the trap of building something I think people will be into, but something I’m not actively using myself. This becomes an issue when I lose interest six months later, but other people are actively using it. Sorry, Lifeboat.
So my goals for this are outlined as such:
I have anti-goals, too:
I’m planning to write about my inspirations, how the darn thing works, unstructured journals/logs about the building process, and lots of other learnings. Hope you enjoy the ride as much as I do!