Tools for AWS Pros

  • Nginx serves as the loadbalancer, router and SSL terminator of As one of our app server nodes is spun up, an Ansible orchestration script adds the new node dynamically to the nginx loadbalancer config which is then reloaded for a zero downtime seamless rolling deployment. By putting nginx in front or whatever web and API servers you might have, you gain a ton of flexibility. While previously I've cobbled together HAProxy and Stun as a poor man's loadbalancer, nginx just does a much better job and is far simpler in the long run.

  • JavaScript gets a bad rep, quite undeservedly so in my opinion. Today, JS is closer to functional languages than to the traditional-OO languages, and when used as such provides a great development experience. The pace of development is just picking up with transpilers like Babel making future advanced language features available to the masses today. At, we write 100% of both the front-end (with React) and the backend (with Node.js) in Javascript, using the latest ES6 and even some ES7 features. This is not your grandfather's Javascript!

  • Web-frontend programming prior to React: like banging rocks together. With React: Like wearing fusion powered underwear. Gives you a nice warm feeling. Using React for allowed us to create a beautiful UI in record time (1 month start to launch), with virtually no bugs popping up during development. The functional approach to just rendering your component given a state just makes so much sense, with React figuring out the delta between your current and desired representation. It's the future kids!

  • Material UI provides with a clean, professional looking and very easy to use set of UI components build with React. The few issues we've reported to the developers have been quickly fixed each time. I highly recommend using Material UI for both consumer and enterprise web apps. The styling system in particular is very nice to work with, and allows you to easily add your own brand's look and feel throughout the UI.

  • PostgreSQL combines the best aspects of traditional SQL databases such as reliability, consistent performance, transactions, querying power, etc. with the flexibility of schemaless noSQL systems that are all the rage these days. Through the powerful JSON column types and indexes, you can now have your cake and eat it too! PostgreSQL may seem a bit arcane and old fashioned at first, but the developers have clearly shown that they understand databases and the storage trends better than almost anyone else. It definitely deserves to be part of everyone's toolbox; when you find yourself needing rock solid performance, operational simplicity and reliability, reach for PostgresQL.

  • Redis is used for storing all ephemeral (that's data you don't necessarily want to store permanently) user data, such as mapping of session IDs (stored in cookies) to current session variables at The many datastructures supported by Redis also makes it an excellent caching and realtime statistics layer. It doesn't hurt that the author, Antirez, is the nicest guy ever! These days, I would be really hard pressed to find any situation where I would pick something like Memcached over Redis.

  • Ansible is the deployment tool for people who don't like deployment tools. It's close to scripting, doesn't pollute your servers with agents or centralized servers, and just makes immediate sense. The entire stack at is orchestrated by Ansible. What does that mean? Beyond the obvious of installing packages and configuring services, Ansible coordinates all the machines into a working deployment: It adds API servers to the loadbancer pool, opens ports on the DB server for the backend servers to connect, gracefully upgrades services in a rolling fashion for zero-downtime deployments etc. And it's so easy to use, it's easier to use than doing things by hand, meaning it's a deployment tool you'll actually use every time!

  • WebStorm is the best IDE hands-down for JavaScript developers. Yes, there's more lightweight editors (and nothing beats vim when debugging remotely), but the sheer productivity of WebStorm is unparalleled. React/JSX support? Check. ES2015 support? You bet. Node.js profiling? Yes! Look, if you can't rename a class or variable reliably across a JavaScript project, follow references, debug (without console logs) your editor sucks. Don't use a editor that sucks, use WebStorm!

  • Express.js is the workhorse of the backend. It's not the most exciting part of a stack, but it works, is very well documented, and you can find a plugin for almost everything you could possibly want. We also carefully evaluated Koa.js, but decided not to go down this route: fewer plugins, less documentation & answers online. I'm also not personally convinced by the generators yield syntax at all. ES7 async functions looks like a much better bet, and with Promises and Babel I can have that already today.

  • Babel is awesome! 100% of the code for is transpiled from ES2015 (even some ES7 extensions, like decorators and class properties!), using Gulp+Browserify for the frontend and on-the-fly translation in the Node.js backend. Babel allows us to use all the features of future JS, today, giving us a efficient and clean codebase. Overall, it has been an exceptionally smooth adoption, everything Just Works(tm), including debugging with source maps, etc.

  • Gulp is used as the build system for with a lot of custom targets: vendoring dependencies, transpiling ES2015 to Ecmascript5 (with Babel), incremental compilation of multiple watched modules, minification, creation of app distribution packages etc. Having previously used Grunt, I've come to greatly prefer Gulp due to the ability to easily write my own tasks using plain JS without necessarily relying on plugins for everything.

Verified by

Stack Match