Building A Minimalist SaaS Platform

In the previous Spotlight, I wrote about the various aspects that make Go an ideal language for building minimalist software;that is, software that only contains code for doing the things at hand, no needless layers of abstractions, no “we might need this in the future” features. In short, the very opposite of FizzBuzz Enterprise Edition.

I decided to start building an application that incorporate minimalist principles: a platform for building software as a service. Not a full-blown, production-ready SaaS app; just the bare minimum that can serve as a basis to add a real app on top. Yet, I want to include enough pieces to make it useful out of the box.

Certainly, most of you are now like, “been there, done that.” I feel you: my plan may sound like Yet Another Beginner's Project. But before you zap to another channel, remember that the best advice for getting great at one's profession is to never get bored with the basics. And it's always nice to have a detour from the daily grind of building Mega Corp apps with customer-requested feature bloat, isn't it.

As mentioned before, the project I'm starting will not turn into production-ready code. Instead, the goal is to explore the fundamental principles and building blocks of a SaaS app. Equipped with this knowledge, writing your own SaaS platform, as well as evaluating existing solutions for your purpose, becomes much easier.

So here's the plan: I'll start from the classic cliché “basic web server with net/http”…

package main

import (
    "fmt"
    "log"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, Gophers!")
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

…and add functionality piece by piece, such as:

  • A minimal frontend
  • Middleware
  • Security
  • Deployment
  • A database
  • User management
  • Payment integration

and so forth.

I'm curious where this journey goes, and you're invited to follow along. Stay tuned!