When conducting an interview for the EnergySavvy engineering team, the question we hear most frequently is “Where’s your bathroom?” But the second-most-frequent question has got to be “What’s your stack?” We experiment with new tools, but we also keep a shared set of favorites—standbys that we’re familiar with. Below we’ve assembled a snapshot of the tools devs reach for most often to power EnergySavvy’s solutions.

Back-end

  • Python: All of our back-end software and services are written in Python. We’re currently making the transition from Python 2 to 3.

  • Flask: For building microservices, our preferred microframework is Flask. You could almost say it follows a “batteries not included” philosophy, which makes it particularly well-suited for simple services.

  • Django: For everything else, there’s Django. It follows more of a “batteries, and most everything else, included” philosophy.

  • Voluptuous: When not using Django’s built-in form validation, we use Voluptuous to validate data coming into Python as JSON, YAML, etc.

  • Tox: Whether running tests in dev or continuous integration, we want to create test environments in a reproducible manner. That’s where Tox comes in.

  • Mock: We write a lot of automated tests at EnergySavvy. That sometimes requires mocking things out. Fortunately the Python standard library provides Mock for just such a purpose.

  • SQLAlchemy Core: For cases where we need to talk to a relational database but aren’t using Django’s ORM, there’s SQLAlchemy.

  • PostgreSQL: We use Postgres for traditional relational persistence needs.

  • ElasticSearch: As a secondary data store for searching and filtering, ElasticSearch works great.

Front-end

  • Babel: We transpile our ES2015 JavaScript, the language formerly known as ES6.

  • React: All the cool kids are using React. We use it because it lets us very expressively create modern web UI in declarative, reusable ways.

  • Redux: We often need a little state management when doing React.

  • Jasmine: Some companies use Mocha. We find that Jasmine’s assertions are less magical.

  • webpack: At build time, we bundle up our JavaScript with webpack.

  • Sass: Billed as “CSS with superpowers”.

  • lodash: When needed. ES2015 provides a lot of nice functionality, which means that often, You Might Not Need lodash™.

Infrastructure and Tooling

  • Mercurial: Some say Mercurial is the Betamax of the distributed version control world. To that, we say: abort: push creates new remote heads! We actually like Mercurial’s command-line UI and branching model versus other options like git.

  • Review Board: You get very good at code reviews at EnergySavvy. Because there are a lot of them.

  • JIRA: Tickets, epics, sprints. General agile stuff.

  • Bamboo: This is where we do continuous integration and build deployable artifacts of our software for continuous delivery.

  • Ansible: We employ Ansible for both provisioning and deployment.

  • Ubuntu: Our servers run Ubuntu. Many of our devs run it locally as well, although many prefer Macs.

Hopefully that gives you a better picture of the stack we use at EnergySavvy. Note that our set of technologies does change and evolve over time. We try to keep our minds open to new components, evaluating each contender in light of our current needs. And we try to avoid adopting something just because it’s new or shiny. In fact, we have an informal process for evaluating and adopting new parts of our stack – a post for another time!