Not too long ago, Sean Grove, a Hacker News and #startups member, showed me his latest project, Bushido. It blew me away so much that I ended up advising him to not show it to anyone. But I'll write another article about that some other time. Today, I want to talk about Bushido itself, because it's an awesome project that deserves the attention.
Whenever I pick up or want to adapt any kind of new Rails project, a painful question comes up eventually: where will I deploy this new thing? I already have well-documented and practiced setup documentation, to take a standard Debian install, secure it, set up the right users and SSH keys, set up the database, install the right version of Ruby and Rails, setup capistrano, setup the backup system, and so on. But even so, it typically takes at least a few hours and is really tedious work. Not only that, but once set up, a server requires constant maintenance and occasional monitoring. Oh, and it costs money, too.
I think I spent several weeks hesitating about where to host swombat.com, before I launched it, and then a good half-day setting it up.
When I got started building Rails apps, I didn't have my documentation, so it was even more difficult. That's true for any new developer, of which there are many every year, and it's permanently true for all those people out there who are not developers at all. So I think it's fair to say that even with all the hosts and tools out there to address it, hosting and deployment are still a major pain for many.
A few years ago, Heroku came out, and it solved some of that pain for those willing to put in the money. Heroku has since blossomed into a solid platform for deploying both toy apps and more solid enterprise-class applications, which is why it was recently acquired by Salesforce. But even Heroku doesn't go far enough, in my opinion, by still requiring the user to even think about hosting. Heroku is great for solving the problem for developers building their own apps, but as this tutorial shows, setting up a complex app (that isn't specifically designed with Heroku in mind) can still be lengthy and tedious.
In an age where AWS, Capistrano, Chef, and other automated deployment and scaling technologies are commonplace, it makes sense that there should be a different, simpler way to deploy apps, than having to worry about what your S3 key is or where your SMTP server is located - particularly when the components are required by an app which is not under your control, and which you don't know very well.
The first video I saw of Bushido showed Sean browsing around a LocomotiveCMS Git repository which contained an extra file: bushido.json. Sean then clicked on a "deploy" button (artfully added into Github, probably by a Greasemonkey script) and within about a minute, a new server was provisioned, set up, and the app was deployed and running. The JSON file was ridiculously simple, something you could write in one minute.
Aaaah!, I thought, this is how hosting should work!
And this is really the genius of Bushido. It takes the next step towards the future of hosting: getting rid of the need for any server setup whatsoever. You no longer run command line steps to set up the server. Instead, the application simply declares what it needs, and Bushido figures everything out. Like all the best technologies, it looks like magic.
What the magic actually does is to take a very simple deployment descriptor and turn that into a full AWS-backed setup with database, background workers, backups, mongo-db, and whatever else you need. It does all this automatically and with no supervision other than the optional gaze of wonder at the rapidly-filling progress bar.
I guess some of you would like to see that video. Here's the link. Go and watch it. I'll wait.
New possibilities for SaaS
One of the key consequences of this is that it makes a completely new kind of usage pattern possible, in effect turning the SaaS model on its head: instead of the SaaS provider setting up a server and doing all the sys-admin for you in exchange for a fee, now open-source projects which were never set up for SaaS can offer similar functionality. "Click this button, and you'll have your very own hassle-free installation of Redmine/Tracks/Typo/etc" (there are many apps supported, more on the way, and it's easy, if you're a developer, to add support to an existing app).
This could really change the game in software-as-a-service, by making free software much more directly competitive with other, hosted solutions. Some will come up as more expensive than a SaaS equivalent (I'm told the lowest tier of pricing will be in the low tens of dollars per month), but the ability to make your own code changes and tweaks may well outweigh the costs even for the more cost-conscious geeks. And, of course, there's the feeling of using something that feels like magic. You can't beat that.
In the future, of course, there's no reason why only Open-Source apps can be hosted on Bushido. As I mentioned earlier, the bushido.json file is ridiculously simple. I've had a busy last few weeks (the slightly erratic posting schedule recently should attest to that), so I haven't gotten round to it yet, but I'll be moving swombat.com onto Bushido in the near future, and will announce that when it's done. And for any small and/or open-source apps that I deploy from now on, Bushido is my first option (which I will happily pay for to avoid having to spend hours setting up and maintaining servers!).
Bushido is magic. If you've ever had any hassle setting up hosts to deploy apps, whether your own or open source ones, you should definitely check it out. Sign up for the beta and enjoy tomorrow's technology today.
And even if you don't think it's very useful to you right now, you should keep an eye on it.
If you read this far, you should follow me on twitter here.