Weeknotes 007

Published: Mon Mar 01 2021

Missed several weeknotes in a row. I was on holiday for a week and then last week back at work. It went by in a blur.


GOV.UK's new Head of Tech Himal has started.

My week felt like I was playing catch-up. Probably because I'd been on holiday the week before. Emails were out of control and the first half of the week left me with little time to look through them because of meetings.

In tech fortnightly, we took a detour from the usual tech presentations and Himal introduced himself and we had a general chat. I thought it went well. A few people from the developer community talked about the things we do that are not strictly part of team and mission work. Things like our tech debt meetings and process, our developer tools working group and "conference talks we love" community. These things that people take on are so important. I would love to get to the point that these extras are actually recognised as positions in their own right - perhaps with a head of community leading them, but we don't have enough people for that at the moment.

Accounts work continues. We've spent a fair amount of time workshopping next experiments. I've found it a little frustrating and it brought up some thoughts around strategic and tactical work. Long term large fundamental chages vs shorter term MVPs. These require different cadences in their planning, different focus in and around user reseach and different considerations in team size and make up, order of work and what success looks like. I was worried that we would get lost in planning out work and thinking too far ahead. I still don't think we have a firm grasp of how GOV.UK can and will change when it becomes more of o personalised platform. Random thoughts. I want to find time to explore my thinking around longer/shorter term pieces of work.

And then, mid-week, pay happened. For a few months, I achieved a Tom Sawyer moment of negative pay. I spent far too much time finding the right person to talk to about this over the course of a few days. It was frustrating and stressful and ruined my week. It made me far too curt with other people as well. I'm very grateful to Tom though. He helped me even though he's no longer in the same organisation as me.


Schools are going back to real life lessons from the 8th March. This week, COVID tests for the kids start. My daughter has been doing well at home. We'll see how the return goes.

February and March are full of family birthdays. I find serendipitous present shopping difficult online.

Over the weekend I made a shelf for our breadboards and my daughter and I fixed a marble table that had cracked in two with some epoxy resin. We coloured it blue with some glitter as an experiment.

I've renumbered my weeknotes. The old Season/Episode thing wasn't working for me. Sequential numbers are simpler.

Listening, Reading

Reading David Foster Wallace: This is Water

Reading A Vim Guide for Advanced Users

Weeknotes 006

Published: Sun Feb 07 2021


Felt a bit like I was treading water this week. Quite a few one to ones, some discussions about people who want to move teams and how we could facilitate that and slow progress on setting up interview panels.

I spent a good chunk of the week going through DDaT again and discussing it with one of our senior developers. The framework is very light on practical examples of the skills it sets out. This makes it difficult for line managers to assess their line reports' submissions. That in turn means much is left to the line manager's judgement and I think that will lead to inconsistency across scoring.

GOV.UK Accounts feels slightly uncertain at the moment. We are moveming away from creating an authorisation solution to thinking about personalisation on GOV.UK. The personalisation work is very broad and we haven't focussed on a tangible experiment yet. I'm finding it frustrating.

In the meantime, we do have tech work to think about. How we'll handle GOV.UK wide session cookies is up for thought.

Towards the end of the week, several of the longer serving tech folk on GOV.UK met with Himal who will be taking on the role of Head of Tech soon.

I attended some Race Equality workshops as well. It's often uncomfortable to talk about, and I've still lots to learn.


Discovered a handy google docs tip - if you append /copy instead of /edit to the doc, it asks if you wish to make a copy. Very handy for our GOV.UK Tech Weeknotes where we copy a template each week. Added extra tip - you can choose the location the copy will save to with a handy query param: ?copyDestination=<folder_id>


Image showing 22975 unread emails

Unread email sneaks up on you. I did some tidying. It's better. Not 0, but better.

Listening, Reading

Listened to From Climate Crisis to Real Prosperity.

Read What I Learned in Avalanche School

Weeknotes 005

Published: Sun Jan 31 2021


I managed to crack a tooth. Not pleasant. I've had a temporary repair rather than a full scale drill and filling. A full scale drill and filling would require a longer appointment and more space between me and the next person because of all the water used and the resulting aerosol.

I spent some of Saturday taking the group head on the espresso machine apart. It has started dripping a little while I'm pulling a shot. It looks like I need a new infusion valve.

I hacked together some code to crawl a few sites to pull together the urls of around 400 coffee roasters in the UK.


A series of "leads" meetings this week. In the senior technologists meeting there was a good discussion around how we help people find opportunities that will give them skills and experiences they can use as evidence for promotions and skills assessment.

