S03E11: I am not a clever man

The weird double-episode in the middle of the season that makes you sit up straight in the luminous glow of Netflix and go, “Oh shit, is it the season finale already? Did I really just shotgun 13 episodes of this show? What kind of rotten monster — oh, okay. It’s that weird mid-season double episode” and then you sink bank into your nest of blankets and tea.

Relax. Sink back. We’re not at the finale yet.

Way back, last Thursday, I went home early because I felt rotten: the beginning of the flu. I’d already volunteered to help out at SiliconMilkRoundabout, and figured I’d be better by Sunday.

I was. I definitely wasn’t well enough to use five hours of spoons being extroverted, but I was well enough to stay at home, maybe go for a stroll and see a friend for a coffee.

Hey, reader. Guess which one of these I did.


So then it was Monday and I was huddled in my snuggliest blanket drinking my largest mug of tea and generally feeling monumentally hacked off at past me, the me who overdid it.⁰


This week I’ve mostly been struggling with imposter syndrome as I try to get to grips with Jenkins. It’s software we use to automate software deployment, and this is my first time getting deep into the guts of it. Like all projects that have been around for a while it seems like a horrible, screaming mess at first glance. I’m confident I’ll get there, but the learning curve is sharp.

What I’ve noticed is that I’ve been tracking my time less when I’m struggling at work. I think this is some kind of avoidance behaviour, so I’m going to dig into it a bit more and work out what it is I’m really doing.

Brains: they’re weird, and they control your life in ways you don’t even notice.

Red team! Assemble!

The team got together and reviewed our threat vectors and attack trees. Attack Trees are constructed from the point of view of the adversary. Creating good attack trees requires that we think like attackers, which I’ve got to admit gives you a bit of a thrill. We broke down all the ways different attackers could try to get into our system, and found that we’d plugged all but the most expensive gaps.¹

If you’re writing software, I recommend doing these attack trees. Some of the outputs will scare you — firstly, there’ll be whole avenues of attack you hadn’t thought about and now you won’ t be able to sleep until they’re fixed.

The second thing is that you’ll find out that someone on your team has been harbouring a secret desire to hack into things and you won’t be able to sleep again full stop. It’s fine. They’re on our side.

https://media.giphy.com/media/G7S0Fek06CZfW/giphy.gif

So. Many. Meetings

Now to be fair I signed myself up to these, but all the same I’m frustrated at the number of meetings I found myself in. Not because they’re not good — they are, they’re interesting and give me new perspectives — but because they take me away from what I ought to be doing, and I recognise them for what they are — more avoidance activity because I’m not already brilliant at something I started only recently.

For example: I joined an assessment workshop for a product that another team are building. My job was to assess whether the tech was up to scratch, and it was a genuinely enjoyable and challenging discussion. I feel good about doing it and I hope the feedback I gave will be valuable. However, I should really have been getting more stuck in with the difficult, boring work of better understanding the automated continuous integration pipeline, instead of extra, valuable, corporate² work.

In an ideal world I could do whatever I wanted and that would comprise solely of things I enjoyed doing, but I don’t think we’re there yet.

https://media.giphy.com/media/9fulYnA7MR1oQ/giphy.gif

Every day I’m shufflin’

https://media.giphy.com/media/w1ZEcSm7LiuLC/giphy.gif

I found out on Thursday that I’m being shuffled back to my old team for the short term as there’s been a few moves. It’s not ideal, but the team is good and I’m fairly comfortable moving around. Still, it’ll mean another period of two or three weeks where I have to re-learn what I used to know. I’m starting back on Monday, so it’s a fairly sudden change. Still. It’s nice to be wanted.

This week has been a good week for coding, even if I’ve not done much work stuff. I’ve written up a couple of interesting practice examples — the orchard and the game of life. As ever, I get so much enjoyment out of problems like these. I love them, and the exciting things AWS is revealing around serverless is making me itch to try out a side hustle I’ve been thinking about. Watch this space if/when I go down to four days a week…

Secret project update

This week I think I successfully convinced someone senior to sponsor an alpha of my secret project. I think. I’m not sure yet, the ways of senior people are mysterious. I’m aggressively optimistic about this, because I think I’ve got a reasonably clear idea of what the project needs.

