A newsletter by the Mixmax team

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

Handling 3rd-party JavaScript with Rollup

How and when to leave JS out of the bundle

This blog post is part of the Mixmax 2017 Advent Calendar. The previous post on December 2nd was about Mixmax’s new Sequence Picker SDK.

As of this writing, Mixmax has open-sourced dozens of packages in our primary language, JavaScript. The linchpin of our open-source strategy is npm, where we publish packages for both Node.js and, increasingly, the browser (hello React components!). Our bundler of choice, Rollup, makes it super easy to consume those packages client-side. But if you don't take care when configuring Rollup, you can end up publishing hundreds of kilobytes of unnecessary JavaScript to your users.

Click to continue

Mixmax Advent 2017

How To Write An Effective Engineering Spec

We at Mixmax are excited to introduce our second annual Engineering Blog Advent Calendar! Last year, we ushered in the holidays with twelve one per day blog posts. That went over so well, we’ve decided to make it an annual tradition!

Click to continue

API Paging Built The Right Way

Mixmax has a very extensive list of APIs that give our users direct access to all of their data. Some APIs, such as Contacts can return millions of results. We obviously can't return all of them at once, so we need to return a subset - or a page - at a time. This technique is called paging and is common to most APIs. Paging can be implemented in many different ways, some better than others. In this post we discuss various implementation approaches and how we ultimately implemented our own approach to serve data stored in MongoDB. We also introduce a new npm module to easily allow you to do the same.

Click to continue