A strategy to plan a healthy balance of product & engineering work for your teams

Every company I’ve worked at/with has struggled to prioritize engineering work against product work. Most of them have tried to solve this by dedicating a percentage of their engineering capacity on engineering work. If done right, allocating capacity across categories provides a feedback loop that can provide insight into your team’s work and will help steer your team towards healthy collaboration with product. The goal is to align on product-engineering roadmap, which may or may not end up using a framework like this.


First, let’s define a few categories of work.


Work categorized as innovation are high-risk, high-reward and have…

Recent changes in GitHub made Dependabot a pain in the ass. Here’s a potential solution for your organization.

Recently, a bunch of Dependabot PRs that required GitHub Action Secrets began to fail, which brought me to this article from GitHub:

Which lead to this article about preventing pwn requests:

By no longer having access to repository secrets, Dependabot PRs in my organizations began to fail because they relied on a personal access token secret for fetching private GitHub Packages, which is currently the only authentication method for accessing private GitHub Packages outside of the current repository. I read these articles multiple times and still didn’t understand how to fix Dependabot PRs. …

Synology is one of the most popular manufacturers of Network-attached Storage systems. I bought my Synology DS416play over three years ago and it never performed how I wanted it to be until recently. Here are the steps and resources I used to get it decently performant.

May 26th, 2020 Update: I upgraded to 8TB WD Red HDs and the performance increased drastically since these higher-capacity drives do not use SMR.

Do not use AFP (Apple Filing Protocol)

In the beginning, I used AFP because it’s written by Apple and I only use Apple devices, but of course, this is one of Apple’s proprietary formats that is being…

Simple basic configurations for using Imgix to optimize and serve your images.

There are numerous blog posts on how to optimize images, but none are quite straightforward as I would like. The idea behind this post is to give you quick, direct steps to optimize your images using Imgix, though using other services would be very similar.

Only serve your highest quality image as the master asset

Your graphic design team shouldn’t be cropping assets themselves anymore — instead, have them upload master assets to your CMS. Have your web and mobile clients crop images themselves. For Imgix, this also lowers your costs as pricing is based on the active master images per month.

Only upload JPEGs, PNGs, and SVGs master image assets

For compatibility reasons, assets should only be the…

Here at Dollar Shave Club, our frontend team has created a new monitoring solution to allow us to increase our monitoring cadence, speed, and coverage, all of which were lacking when we relied on 3rd party monitoring services. Our engineering teams’ response time to outages has improved significantly with this new servie. With @dollarshaveclub/e2e, you can quickly setup production monitoring on CircleCI 2 for free using their new Scheduled Workflows.

What are monitors?

Monitors are simply tests in production that run on a regular interval. You don’t commit code without a test, so you shouldn’t deploy code without a monitor.

Some examples of…

My previous post explaining my theology on Christianity has gotten quite of a responses, specifically from Orthodox Christians and Muslims. The conversation I found quite enlightening was my conversation with a Muslim name Ahmed. We talked about a few things such as, “what is the Trinity?”, but perhaps what made him stop responding to me is the idea of universal truth.

If there is one true God, His/Her/Its laws must be universal and transcend all cultures.

Universal Truth vs. Relative Truth

There are two types of truths: truth that is universal and truth that is relevant only to certain circumstances/people/etc. An example of a universal…

It amazes me when people have thousands of unread emails and notifications. How are you able to get anything done? How are you able to filter out the important emails and respond appropriately? Part of being sane and efficient is cutting out noise from your life and only paying attention to what really matters.

Emails: Use Labels & Filters to Achieve Inbox 0

If you are using Gmail, which you should be doing, then you should be filtering and labeling your emails. Setting up a filter for an email is easy–when you get an email, right click the down-caret on the right and select “Filter messages like this”:


AWS Kinesis Firehose and AWS Redshift are some of my favorite features of any cloud platform. This stack allows you to easily track millions of events per day without any devops. This guide is an in-depth, devops-orientated guide for deploying this analytics stack for the purpose of tracking pixels, though it can be extended to whatever you want.

What are tracking pixels

Tracking pixels, also called web beacons, are images that send data to an analytics server via query strings. They could look something like:

<img src="https://analytics.example.com/1x1.gif?event=load" hidden>

This pixel track a “load” event, which is when the page is loaded by the browser…

Originally published on April 25, 2015.

In node.js and io.js, you’ll frequently see this error message:

(node) warning: possible EventEmitter memory leak detected. 11 a listeners added. Use emitter.setMaxListeners() to increase limit.

When would a leak actually occur?

A leak occurs when you continuously add event handlers without removing them when they are no longer needed. This particular happens when you use a single emitter instance numerous times. Let’s make a function that returns the next value in a stream:

function next(stream) { 
// if the stream has data buffered, return that
const data = stream.read()
if (data) return Promise.resolve(data)
// if the stream has already ended, return nothing…

JavaScript is my first programming languages and I haven’t found the need to expand my programming skills to more, mostly because you can do everything with node.js and JavaScript. However, after recently building a high-volume service for a client, I’ve, for the first time ever, found myself wishing I didn’t write the service in node.js, though my client doesn’t mind.

When is node.js right for the job?

I mostly work on CRUD apps, which suits node.js perfectly well. If your requests are simply database calls without CPU-intensive logic, then node.js is good enough for your app. …


Jonathan Ong

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store