I was delighted to discover that it doesn’t necessarily need me, because it means all the information I had in my head has been transferred into pages and I am not a blocker. I’m hopeful I’ll get to work on it, of course, but I’m more interested in it getting done.

More on this as we get it, although I suspect with it being Christmas soon all will be quiet on that front.


⁰ The worst part is that we’ve both done this idiotic dance before.
¹ “Expensive” is a euphemism. What it means is that the only routes into the system would be via what’s called “rubber-hose cryptanalysis”, which is also a euphemism. It is not very much fun to think about and I do not recommend it.
² ie not my core job

Coding the Game of Life

Over the weekend I attended the Global Day of Code Retreat. We held one at our offices in Aldgate, and welcomed 11 participants.⁰ We coded for about 45 minutes per session, and each session had a different constrain. The aim of the day was to practice writing code thoughtfully, driven by tests, and in small increments. The solution we were pursuing was software to run the Game of Life, a zero-player game that demonstrates emergent properties.

(That is to say that, like life among us human beings, it starts with a seed and sometimes grows, sometimes dies, sometimes stays the same but — here’s the kicker — it can’t be hurried. The only way to work out how a pattern will look at step 4,255, 903 is to go through all of those steps.

As in life, the only way to find out what’s going to happen is to wait)

We also deleted all of our code at the end of every session, which was freeing but also very frustrating. One particular example was when my partner and I had been working in two minute bursts, resetting to the last working point if we didn’t manage to make a passing test in those 120 seconds. That frustration and elation was definitely heightened when we then had to get rid of all that hard work.

I enjoyed it enormously, and I got a chance to talk about the work we do and evangelise about working with us.¹ In fact I enjoyed it so much that I went home and then came up with a solution to the problem solo, with commit messages that got weirder the later it got:

Read from the bottom up. They’re from my repo

It was a really interesting reminder of how I originally learned to code, which was by fruitlessly bashing at the keyboard like an unionised monkey in an infinite cage. I had no real clue what I was doing, and when things worked I got a huge rush of endorphins that spurred me on. Intensive sessions like these put me next to people who are in that space, who just want to get on and write code and not hang around waiting for this fuddy-duddy government bloke to explain what they already know.

I think I got a bit more senior without ever realising it.

I think that’s how it happens to everyone.


If you look over the commits, you’ll see a snapshot of what I was thinking at that point in time. I really prefer these long commit histories to ones that are artificially squashed and rewritten — at least as a learning tool. For example, my Cell class started as this:

class Cell:                                          
def __init__(self, alive: bool = False):
self.alive = alive
def die(self):
self.alive = False
def resurrect(self):
self.alive = True

and ended up as:

class Cell:
def __init__(self, alive: bool = False):
self.alive = alive

def black_or_white_square(self):
return u"u25A0" if self.alive else u"u25A1"

because along the way I realised the Cell class didn’t have to die. In fact, I could even reduce it entirely to a True or False value and never worry about creating objects at all.

Some people didn’t take this approach. Some had Cells that were very weighty and could calculate their own fate, reducing the need for a world and putting each cell in its own bubble. The huge value from events like these, in my opinion, is being exposed to quite different ways of thinking about a problem.

So now you’ve been exposed to mine. What do you think?


⁰ 24 signed up, so I’m curious to know how that drop-off rate compares to the average
¹ If you’ve got to this blog because you attended, you should check out the jobs we’ve got on offer and the skills we expect you to have as a junior data scientist or a junior software developer

S03E10: Shhhhhh!

This week is brought to you by an experiment in Library Rules


Library rules:

  • no desk meetings
  • write more, talk less
  • DON’T MAKE EYE CONTACT WITH THE LIBRARIANS

Beautiful, horrifying librarians from http://princecashew.tumblr.com/

Chess makes your brain hurt

Public digital hero and globetrotter Dan came over to play chess. We tried to talk about things and play a serious game, and found it was like trying to rub your stomach and pat your head at the same time. You can do a shallow version, but try anything more serious and your brains squidges out of your ears. So instead we played a really good game, and then we followed that with a very quick game that was full of exceptionally stupid moves.

There is some kind of lesson in there.


I am getting a little bit better at chess all the time. My rank for daily games is now apparently 1087, which puts me in the 28th percentile on Chess.com. That’s very low, so I’m going to keep plugging away. If you work around me and feel like a game, then let me know because I’d love to play more.

