← Back to context

Comment by dabeeeenster

5 days ago

The market for an on-premise, developer maintained solution is way bigger for a product like this than the cloud version.

We made the exact same, incorrect assumption with https://github.com/Flagsmith/flagsmith several years ago. The market for data sensitive on-premise delpoyments is a LOT bigger than most people would imagine.

For Flagsmith, the majority of our revenue comes from on-premise deployments.

"The market for an on-premise, developer maintained solution..."

This made me laugh because at work we've been joking, "We've finished moving to the cloud! What now? We must get out of the cloud!"

Wholeheartedly agree. On-prem is still a major market to play in and have worked on many consulting engagements architecting software that plays nicely. Just curious - how do you guys deploy Flagsmith on-prem? I'm still trying to find a nice deployment pattern that aligns well with both client and vendor.

  • From one deploying stuff on prem:

    Absolute best scenario is single binary with embedded static files (Go is very good at that) that just takes config and/or CLI options (preferably both if it isn't too complex of a config) and works. Or static file that just needs to be pointed at database with certain version

    It can be easily run on VM, it can be easily made with container, it can be easily made into package, or ran in cloud with cloud DB service. All those options are a plus, but the fact it is a single binary makes it easier to make a package or container out of it and deliver that to customers.

    Second best is .deb package that deploys a single service or a container that just exposes a port and that's it.

    DB-wise there is a temptation to provide a bunch of containers that have all of app's dependencies (DB etc.) but that's a LOT of work on both side. On supplier side you have ton of stuff you need to take care of, providing method to do consistent backups, caring about log rotation, handling service restarts if something fails etc. and lastly procedures to recover it from the backup

    And on client side they can't just do same database backup they do for every single other database they know, they have to take app's custom way of backing up and integrate it, or just "copy whole container and hope for best".

    It can be worth it, if your setup is complex enough that asking client to install those dependencies would be a big obstacle (and especially if you need to use different versions than available under Debian/Ubuntu stable), but if you are just deploying container with app and plain PostgreSQL db without using anything special that would need latest version, just let user ship their own DB.

    Also supporting "small" deployment with just SQLite backend is great for demoing stuff to management