Our digital identity and accounts based work is a little slower this week. We're in the process of figuring out which team builds which pieces. Mostly things going on at a level above me.

Discussed the people survey results with some of our senior devs and tech leads. It's clear the last year has been hard on everyone. People have changed teams often and we've developed lots of new products very speedily. People are tired. We are worried about how we support all the new things with no new people yet.

Recruitment. So very slow. I'm sure it is a horrid experience for people who have applied for a role with us. We've done the telephone sift though. Next up we have to organise the panel interviews.


I glanced over Steve's Product Manager Induction trello.

Weeknotes 004

Published: Sun Jan 24 2021


A fairly prosaic week this week.

I bumped into a phrase "met his Thermidor" this week and ended up learning about the Thermidorian Reaction.


Work felt bitty this week and it seemed to lack cohesion. I bounced between discussions and meetings and community events. Lots of one to ones this week.

We had a long session with a large group of people to discuss what and how we see working at GDS. The session was well run and it was interesting to hear others' perspectives about their work.

I conducted a couple of telephone interviews for developer positions we have open.

Probably the most interesting for me was a half hour with one of our fraud experts, discussing some typical indicators and patterns of web based fraud in the context of accounts.

A Ruby benchmark snippet out of idle curiosity:

require 'benchmark'

n = 5000000

Benchmark.bm do |x|
x.report {n.times do; (n1 + n2).sort; end}
x.report {n.times do; (n1 + n2).sort!; end}

user system total real
4.002936 0.003981 4.006917 ( 4.010948)
3.734065 0.004691 3.738756 ( 3.742245)


Strengthening Security Configurations to Defend Against Attackers Targeting Cloud Services which has a big list of bullet points. Putting in place many of their suggestions is a large upfront task for any system launch.

Bypassing MFA with pass-the-cookie.

Mutation testing and related Ruby library mutant.

Weeknotes 003

Published: Sun Jan 17 2021

Non work

Kept up a fair bit of exercise this week.

Spent Tuesday evening making pizza with my daughter as part of her school work. We actually started on Monday evening because we made a sourdough pizza dough and we wanted a slow bulk fermentation. The pizzas came out well.

Some boring bits of life-admin.

I closed my old web hosting account at last. I moved a some old domains and personal blogs that I maintain for friends and family over to static sites using eleventy. I tidied up an old blog of mine and did some housekeeping on old posts. There's a bit more to do, but most of the content I want live is live. I'll address the various pieces of broken formatting and design as I get time and inclination. None of the sites get any traffic to speak of.

I spent far too much time trying to plot my weeknotes title and numbering style. Ultimately, it doesn't matter, just me trying to bring a small sense of order.


The week started with a deadline. GDS is starting to use a new framework to assess the skills of people working in "digital data and technology" professions. We had a submission deadline and the early part of the week was spent checking all the submissions for my line reports. There's a new tool to submit the assessments. It's not the most user friendly; there's no proper feedback on past submissions and line reports cannot see when their line manager has validated their assessments. Slightly annoying because I really want to make sure my line reports have their assessments correctly submitted because it can affect their pay.

I spent much of the rest of the week in meetings. The routine meetings included senior tech and leads planning sessions as well as GOV.UK's developer community tech fortnightly. Ad hoc meetings centred around digital identity. A good overview with tech colleagues on the digital identity team and another longer half day session which was more general and included different disciplines.

Tech fortnightly was interesting - Richard showed us how he had repurposed one of our publishing apps as a personal blog.

I spent some time going through some threat modelling for one of our services and did a little research on MITM attacks.

Worked with one of the developers on the team to explore autoscaling a little.

I also looked into our current special leave policies and shared it around with some people at work. Several people in the developer community are finding it difficult to balance work and life at the moment. Parents are, anecdotally, finding it difficult being both a full time employee and teacher.

I started reading 97 Things Every Engineering Manager Should Know because Dean has started a book club.

I started to think a bit more about how to onboard developers.

How to view the raw commit data on GitHub

Published: Fri Sep 11 2020

Today I learned that you can view the raw commit data for any commit on GitHub by appending .patch to the commit's url. For example, https://github.com/octocat/Spoon-Knife/commit/d0dd1f61b33d64e29d8bc1372a94ef6a2fee76a9.patch

This includes the author's email address. I know you can easily view the git log if you pull a repo down, but I didn't know it was easily visible on GitHub.

Deleting all docker containers and images quickly

Published: Fri Jul 17 2020

For when you really want to blat everything.

docker rm (docker ps -a -q) && docker rmi -f (docker image ls -q)