Completely drained

I had various deeply emotional conversations with friends this week. They’re good, but I find myself completely worn out by the end of the week, desperately keen for a bath and some quiet and solitude. Just me, hot water, and the weird gloing-gloing noise that water makes in your ears when your head’s almost under.

On Monday I was at the Foreign Office for a tour. It wasn’t hugely interesting, but then I should have known that beforehand — buildings have always just been buildings to me. On Tuesday I had a free evening so I set up a giant monitor and used it to spur me to finish my book.

No, not really. I played Civilization 5 and may have had a late night. It’s impossible not to just have one more turn on this game.

I also had a meeting cancelled on me; cancelled, in fact, twenty minutes after the meeting had started. That felt very unpleasant, but I’m trying to put a positive spin on it. All the same, I could feel all of that pent up nervous energy before a presentation still trying to escape. So I went for a long walk. It seemed to help. Nonetheless, I think that’s definitely contributed to my feeling of being drained and washed out.

Global Day of Code Retreat

I met more of my colleagues, particularly the ones who do Java. I also met lots of other new people; some people from Makers who were just starting to learn (but were still very impressive), some people who were already well established, and some people who couldn’t code but were very eager to learn. We worked in 40 minute blocks and then deleted all the code that we’d written, which was heart-rending the first time. And the second, actually, and every time after that. What was most interesting was the variety of code I found myself writing, even though the problem stayed the same. I also ate a lot of deep-fried sweet potato fries, and that felt somehow soul-improving.

I also did a tour of our offices, and that was fun because I got to use my ACTING VOICE, which is like my real voice but more confident and willing to do call-and-response.

If I met my acting voice in the real world, I would hate it and be desperately envious of it at the same time.

I also started the morning with a discussion about existentialism and stoicism, because I did a degree that does not pertain to programming except in all the important ways.

It was loads of fun, and re-inspired me to be more test-driven in my developing. I love stuff like this, particularly mentoring, because it reminds how much I enjoy doing it. Sometimes it’s easy to lose sight of the fact that I’ve completely, ridiculously lucked out with this job.

This is how I work… give or take.

I’m really glad I got nominated for this by Amanda, because I’m on leave this week and so my weeknotes are pretty sparse.

Location: London, at least for the next two or three years. I’d probably swap it for anywhere, as long as the opportunity looked like a challenge.
Current Gig: Software developer for the Government Digital Service, which is part of the Cabinet Office
Current mobile device: OnePlus 5
Current computer: Work machine is a giant, 15 inch Macbook Pro. It is annoyingly heavy and a pain to cart around. My personal laptop is a lightweight Dell XPS running Ubuntu 18.04 
One word that best describes how you work: Calmly

First of all, tell us a little about your background and how you got to where you are today.

I have an undergraduate degree in French Studies, which at first glance doesn’t look like a strong foundation on which to base a career in software development. It is, but it’s not why I’m where I am now. I started to get interested in digital generally while at university, and when I was elected as the Public Relations person for a society I really got stuck into it — building an entire website and logo rebrand from scratch.


They’re still using the logo, but the website was definitely not worth saving. So when I left university I applied for the Civil Service’s Fast Stream programme, specialising in digital and technology. I was successful, and spent the next two years moving around government departments, doing a huge spread of interesting things while also learning to code in my spare time. I wrote software to try to balance a conference I organised, a prototype web service for the Fast Stream programme, and even mentored someone as they built a way for script writers to extract scenes from their teleplays. I saw an opportunity to be a CTO and seized that: I failed a lot but started to get better at managing people, at seeing the wider scope, and at strategic thinking.

In June of 2018 I rejoined the Civil Service, hoping to build up my technical skills and progress further in the organisation.

Take us through a recent workday.

I tend to be up at 0600 and out of the door by 0730. I catch a train to London Bridge and then walk the rest of the way to the office, because that way I at least do some activity and I get to see London glittering and stirring in morning sun. If it’s a Monday, I’ll buy a Big Issue from Sharon, who’s at the south side of London Bridge.

