Bowery.io can be described as the “GitHub for development environments”. They are a NYC-based startup that will host your entire dev environment in the cloud, so that you can share that environment with teammates without writing scripts or managing virtual machines. With Bowery new hires can just connect to Bowery and be writing code on their first day. Scrap the pages of often outdated documentation given to every engineer on their first day. We’re in the 21st century people! Everything is in the cloud! Why not our dev environments?!
Bowery doesn’t only help when on-boarding new team members though. Because Bowery runs your code against a remote copy of your production environment, you can also bypass version conflicts (oh, you upgraded to Python 3 without telling me?) and OS dependency issues (MUST he work on a Windows laptop?). As an engineering team scales these issues can get become a big time suck, but with Bowery you’re in the clear. Every update to your environment is automatically shared with everyone else. Just like we can’t imagine collaborating on projects without version control and GitHub, I predict that soon we won’t be able to imagine the days when we each manually copied and maintained our dev environments from machine to machine.
Now that I’ve got my initial excitement out of the way, I’ll go into some of the features of Bowery and conclude with my thoughts on the product.
Bowery is actually a desktop app (written in Go!). You download the app, extract the .zip file, and run the installer. Then you open Bowery and navigate to your project. This will start an instance, which is a replica of your dev environment, hosted in the cloud (Bowery securely stores instances in Google’s Compute Engine using Quay, so you don’t have to worry about security).
The basis of a Bowery environment is Ubuntu 14.04, which has Python pre-installed, so you can run “$ python -m SimpleHTTPServer” and then go to File > Open in Bowery to see your app, updated live as you make changes to source code. Nice.
If you’re opening a project whose dependencies have already been built, you’re good to go – just start coding! However if this is the first time you’re opening a project in Bowery, you’ll have to provision all of your dependencies. There are several ways to do this.
- Bash: if you have a script to build your dependencies, just run it inside Bowery and then save your environment (File > Save).
- Docker: probably the easiest option. If you have a DockerFile inside your application’s directory, Bowery will recognize this. When selecting a folder, Bowery will ask if you want to build your environment using Docker or get the clean Ubuntu install instead.
- Ansible: Bowery makes it easy to get your SSH port and password (File > Info), which you can give Ansible so it can connect to your instance.
- Chef/Puppet: if you have a Chef recipe or Puppet manifest, you’ll need to first install Chef/Puppet in your Bowery instance, and run the appropriate “chef-solo / puppet apply” command. Easy peezy.
The only major beef I have with Bowery (and why I wouldn’t be able to use it at my current employer) is that it seems to have limited CI integration support. While Bowery supports CircleCI if you’re using Docker for provisioning, I don’t see support for TeamCity, Travis, or Jenkins. This is a major bummer, and I hope the Bowery team is working on this.
Bowery also supports custom requests to host environments in AWS, Azure or Rackspace, and behind your own company’s firewall. They have a small team so to be honest I’m not sure bigger companies would feel comfortable handing over a big piece of their devops responsibility to such a tiny company.
Overall I think Bowery is a company with an exciting technology. They’re probably a good fit for newer/smaller companies that don’t have super-complex dev environments and/or custom needs. However as the company grows I’m sure they will be able to support larger and more difficult clients. Hosting dev environments in the cloud has a ton of benefits, and is definitely the direction we should be moving towards.
I’m looking forward to trying them out when I’m collaborating with a team on a hobby or open source project, and I’ll be recommending my entrepreneur friends and engineers at smaller companies to give them a look.