S09E05: Title goes here

Three things:

  1. Advent of Code got really difficult, although at least partly because I’m forcing it to be difficult
  2. Work started to slow down, just as I started to get to grips with it
  3. I got some honest feedback that was the brutal reminder I needed to be more considerate

In reverse order:

I am really frustrated with myself that someone had to give me this feedback, because I’ve banged on about this endlessly myself. Senior people, I have written crossly on these very pages, should really think before they speak. They should remember that they’re senior people before they remember that they’re experts.

As with sex and food, good intentions are simply not enough. I fell a long way short of my intentions, stepping into someone else’s domain without proper consideration for the time they’d spent working on a problem. I jumped in already assuming that I knew more than they did, and with a pinch of wanting to prove that I could be valuable. I’m going to cut that out.

On the plus side, I’m so lucky that someone felt comfortable giving me that feedback. It shouldn’t be necessary, but at least I’ve had it, and now I can correct myself. So that’s good.

Work is starting to slow down for everyone, I think, because of the impending festivities. So emails are starting to bounce back from polite but firm out of offices (outs of office?). So out of a desire to write a little code, and to be useful, I’m covering a little information service. So far I’m not writing any backend code, but I am re-familiarising myself with GitHub Actions and the language we use to describe how we deploy code into a production environment. The language is called YAML, which stands for YAML Aint Markup Language. The first YAML stands for YAML Aint Markup Language. The first…

You get the picture. It’s recursive, which is a topic I covered last week and will likely cover again. In fact, it’s come up as I’ve been writing Python in a functional style. The other thing we insist on in functional programming is immutability: that things can’t change or be changed. You can create a copy, but that copy too can’t be changed. It forces you to think about things quite differently.

I’m finding myself applying that thought process to deploying code. The binary package that we deploy should ideally be immutable: nobody, even me as the developer, should be able to poke around inside it. If there’s a problem with it, we should fix the code once at source and then redeploy the binary. This is at odds with the traditional approach, which is caring for servers like they’re pets and jumping into them every so often to mess about with the environment or similar.

“Redeploy” is a weasel word here that actually covers a lot of work. The binary has to be properly tested, and once it’s tested, we want to promote it into a testing environment so people on our team can try their best to break it. From there, we want to promote exactly the same artefact into production. The slower we do this loop, the longer it takes to get changes into the hands of users.

This is why people like me obsess over small changes and automating tests as much as possible. This is what I’ll be working on over Christmas, I think.

Advent of Code got impossible this weekend, and it really killed my enthusiasm. I’m also finding I have less time? less desire? in these very dark evenings. Instead I’m just getting cosy with m’buddy Salem and drinking a lot of tea.

me and my feline buddy Salem having a cuddle

Maybe in January, eh.

S09E02: Making friends and walking the line

I am new in an organisation. As such I’m taking my favourite approach to learning how it works, which is getting stuck into recruitment and procurement. The reason I do this is because I think it’s one way to get a good sense of the organisation’s culture. You get to see what’s prioritised, what people value, what skills the organisation thinks it needs, and what price it values those skills.

Continue reading

S09E01: Secret Santa, apprenticeships, and a new job

I’ve started something new this week: a role at a new department. I’m spending the first week poking my nose into things, meeting people, and getting my hardware/software/note-taking approach sorted.

I’m currently getting stuck into Obsidian, which I use to take notes in Markdown. It’s got a lovely feature whereby it links together ideas, so I can tag notes about #Architecture and then see at a glance who else I’ve spoken to about it. I’m hopeful that this will help me make sense of the whole thing, as well as keeping a good record of what I’m actually doing.

So far I’ve met a lot of people and generated multiple pages of notes. The constellation of my connected thoughts is currently a little haphazard, but I’m looking forward to seeing how that’ll grow over the next couple of weeks.

The constellation of my thoughts: a series of dots connected by lines

