S10E07: Waiting

This week has felt a little like purgatory or limbo. Not bad, necessarily, but just…a lot of waiting. A lot of not doing very much but expecting something to happen. Nonetheless, bits of things have happened.


Distributed systems are hard. Really hard. I’m currently right in the depths of a couple of related problems to do with a distributed system I work on. A distributed system is like – it’s like a factory. A factory that operates 24 hours a day. There’s a conveyor belt that snakes around this gigantic warehouse and various things that squish, reform, add to, subtract from, and generally mutate items on the conveyor belt.

So, question. Suppose something in the inputs changes. When do you notice? What should you do?

Suppose your first machine checks the inputs are valid. You make, I don’t know, fruit-flavoured tonics. You get a bunch of fruits coming in, and a machine that checks they’re Good Fruit. I don’t know what the metric is. Acts of service? Polite to their elders? Anyway, my point is, you get your fruits from a range of suppliers who are always great.

Except one day, the supplier who normally sends you grapes sends you gooseberries, because he got bought out by a conglomerate that reckons they’re about the same and you’ll never notice. Now you’ve got gooseberries in your fruit mix.

So you’ve got to update the machine at the front end to reject not just Bad Fruit, but also Unapproved Fruit. But at the same time, the conveyor belt is taking the gooseberries off. They’re getting pulped. They’re being mixed with the others! This is a disaster. The whole batch is ruined.

Or, worse, a machine along the way that expected grapes has received gooseberries, and has done the only sensible thing and exploded. That’s thrown a fuse, and now nothing works any more. Should you be fixing up that machine to reject any non-grape fruit now? That’s a lot of extra cost, and for what?

Alright, suppose you can get ahead of it. Now you’ve got to reprogram your label-printing machine to provide a “now with gooseberry!” label to this batch, except it’ll only be this once, so maybe you can do it by hand? Except you’ve forgotten that the conveyor splits and there are three other places you need to update it…

Distributed systems is teaching me a lot about factories, so two things:

  1. I’m going to play a little more factorio, in the hope that factories can teach me more about my code
  2. innocent, y’all can hire me whenever you want

We had a little day out today, Saturday. The weather continues clement, and I continue to enjoy Dracula Daily – a genuinely new and pleasurable way to re-read the novel. We went to the Grant Zoology Museum, home of the creepiest 3-D jigsaw in the world: 171 mouse skeletons. Just in little – in little cases. Tiniest bones you’ve ever seen. A giant, transparent, highly-exclusive ossuary. There’s also an elephant heart. A child said, with scorn, “But it’s plastic“, as if the material was the only interesting thing about a heart that in every aorta, every chamber, is the twin of yours and as big as your entire torso. You see this? It’s like yours. If this creature was the same size as you you could swap. That absurd. That’s fucking ridiculous. Look at this organ! Look at this skeleton! So what if it’s made of plaster! It’s not real, but it’s sure as shit true. This ape has thumbs! This whale has a wrist! Look! Look!

Anyway. We went for a stroll around and about. I recommend Caffe Tropea in Russel Square Gardens, which does a superb line in olive oil soaked focaccia, affogoto with any flavour gelato you prefer, and an arancino the weight of a newborn. A delight. We got ourselves turned around and meandered for a while around the back of UCL, the British Museum, and that lovely little area of Bloomsbury. We came across a door marked “SECURITY: NO UNAUTHORISED ENTRY” that had been jammed open with a “Wet floor” sign, presumably because it was sweltering in there. We reckon so because we could see camera feeds, and between the screens and computers running them there’s no doubt it was getting toasty in there. It was a perfect tableau: a health and safety warning sign underfoot where it was a trip hazard, holding open a door that should have been securely closed at all times.

This is a good a time as any to remind you (as if you need reminding, dear reader!) that security is a socio-technical system; that humans will ignore, get around, or deactivate any protocols or control that get in the way of them doing their job effectively (or, sometimes, in a way that’s not going to get them fired).


John and I are working on getting mentor-matcher ready for demo-ing. If you’re a buyer/tech adopter, what do you need to see in a demo? Tell me on twitter or leave a comment below. Or grab the code, run it locally, and tell me what you think.

S10E03:

