Home

Batching With Guava

October 14, 2019

Today we’re going to take a quick look at batching. Batching comes into play when you need to make a lot of requests, typically to some external resource like a database, a server, or an API. The Two Extremes Let’s say we’re making a productivity app that manages our emails for us. We want to add a feature that deletes spam emails for us. Without batching, we might have a snippet of code like this: ...

Troubleshooting Black Holes

October 7, 2019

Let me tell you about Troubleshooting Terry. Terry’s a fictional software engineer on my team. At the start of last week, Terry was asking about whether or not a certain piece of (seemingly legacy) code was still in use. He needed to know because this affected the scope of his work—if the answer was yes, there would be another case that he’d have to handle. I didn’t know. I told him this, and also asked what he had done to figure this out on his own. ...

Every Character Counts

August 26, 2019

When it comes to programming, I used to think that the height of cool was coding in a terminal-based text editor. (I still think it’s the coolest thing ever.) Be it vim, emacs, or something else, it just seemed so much more hardcore to do everything just in your terminal. It seemed even more cool because I was a complete newbie when it came to understanding my development environment. I didn’t even know that you should care about your environment. ...

Protobuf Field Masks

August 19, 2019

When you design an API to a service, it’s nice if your API is robust enough to return just the data that the user is interested in. For example, take the Google Maps Place Details API. There are about 20 fields that you can query, such as name, formatted_phone_number, website, and rating. You can specify exactly which fields you want returned by specifying a fields parameter. This helps limit responses to just the data we actually want. ...

Exit Talks

August 12, 2019

As a manager, what should you be doing when one of your reports is leaving the company? I believe one of the more important things you can do is the exit talk, a more candid conversation about your report and their career. This is something I started doing as a budding team lead. I’ve had an exit talk with two of my last three interns. By the end of today, I’ll have had one more. ...

Creating a Newsletter

July 29, 2019

I’m a lurker over in the Rands Leadership Slack. As Rands is the VP of Product Engineering at Slack, the folks in this workspace know the ins and outs of using Slack. One of the cool things that they do is curate a newsletter that summarizes interesting discussion, ideas, etc. that occurred over the past month. This seemed like something that would be useful at my work as well, so another engineer and I set out to make our own version. ...

Immutables, Part 4

July 22, 2019

At this point, you’ve made a shift to an immutables world. All of your models are immutable (where appropriate) and you’re benefiting from not having to worry about random code messing with your shit. You’ve also started using non-vanilla generated objects and a custom style in order to cut down on boilerplate (e.g. ImmutableFoo.copyOf) and make immutables feel like other objects (e.g. protobufs). Now, you face a new challenge: how do you serialize and deserialize your model? ...

Immutables, Part 3

July 15, 2019

At this point, we’re fairly comfortable with using Immutables. In Part 1, we introduced how to create and use generated immutable objects. In Part 2, we looked at how we can use various features of the Immutables library to make our immutables nicer to work with. Here, we’ll take a look at styling and usage patterns. This will allow our immutables to be more idiomatic and homogenous with the rest of our code base. ...

Immutables, Part 2

July 8, 2019

Last time, we took a first look at the Immutables library, focusing on the basics of how to generate and use an immutable object. Here, we’ll take a look at how we can use some useful features to make our immutables a bit nicer to work with! Basic Usage In part 1, we used a toy example of an image editing app to highlight where our code would benefit from immutability. ...

Immutables, Part 1

July 1, 2019

A core part of coding in an object-oriented language is, well, creating objects. Plain Old Java Objects (POJOs) are the standard Java object, and they usually look something like this: public class Color { private String rgb; public Color(String rgb) { this.rgb = rgb; } public String getRgb() { return rgb; } } Nice, simple, straightforward. POJOs are fine for modelling things, but they have a problem: they’re mutable. ...