That puts me in the office for about 0815, and I get straight into my inbox and catch up on Slack. I hate Slack. It’s an all-day meeting that you can’t miss, and so once I’m caught up I’m unlikely to look at it again until lunchtime. Ditto my inbox.

I’ll look over any pull requests I’ve been assigned, and start working through the shortest ones first.⁰ Before I know it it’s standup time — an agile ceremony I facilitate. The point of it is to raise blockers, celebrate successes, and reassess work that seems to be dragging. We’re always done in 15 minutes, which means I can get back to my desk and write code for a couple of hours before lunch.

I try to bring my own lunch and find people to eat it with, thereby forcing them to eat lunch and do it away from their desk. I also get positive affirmation from people looking at my lunch and making admiring/jealous noises, which is really all I can ask for.

The afternoon usually has one or two meetings in it — I might attend a show and tell for the programme, I could be mentoring a colleague, or even just grabbing coffee with my manager to get feedback on how I’m doing and where I can improve. I have a brilliant manager, and they’re definitely a big part of why I’m so excited to work where I do.

At 1500 the team takes a pause to fika: we have a cup of tea and a civilised biscuit and chat about non-work stuff. It’s been really effective at bringing us all a bit closer together, but I still can’t not say it in the voice of Pikachu.


By 1630 I’m out of the door and on the way home, walking back towards the centre of town to catch a train home where I can get back to procrastinating instead of writing my book, like I ought to.

What apps, gadgets, or tools can’t you live without?

My phone

My laptop

My pen and a pad of paper

Apps: PyCharm is my software for writing software (how meta!); Twitter is a hellsite but also where many cool people hang out so I use it and try to avoid the nazis. I use Podcast Addict for, well, podcasts, and then on my laptop I’ll use Google Suite avidly. I also use the classic version of budgeting software YNAB, because otherwise I spend money like there’s no tomorrow. Finally, I use the Chess.com chess app to try to get less bad at chess.

So far I have got less good, so there are some questions to be answered there.


Finally, I have the Duolingo app, where I brush up my French and improve my Russian.

What’s your best shortcut or life hack?

Turn off all your notifications. I get notified on my phone if someone in my urgent contacts list calls, and I get notified on my computer if I have a meeting in five minutes.

That’s it.

It makes me a better developer and a significantly more chilled out person. If someone really needs you they’ll come and find you, or they’ll figure the thing out by themselves.

Alongside this: ask the question in the opening. Don’t send a slack message that says:

Hey, how’s it going?

Because then I’ll respond in two hours saying:

Hey, great thanks! You?

And then you’ll ask your question, and you’ve wasted a load of time. Give the question and as much context as you can in the message, and then I can devote my entire brain to it in one go.

If you’re thinking “But Jonathan, if I have to write a long and complex message detailing the context I wouldn’t use Slack, I’d write an email!”:

Yes. Please do that.

Take us through an interesting, unusual, or finicky process you have in place at work.

Here’s how I get my payslips:

  1. I access the guest account on one of four machines specifically kept for this purpose.
  2. I log into the VPN using my ID and password
  3. I open the special link to our HR software
  4. As this is the guest account, I don’t have Lastpass installed, so I need to dig around in my phone to find the password I’ve used for this.
  5. I log in
  6. I view my payslip
  7. I download it as a PDF
  8. I log into my Google Suite account, once again painfully typing in a long and complex password.
  9. I do my second factor approval
  10. I save the payslip into my Google Drive
  11. I log off
  12. I take a long walk, muttering blood curses on the providers of this software to the 14th generation and occasionally screaming

I should point out that it’s getting better. It’s still a righteous pain in the behind, and the worst thing is knowing how much better it could be.

How do you keep track of what you have to do?

Many To Do lists on many Trello cards on many Trello boards

What’s your favourite side project?

The Book, with which I have a love-hate relationship.

What are you currently reading, or what do you recommend?

Just finished Frankenstein in Baghdad

Who else would you like to see answer these questions?

I’d like to see any Deputy Directors or above in my organisation answer these, as I’m interested to see how it differs. Oh, and Jenny Vass.

What’s the best advice you’ve ever received?

“Don’t stand there, mouth agape, waiting for your turn to speak. Listen. Hear me. Understand the depth and experience and history behind these words, because what I’m saying isn’t filler in the film of your life before the monologue that wows the crowd. It’s worth a damn. Act like it.”