I'm using fish so the command substitution is a little different to the usual bash syntax. If you're running a more standard shell, you'll probably need some $s in there:

docker rm $(docker ps -a -q) && docker rmi -f $(docker image ls -q)

docker rm removes containers by container Id. docker ps -a -q lists all containers in quiet mode - so just the container Ids.

The logic is the same for removing images - I've thrown in the force flag for good measure, and I've used && to concatenate two commands onto one line.

This will error out if you have no containers.

It's also very destructive. A nuclear option as it were.

How to install DrRacket on Mac OS and Homebrew

Published: Sun Mar 01 2020

Homebrew is excellent and you can install a minimal racket by running

brew istall racket

Once this finishes, you'll see instructions on how to install DrRacket with raco. Follow the advice:

raco pkg install --auto drracket

This takes a while. You might struggle to actually find the DrRacket.app or launch DrRacket.

If you've never used racket before, you probably don't know raco either and you won't know where it has installed all the things.

Run the following to find out where raco has placed the .app:

racket -e '(require setup/dirs) (displayln (path->string (find-gui-bin-dir))) (for-each displayln (directory-list (find-gui-bin-dir)))'

This lists /usr/local/Cellar/minimal-racket/7.5/bin as the directory where DrRacket.app sits on my machine. Running /usr/local/Cellar/minimal-racket/7.5/bin/DrRacket.app/Contents/MacOS/DrRacket from the command line will launch DrRacket.

I symlinked it so it was a little easier:

ln -s /usr/local/Cellar/minimal-racket/7.5/bin/DrRacket.app/Contents/MacOS/DrRacket /usr/local/bin/drracket

Weeknotes 002

Published: Sun Feb 16 2020

I chaired the tech fortnightly. It is an open agenda; anyone can put a topic in and speak. I always forget how much work it is to co-ordinate the events. Finding people to talk and suggesting topics takes more time than I expect.

I presented three things I have enjoyed while learning some Python. It sparked some good discussion in a community which does day to day work in Ruby. I am glad that my presentation served as a conversation starter. I want the tech fortnightly to become more two sided discussions rather than one sided presentations. I was a little dismissive of JavaScript in the middle of my talk, which I regret. It is insensitive to those who work primarily in JavaScript.

I started working on a prototype to explore data from a satisfaction survey. This involved putting together a database schema from a spreadsheet of data of denormalised and anonymised data. I inadvertently created quite a large chunk of what is a generic survey data design in the process.

I also attended a strategy workshop with other lead developers, head of tech and senior product managers. Thinking strategically is a skill in which I am not practiced. I still fall back to thinking of solutions and immediate implementation detail.

I spent some time tidying up my vale linting setup. Writing to vale's exacting standard is hard!

Weeknotes 001

Published: Sun Jan 19 2020

I started working with a new team focussed on using data science to make GOV.UK better for the end users. My previous team focussed on long term maintenance of the platform. Data science is a whole new world for me. I'm excited to get stuck in and learn.

The code is largely in Python and is the first time I have worked with a significant piece of production Python code. I immediately bumped into problems trying to install the requirements for the project.

In the project, two of the top level dependencies rely on Pygments. Pip installed an up to date version of Pygments when it resolved the first dependency, but the second dependency required an earlier version of Pygments. I think this was the result of merging Dependabot PRs without running pip install and ensuring a clean install.

Pip, to my surprise, does not resolve dependency versioning issues and I am reminded of DLL Hell.

My current understanding of workflow on a Python project is developers occasionally use pip freeze to write requirements to a file. Subsequent efforts can install from the file. Apart from the versioning issues, it is also easy to commit unwanted packages to a project if developers are not careful.

I spent some time investigating how other projects manage Python dependencies. A colleague pointed me towards PEP-0518 which looks interesting, but in my limited view of repositories around GDS, I did not see a .toml file being used so I don't know whether people are doing this in the wild or not.

I found pipdeptree which outputs a tree view of dependencies similar to Bundler's Gemfile.lock.

I discussed the problem with one of the other developers on my new team and went digging around some other Python projects. We found a pattern of two requirements files. One for base project dependencies that is hand crafted, and one autogenerated with all dependencies and their sub-dependencies. The advantage is developers are more aware of the dependencies they are adding and this should address the unwanted or unneeded packages sneaking their way into a project.

Going forward, I want to add some automated process around the projects to catch these errors earlier. The first thing to do is spin up a new virtual environment and run pip install -r requirements.txt on each branch push. After that, I want to put some linting in place. The code is still small enough for this not to be too daunting.

Next Page