Insights from the Rainforest QA engineering team.

Three Ways to Draw Pie Charts without any JavaScript
In this post, we share three different approaches to drawing pie charts using only HTML and CSS.
The engineering hiring process at Rainforest QA
Here's the exact hiring process we use to evaluate candidates for the engineering team here at Rainforest QA.
Hunting a race condition in the Android 10 Emulator
Discrete optimization for on-call scheduling
A deep dive into macOS TCC.db
Selecting a finite state machine library for React
Upgrading our SaaS application to Rails 6
Shipping faster with CircleCI pipelines and the Rainforest Orb
Replacing Recompose with React Hooks
We recently made the decision to remove Recompose entirely – which was a large endeavor. It touched over 200 files, and in some places was deeply coupled to core functionality of our app.This post covers why we decided to replace Recompose.
How to remove Recompose and replace with Hooks
In our last post, we explored the pros and cons of Recompose and why we decided to remove it from our codebase. This post includes the strategy we used to approach the large task of implementing that refactor.
How We Moved from Heroku to Google Kubernetes Engine
Rainforest migrated from Heroku to Google Kubernetes Engine. Here's what that process looked like, the challenges we faced, and how we overcame them.
Why We Moved from Heroku to Google Kubernetes Engine
Here's how Rainforest QA made the decision to upgrade our DevOps teck stack and move from Heroku to Google Cloud Platform (GCP) and Google Kubernetes Engine (GKE).
How to Estimate a Project Timeline
In this post we explore how to develop a project timeline and some general best practices for smoother project management.
5 Foolish Reasons You're Not Using Heroku
We’ve been using Heroku extensively at Rainforest QA since early 2012 to run our automated QA testing service. It’s stable, it makes economic sense, and it precisely suits our needs. Here are the main arguments I hear against Heroku, and why I think they are (mostly) fallacious.
Test your JavaScript with Jasmine part 2
I am going to show you a few more things that will make you more efficient at using Jasmine to test your JavaScript.
Optimal Environment Setup
In this post we're going to look at optimal environments for webapps. This is part two in a series - the first post looks at what are environments for?
Test your JavaScript with Jasmine part 1
In this post I'll show you how to test some basic JS code with Jasmine.
Zero downtime database migrations
In this post we explain the basics of how to handle database migrations properly and show some real world examples. Learn how to achieve zero downtime database migrations.
Version control: best practices
Version control is something that every shipping team uses, but there's not a lot of talking about the right way to do it. Used properly it can improve your code culture and help you move faster.
MongoDB Gotchas & How To Avoid Them
Everyone should be able to benefit from MongoDB's power and simplicity, and so I've outlined some common and not-so-common things that hackers should know about MongoDB.