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

Forwarding additional ports from a live SSH session

While reading the SSH man page1, I came across the following rather neat little trick.

You may know that if you type <CR>~. (that’s “enter”, “tilde”, “dot”, in order) you can terminate a hung SSH session. But it gets better than that: if you type <CR>~# you can see a list of all the current session’s forwarded ports. Yet more useful: type <CR>~C (capital “C”), and you’ll be dropped into a shell where you can add additional port forwards on the fly:

Read the rest of this entry

git push -f considered harmful

Force pushing in git is a subject that attracts all kinds of religious battles. This post is not about the merits of force pushing.

This post is about how to use git push -f if and when you do use it.

Never call git push -f without additional arguments.

Read the rest of this entry