My new department is very keen on apprenticeships and so, inspired by Terence, I’m going to sign myself up to something. Before long I’ll have as many letters after my name as are in my name.

Also this week: I wrote a tiny little bit of code and then used Twilio to set up my familial secret Santa. For any rational human being, this is a task achieved through the use of small slips of paper and a hat/bag/inside-out umbrella. My family – my extended family – is closer to a clan, and with the addition of rules such as “No one in your immediate family”, I wondered if perhaps we could get a robot to do it.

Of course we could. Much geekery ahead:

Let’s start with some data:


The parent_names property is useful, because we can use it to identify siblings, children, and parents – so that nobody ends up with someone in their immediate family. This can’t be done purely on family_name, because although Rickard and Arya share the same family_name they’re not in the same immediate family.

Here’s some code to match people together:

def score(person_one: dict, person_two: dict):
  """Good scores are low, bad scores are high"""
  if person_one.get("parent_names") == person_two.get("parent_names") 
  # these would be siblings or partners - for the purposes of this
  # code partners were modelled as siblings
  # hence my use of Game of Thrones as an example...
  or person_one.name in person_two.parent_names or person_two.name in person_one.parent_names:
  # these are parent-child or child-parent relationships
    return 1
    return 0

and here’s some code to calculate how every person matches with every other person:

import csv
import munkres
import itertools
import math

with open(family_data.csv) as the_clan:
  everyone = [score(*pairing) for pairing in itertools.product(csv.DictReader(the_clan), repeat=2)]
  square_size = math.sqrt(len(everyone))
  matrix = [lst[i:i + square_size] for i in range(0, len(everyone), square_size)]
  matches = munkres.Matrix(matrix).solve()
  # this returns pairings that match the ids in the table above
  return matches

I used this basic guide from Twilio to help write my function to send the messages.

# Download the helper library from https://www.twilio.com/docs/python/install
import os
from twilio.rest import Client

def send(recipient_number: str, gifter_name: str, giftee_name: str):
    account_sid = os.environ['TWILIO_ACCOUNT_SID']
    auth_token = os.environ['TWILIO_AUTH_TOKEN']
    client = Client(account_sid, auth_token)
    message_body = f"Dear {gifter_name}, you're going to be buying a present for {giftee_name} this year. " \
                   f"Don't forget to put some ideas in the WhatsApp group for your secret Santa! Lots of love, Santa"

    message = client.messages \


One cool feature of Twilio is that, if you chuck them £20 for an “upgraded” account, you can send texts where the “from” field can be a string, rather than a number. The upshot of this is that I could send messages that seemed to come from Santa!

S08E05: what value my words?

So. The last one of these sparked a bit of a conversation. I discovered that an automated aggregator was wholesale copying my blog (and presumably the blogs of everyone else there) from the Web Of Weeknotes site, and it didn’t sit well with me. I reacted badly to it, and I’m grateful to folks who were patient in explaining why and how it had happened.

I’ve been struggling to write this post since. I’ve been struggling because I reacted very strongly. I find it best to look at that reaction for a little while and work out where it’s come from.

I didn’t think I was possessive about my words until this week. I write professionally. I write code and I write letters and I write speeches, and all of them are regularly critiqued and re-written. Sometimes for the better, oftentimes not – but I have nonetheless sat happily by, punched my card at the end of the day, and not thought of it again.

I write a lot on the internet. I’ve got an email sign-up box, which means people I’ve never met can read my words on their devices, wherever they are. I don’t charge for them and I don’t run ads, so I’m not even missing out on potential income.

I also know for a fact that my writing is quite good – a strong 8 out of 10, if I were to self-assess – and that it has on occasion helped other people to discover or realise or come to terms with something. That’s something to be celebrated, and insisting on keeping my words specifically where they are – when it costs me nothing but clout and ego to let them go! – indicates uncomfortably what my “even over” is.

