Saturday, February 7, 2015

StarterKit - automated development environment

I've been working at Base for 439 days. That's one year, two months, and two weeks of very intensive work.

I joined in 2013 to give life to a newly formed team of Python developers, effectively introducing a new piece to our existing infrastructure, previously Ruby-based. By the way, we're hiring.

Since then we've completed a few projects and keep working on end user productivity in our product. That's pretty exciting as we're at the core of our mission of helping sales teams become 10x more productive.

High productivity is not restricted to sales people. We, as software developers, rely on productivity-boosting tools as well. How can we ship quality code fast? Sure there're a bunch of things to it, but today I'll focus on having a good development environment. We call ours "StarterKit".

Getting Base up and running requires starting tens of services written in multiple languages, frameworks, with all kinds of dependencies, so it asks for a good deal of orchestration to get it all right. 

Our most recent and best attempt to automate it all started with Mirek and Gabriel, who sat together to build StarterKit, further improved by them and several other Base developers. StarterKit is very specific to Base and our internal needs, but the tools we use to build it are open source and you can leverage them to build something that fits your needs.

StarterKit is a Vagrant virtual machine combined with Ansible playbooks to setup a working environment to run Base services in isolation of your development environment that you might be running on your host (editor, vim config, etc).

That means you get a ready-to-use Linux virtual machine, with nginx, Docker and Docker images for MySQL, Elasticsearch, RabbitMQ, etc. You'll have everything pre-configured and with the latest versions of daily used tools.

Each web service that empowers Base runs in a Docker container inside the aforementioned virtual machine. Docker is such a cool tool that deserves a separate post.

In essence, StarterKit aims at making the process of setting up a new web development machine as painless and simple as possible. So what tools do you use to automate your development environment?

No comments: