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.
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.
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.
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.
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.
Ansible
We use Ansible to provision servers in a manageable and repeatable way.
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.