The last thing to say is that everything I have to say is embroidery on the edge of a tapestry that has been shaped by many other hands. My autism results in me reading something like 2 or 3 times more than most people, and consequently I’ve read more good and bad writing in my 30 years than I think some people will in entire lifetimes. My autism counts beats and knows the rhythms of the right phrase. It is my skilled and invisible dance partner. It is not a skill I have long-laboured for.

And even those skills that I have long-laboured over: I earn more than I need from them. When people tell the story of Picasso doodling for five seconds on a napkin and charging $30,000 because it “took a lifetime” I think, no it didn’t. It took five seconds – or it took a village of lifetimes. Whence that napkin, Picasso? Did you make it yourself? And that coffee? And that pencil? Yeah, it took you a lifetime of learning – a lifetime you could spend learning because other people were making sure you had napkins, and pencils, and coffee. And providing blood for your art, you contemptible twat.

This might sound somewhat communist and suspicious to you, and I can offer the following response: yes.

And yet.

There is something deep down in me that rebels against someone just wholesale re-posting something I’ve written. Once upon a time I’d have seized the opportunity to get that kind of free exposure. A terrible, terrible poem I wrote to score an internship was reprinted in Private Eye with a comment that was gently scathing. I was absolutely thrilled – though as I write this, I wonder who it was in that particular PR firm who leaked it to that esteemed organ.

My first reaction was fundamentally quite wrong, I think. I didn’t start writing my weeknotes to build a brand. If people get something from my writing, that is a Good Thing. If people seek me out for more writing, that would be a Nice Thing. But I would rather what I said was out there, even over being named.

So from here on in, everything I write here is licensed under Creative Commons. Help yourself.

After all, you helped me write it in the first place.

Creative Commons License
This work is licensed under a

Creative Commons Attribution 4.0 International License.

S08E03: Let’s talk about death

Alright, so you remember how last week – shut up, time is weird in the pandemic – last week I talked about how my organisation’s hiring rules meant I might be moving soon? It happened. I’m moving. Specifically, I’m moving to a small arm’s length body of another department to write code. I’ve got enough time, just, to close off all the things I’m doing and write good handovers for the rest.

I’ve also just finished Bojack Horseman, and it’s weighing on my mind.

So. Death, and finding meaning. Let’s go.

Content warning: I’m going to talk about death and grief in a metaphorical way. If that’s not for you right now, give it a miss.

Continue reading

S07E16: Rapid Response!

This week I was offered an opportunity that may seem deeply boring but I’m quite excited about: developing a business case at pace from scratch. Well, scratch-ish. From itch, maybe? Anyway, it’s a great way to end the season: an exciting cliffhanger, with your hero hunched over their laptop.

I’m not really hunched. I’ve actually got a really lovely setup. But it adds drama.

Continue reading

S07E15: another good week

This week I applied to a speculative position to write speeches, which is both my dream job and the thing I fear most of all in the world. You can read my application at the end.

I also pushed harder than I’ve ever pushed before to fix (in my opinion) the biggest, most boring problem in my organisation. If you’re in my organisation, you know what it is. If you’re not, it’s the lack of cats.

Finally: I had another great week at work. I completed my first automation commission, and I’m waiting to see what the ‘client’ thinks about it. I had a couple of meetings where I actually felt confident I added value, which was an exciting novelty. And I iterated my objectives, improving them, and making it clearer to myself what my next steps are for my long term goals.

Really, an absolutely fantastic week. Well done everyone.

Continue reading

S07E14: a reminder of why we do this

I had a great week, and it’s reminded me of why I do what I do. Thinking about the big picture stuff, and helping other people take a step back and think about it, is such an exciting way to spend my days. Plus, I had some genuinely interesting meetings and progress is happening in certain quarters. Basically, it’s been a great week, and it’s reminded me of why I do what I do.

Not that I can tell you what I do, of course, but let me reassure you that’s it fun.

Continue reading