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.
- 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.
- 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.
- 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
- JIRA: Tickets, epics, sprints. General agile stuff.
- Ansible: We use Kubernetes to manage the deployment and scaling of containerized applications. We also employ Ansible for provisioning and deployment of some legacy systems.
- Ubuntu: Our servers run Ubuntu. Many of our devs run it locally as well, although many prefer Macs.
- GitLab: For continuous integration and continuous delivery of our software, we turn to GitLab. We also use GitLab for code reviews, which you get very good at here. Because there are a lot of them.
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!