⁰ A pull request is a way for someone to add code to your or your team’s repository. They write the code they think should be added, and then notify you that they’d like to add it. You run through it and generally give feedback, and they iterate it until you’re happy. It’s a process that is completely fraught with social anxiety, but it’s also the best way we’ve got to ensure code consistency. Here’s an example of my team giving excellent feedback on one of my pull requests.

S03E09: and now we wait

I had an interview this week for a place on our internal development scheme for senior managers, because that’s what I am.⁰ I’m really excited to find out how it went, which is bad news for me — because I’m not going to find out until mid-December.¹

At the same time, I’ve managed to seize an hour of time with the senior person I need to talk to about the Project, but that won’t be until the week after next. If nothing else, it’ll be good to get feedback on whether the swardley map I put in has had the desired outcome.²

Oh, but at least I’ve got code to write. That’s a genuine pleasure, and even more so now that I’ve collected a mentee who wants to learn. She’s working on a project that’s enormously close to my heart, and it’s an opportunity for me to teach what I love. It’s a complex, interesting problem and coding is itself a weird quasi-art form, so there’s going to be plenty of challenge.

Before one codes, of course, one has to install a bazillion libraries.³

Cookie monster drumming its fingers on the table

This week has been a very good, very gentle kind of week. Wednesday was the most meeting-heavy week, but at least an hour of that was because I went to One Team Gov breakfast. I’ve been plugging away at a new GDPR-flavoured feature and it’s a doozy, but I’ve finally mostly finished. I got some really great feedback and a chance to pair with my senior on it, so all in all it’s been a really good week.

Hum. That feels a bit dull really. This weekend I was at Open Data Camp which was at my old university, so I went on a massive illustrated trip down memory lane. It starts here, if you’d like to read more:

The university’s representative is an old friend of mine, and I’ve volunteered myself to come up and talk to students about the importance of squishy human-ness to software development.

I also appear to have volunteered myself, over the course of the day, to give a TED talk on topographical intelligence. I was not expecting the weekend to go like this, but go like this it has and go with it I shall.

That — alongside some very nice compliments⁴ from people who found themselves in an impromptu mapping session with me — has kicked me into writing more of the Book, along with thinking about how I’d present it as a talk without just nicking all swardley’s slides and regurgitating his keynote from Google and oh god what have I got myself in for.⁵

After a day like that everyone else went and extroverted⁶ in the pub, but I couldn’t bear to do any more talking so headed back to my hotel for a steak and an evening of writing. And here’s its culmination.

How incredibly meta that is.


⁰ An accident, I assure you, but a happy one
¹ Cue the finger twiddling.
² Still, it’s a while away. Back to the twiddling.
³ Wow, these fingers are going to be twiddling champs before much longer.
⁴ “I‘ve never seen anyone but Simon present it with such a focus”
⁵ I’ve just fear-written a thousand words, although the swearing is probably going to have to come out
⁶ and bled, poor Jamie!

A funny story

Here’s a joke:

A little while ago — a time that feels at once sharply present and mistily distant — my partner and I broke up. I’ve been commenting on Twitter since then that the director of my life has gone into full hack overdrive. Your hero walked out of his office to see that ex’s name plastered on the side of a bus, for example. Anyone watching this in the cinema would roll their eyes at the heavy-handedness of the symbolism.

We had a comfortable life, they and I. We had a cat. We had good jobs in similar industries. We were complimentary, and we were complementary. Something changed though: they were thinking about settling down; about the prospect of children; about roots.

I can’t stand the idea. I’m not interested in children, and I don’t think it would be a good thing for someone who isn’t interested in having children to have them. I don’t want that much commitment: I like being able to upend my life. I want to move to Canada for a little while, and maybe live in Europe again. So that was that.

It’s funny, though. Because now they’ve not got a partner, they’ve taken a job that could involve a lot of international travel and will propel them upwards. And me? I’ve started learning their mother tongue with a more serious bent than I ever did when we were together, and I’m interviewing for ever more senior things. We’re —honestly, you’ll laugh — we’re more attractive to each other now than ever before.

Isn’t that funny? Together, what we want is incompatible. Apart, we’re precisely what the other wants.

Like I said: it’s a joke.

I didn’t say it was funny, though.