This week I’ve done DNS training, presented my mentor programme software, and I read the decision that overturns a half-century of legal precedence in the United States. My unqualified opinion is that it’s weak shit. To other queer folk: they’re absolutely coming for us next. It’s not going to stop just because there’s an ocean in the way.

But let’s talk about my week!!!

Read more: S10E03:

I presented my mentor programme software to a group of interested folks from across the public sector. The hard work has mostly wound down now. I think it’s feature complete now, and I’m already working on a neat extension to let users take advantage of notification software like gov.uk/notify or something AWS-flavoured or whatever the young folks are using these days.

The feedback was generally pretty positive, and I recorded it for folks who couldn’t make it. I’m going to release that on Wednesday – I’d like to do some edits and see if my second performance was any better. Reflecting on the video, I need to be better at telling folks where the software actually lives, but also at demonstrating the power of the software. At the moment I do a run-through, but what that actually looks like is me clicking “Upload files”, some files being uploaded, the system thinking for ten seconds, and then me downloading some files. I might bring back/repurpose the demo grid I made when I was convinced this would be used for the Fast Stream and get people to try to beat the computer, or send round the sample data beforehand and see if anyone can even come up with a solution. I dunno, at the moment it feels like that time when the Queen pulled a lever to start transferring electricity to the National Grid and a clock went ‘dink’. There is so much energy and complex machinery happening underneath, and I want people to get that – but maybe that’s just because I built it.

Thoughts, please.


A role has come up at work. I’m only five weeks in and already I want a new role. Well, not really. I’ve wanted a more senior role for ages and I think I made the wrong decision in taking this one. Well, not really. I made the only call I was going to make, me being me and me being in the situation I was in. All I can do now is review my situation and make the next, best possible, decision.

The worst thing about this is that I really like my team. The work we’re doing is great. The things we’re building are proper complicated with all kinds of technical challenges. And I think if I wanted, I could ask for the things I think I’m lacking at the moment – line management, more stretch, more of the wider view.

But then I’d also like to get paid an appropriate sum to do those things. A friend of mine, a comedian, says that she says no to things, that she sets boundaries, because she can – so that the next person, who doesn’t have that luxury, will nonetheless be protected by those same boundaries. It’s the same thing for me. Just because I can do this work on the cheap, I shouldn’t. It’s not helping my fellow workers, particularly those from under-represented groups.

And so my choices are to just put up with it, and find the joy – because there is joy in lots of things that we’re doing! – or to make the move. And feel crappy about it for a bit.

Yup. Yup, them’s my choices. Damn. I was really hoping another one would present itself as I wrote.


A minor gripe now. I was approached the other day by a recruiter for a large tech company. Their hiring process is basically the same as my current role, but the pay is almost double, and the work is equally challenging. I told the recruiter I was turning it down because of the recruitment process, and that’s mostly true. I’ve been working in the open for almost a decade. I admit I’ve only got one library published on PyPi, and reading through the changelog and readme of any project that’s not your own is boring.

But I’m convinced that the best way to examine my capability, as a developer, is by looking at the things I have built when I’ve had time, and focus, and no distractions. Look at them! This the quality of code you can expect!

Whereas what was being asked was three random coding tasks in 45 minutes. Is that how we work now? Two week timeboxes have been reduced to 45 minutes because of cutbacks? The amount of money this company was willing to gamble on me, and they refused point-blank to look at the actual code I had actually written in actually comparable contexts. I can’t understand it. If you wanted a portrait painted and your assessment process was “Draw me a dog in fifteen minutes” rather than a portfolio review people would rightly think you were completely mad.

Anyway. Please stop asking folks to do whiteboard tests. It’s very silly.

S10E02: Thinking about sticking around

I wear the chain I forged in life! I made it link by link and yard by yard! I gartered it on of my own free will and by my own free will, I wore it!

Jacob Marley

This quote’s on my mind this week, for three reasons.

The first is work. I’m putting together a pitch to do an MSc, inspired in part by my colleague Terence. The approach I’m taking means binding myself to my department for four years minimum: two to do the qualification, and another two because that’s how long the policy says I have to stick around. This isn’t a small amount of time for me. For my parents, who have each spent more than two decades in the same job, it is very much a small amount of time. Nevertheless, it’s a long time for me, and more than that I’m going to be making a conscious choice to commit that much time. I’m going to forge a chain that links me, not just to my current department but to this profession I’ve chosen, and I’ll wear it by my own free will.

