Mixmax Engineering Blog

Troubleshooting `npm link`

As of this writing, Mixmax runs 15 Node microservices. We keep this manageable by sharing a ton of code between services, in the form of npm packages both public and private.

To keep those packages manageable, we develop them in their own repositories. But this poses a challenge for local development—how do we quickly test a new version of a package inside another?

Click to continue

The Effective Engineering Demo

At Mixmax, our engineering team strives for a bottoms-up culture of product ownership. This means that anyone on the team, not just the founders or our product leads, can contribute their great ideas! We believe that all of us is smarter than some of us. ;)

Click to continue

How to correctly specify default options in ES6

Default object values considered harmful

When writing modern JavaScript, it's common to collect multiple optional parameters into a trailing "options" object. This allows clients to pass a subset of options and gives context to arguments at the call site. It also permits the API to use ES6 default parameters. But it can be tricky to get default parameters right with objects. Here's how.

Click to continue

How to work remotely

Surveys suggest that as many as 3 in 10 workers in the United States work remotely at least some of the time. In fact, the New York Times suggests that remote work is gaining prevalence faster than any other workplace benefit. Here are some tips from my experience living and working from Japan.

Click to continue

Improving Mongo performance by managing indexes

Imagine you want to learn more about database performance and you have in your hands a very large book about databases in general. How would you search for your topic of interest? More often than not, the answer will be go to the index of the book which is located at the back, look up the topic and it will say the page where said topic is discussed; well, the way databases find data is not all that different.

Click to continue

Precisely observing structural page changes

When integrating with a large, complex webapp, proceed with caution

This blog post is part of the Mixmax 2017 Advent Calendar. The previous post on December 6th was about Database-backed job processing.

Mixmax is built on Gmail. Our product, and its convenience and power, depends on tight user-interface integration with Gmail. In order to add features to Gmail for our users, we need to track the structure of Gmail’s [DOM] and be able to manipulate it. For years, we achieved this by crafting query selectors to identify important elements within Gmail’s DOM, and continuously re-applying these selectors as the page changed.

Click to continue

Terraforming all the things

Iteratively migrating to “infrastructure as code”

Ever been frustrated when someone decided to play around in the AWS UI? Does managing infrastructure through UI strike fear into your heart?

Click to continue