Our stack Backend and devops

Here's a list of technologies that we prefer to use based on this scale:

Experimental - We're still playing around with this, and we feel very optimistic about it. Try it out!
Recommended - We'd use this hotness on all projects if we can!
Good - It's still a good choice, but consider better solutions for newer projects.
Sunsetting - We maintain projects with these, but don't start new projects with this anymore.
Avoid - Our poor experience with this tell us to stay away unless absolutely necessary.

Backend languages and frameworks

Almost every web application needs to have a backend system. Here are the usual choices for consideration.

Elixir & Phoenix

Fast, scalable, also optimized for developer happiness. As of 2017, Phoenix on Elixir has been our go-to framework for building web applications.

Ruby on Rails

Rails continues to be a popular choice for web frameworks due to its unparalleled ease-of-use. While we maintain a number of Rails-powered applications, do consider if Elixir's performance would be more suited for new projects.

Node.js

Node.js powers all our frontend tooling, but is not a preferred choice for backend systems.

API

GraphQL

Defines a common interface that's more reusable than REST. Use this if possible! Many new projects use GraphQL to facilitate communication between rich JavaScript-powered UI's and Elixir backends.

RESTful API

Still a pretty good choice. While RESTful API's aren't as expressive as GraphQL API's, they're more easily cached.

Database

PostgreSQL

PostgreSQL is widely-supported, and both AWS and Google Cloud offers managed instances of it. It features native support for JSON data, among many other useful features.

MySQL

Avoid MySQL unless absolutely necessary. Consider PostgreSQL instead, or at least MariaDB.

Infrastructure

Amazon Web Services

Many of our projects run on AWS infrastructure. It has been very dependable, despite having a high learning curve.

Google Cloud Compute

Solid, cheaper alternative to AWS. Has the best support (and least cost) for Kubernetes clusters.

Heroku

The easiest way to get things online. However, it can get expensive as you scale.

Provisioning

Ansible

We use Ansible to provision servers in a manageable and repeatable way.

Continuous integration

We use Continuous Integration services to automatically run test suites and automate staging deployments.

SemaphoreCI

Many of our projects are tested using SemaphoreCI. It offers us the best speed for Ruby and Elixir projects. Semaphore is also used to automate deployments.

CircleCI

CircleCI is a great CI/CD system that offers everything we need. It's also in wide use in Mashup Garage, alongside SemaphoreCI.