Which brings me to forks.

Naturally.

No? Alright, let me convince you.

The cutlery you ate your dinner, lunch, or breakfast – or perhaps all three, if you’re working from home – are probably the tools you use the most often, after perhaps your keyboard and mouse. But you’re not the only person who’ll use them! Your partner(s) will use them, and your family, and your friends, and your lovely neighbours who have nut allergies. Your cutlery has been present at tiny moments of love and shouting matches and late night ice cream binges and every mundane moment in between.

Do you know what mundane means? It means of the world. People use it to mean boring, but all of my best experiences have so far been in and of this world, so I think mundane is just brilliant.

So picking a new set of cutlery is a commitment, I think. Or rather – to pick a new set of cutlery with your current partner is one of those small romantic moments. Words are air and float away; flowers bloom and die; but this spoon will be as comfortable in your hand in five years as it is today. Love is flowers and words – as a budding poet I insist on it – but it is also a fork that is chosen together.


I wonder if I should start writing a weeknote at work. It feels like a very me thing to do.

Let’s unpack that pals.

“A very me thing to do” is not the same as “a thing I should do”. This is because the things I am paid to do are only like…50%? Maybe? Of the things that I like to do in a job. But they are fully 90% of the things I am paid to do, and promotion can be a tricky thing to argue when people ask whether I’ve been doing my job.

See, even if the answer is “No, but check out these other things I’ve been doing that have moved a bunch of needles in a bunch of different and better ways,” the business does not care. If the business wanted those needles moved, it reasons, it would pay someone to move them. As it is, now they have to hire someone to move the needles back, which is just further expense.

More to the point, it’s pretty hard to promote someone if they’re only doing half their job. It sucks, but that’s not what I’m arguing right now. I know it sucks. It would be delightful if we could be paid to move the needles we think need to be moved, in the ways we know how. But anyone working in a reasonably hierarchical organisation knows that’s not the case, so here we are: the things I like to do, such as puns about flowers and words, are fundamentally not the things I’m paid to do. And I need to make sure that I’m doing enough of the day job to secure promotion, and that I get enough time to do the other stuff outside work in the meantime.


This bit’s technical: protocols (interfaces) in Python.

My mentee was asking me recently about the factory pattern. Most explanations of the factory pattern talk about interfaces separate to classes, because most programming languages do separate the interface from the class definition. I said, distinctly and clearly, not to worry about this, because Python does not have interfaces: it’s just AbstractClass all the way down.

I am calling myself out here to say I was quite wrong. In actual fact, Python does have a way of defining an interface, and it’s called a Protocol. I’m still not completely clear about where one would use an interface and where an abstract class, but I think that’s going to come in time and after some practice. If you have thoughts on this – gosh, I wonder if programmers have strong feelings on this niche element of computer science – find me in the usual places and tell me.

S10E01: Welcome to the Good Place

I have started to rewatch the Good Place with my partner. I mean, I’ve watched it before. She hasn’t. No spoilers!

New role, new season, new project that I’m not going to talk too much about. I’m going to complain, like a lot, mostly about building infrastructure with Python – there are some genius brains at Amazon – but I won’t be talking too much about what the project is about.

Continue reading

S09E17: On again, off again

This has been a funny old week. I realised on Monday that, given how holidays are falling and so on, I’ve only got about a week left in my current role. I have learned so much, but I also feel guilty because I’ve not delivered anything. At least, I don’t feel like I’ve delivered anything. Maybe I’m underestimating my impact, but also I wonder if there’s value in being a bit selfish. It is a good thing to learn: it is good for me and good for my wider employer.

It just sucks that I feel guilty about being unproductive.

Continue reading

S09E16: The worst curse is to get what you want

This has been a generally good week. I’ve done some strategic work and started to lay out principles for implementation. I heard back about something I’ve been waiting ages for, and I made even more breaking changes to my side-project. I spoke a little bit of Russian and drove for the first time in a long time. I met some of my fellow school governors and saw a real school in action.

However, I’m still no closer to a couple of big decisions I want to take. In fact, I may actually be further away.

Continue reading