Logs vs. metrics: a false dichotomy

Every once in a while, I end up in a conversation about the relative merits of logs and metrics in the context of software operations. Usually, we treat logs and metrics as logically distinct things, and then have to decide which is more important, because putting all things in the world into rank order is important and valuable work…

…or not. Perhaps this is a silly discussion to be having over and over again?

This post is about how “logs vs. metrics” is a false dichotomy, and how thinking in this binary prevents us from seeing simpler ways to monitor our systems.

Read the rest of this entry

EFF is wrong about Nazis

The Electronic Frontier Foundation (EFF), an organisation whose aims and work I broadly support, has published a blog post entitled “Fighting Neo-Nazis and the Future of Free Expression.” The authors argue forcefully that GoDaddy, Google, and Cloudflare all made a mistake when they rejected the Daily Stormer from their platforms, and that their actions have set a dangerous precedent.

I think EFF is wrong on this issue.

Read the rest of this entry

Women who made modern technology possible

Over the past year or two I’ve been collecting examples of extraordinary women whose technical achievements have made the modern world possible. The contributions made by some of them have become more well known in recent years, while others remain relatively (and unjustifiably) obscure.

Rather than simply keeping the list to myself, I thought I’d publish it. And so, in chronological order by date of birth…

Read the rest of this entry

Tech lead: decide everything ⟷ decide nothing

This is part of a short series on being a tech lead, and about some of the tensions inherent in the role.

Continuing the theme of the last post (about writing code or not writing code), this one is about another tension inherent in the tech lead role.

This time, the two extreme behaviours are:

Tyranny: involve yourself in every major technical decision, and many minor ones. Nothing significant ever changes without your input. You expect to review everyone’s code.


Tyranny of structurelessness: you believe that the best team is one that is empowered to make its own decisions. You don’t intervene even in times of stagnation or conflict, because you think your smart, capable team will be able to work their way to a resolution.

Read the rest of this entry

Tech lead: writing code ⟷ not writing code

This is part of a short series on being a tech lead, and about some of the tensions inherent in the role.

In the introductory post, I wrote that:

…the tech lead role is one which frequently involves tensions between different ways of working: writing code vs. not writing code, making all the decisions vs. making none of the decisions, and so on. In the posts that follow this one, I’ll examine some of these and try and explain why I think good tech leads spend a lot of their time somewhere in between the two extremes, adjusting the balance as circumstances demand.

The two extremes, in this case, are:

Keep your hands dirty: spend all of your time working directly alongside your team with the code.


White gloves: never write or review code. Focus instead on higher-level design, architecture issues, or business-facing work.

Read the rest of this entry

Tech lead: an introduction

As I start handing over my responsibilities at Hypothesis before I leave at the end of the month, Andrew suggested I try and write about the role of a “tech lead.” This is the first of a handful posts about the role and some of the inherent tensions that I find useful when thinking about my responsibilities as a tech lead.

I hope that some of what follows may be useful to the wonderful team I’ve been lucky enough to work with for the past few years, and perhaps to others.

To start, then, an introduction. What is a tech lead? There are at least as many answers to this question as there are people in the role, but this is mine:

Read the rest of this entry

Craft Conference 2017

I went to Craft for the second time this year, and it remains one of the friendlier large conferences I’ve attended. Unlike many tech conferences, it usually has as many speakers talking about culture and human factors as it does technical talks. A couple of highlights from the schedule:

Read the rest of this entry

x64 General Purpose Registers

I can never remember the names and ordering of the general purpose registers in the x64 (AKA x86-64) architecture, so I made a diagram that shows the 16 general-purpose 64-bit registers in the x64 architecture, as well as the various legacy names for half-registers/quarter-registers and so on.

Read the rest of this entry

Letter to Scott Mann, MP

A letter sent to my MP, Scott Mann, on the event of the Supreme Court judgment ruling that the government must seek an Act of Parliament before triggering Article 50.

Dear Scott Mann,

As you will undoubtedly know, the Supreme Court have this morning ruled that the government must seek an Act of Parliament before triggering Article 50 and the process to leave the European Union.

This is a critical juncture in our nation’s history. For the past 45 years we have been members of an international Community and Union created to guarantee the free movement of goods, capital, services and people within its borders, and thereby to secure a lasting peace in Europe after two horrific world wars.

Read the rest of this entry

Thoughts on testing and simplicity


Something that Sean said when were talking about code review in New Jersey has come into my head a few times recently, so this is my recapitulation and expansion of that point.

Whenever we change code, we take a risk that those changes don’t work the way expected, or worse, break stuff.

Read the rest of this entry