S02E04: Windin’ down for Christmas

The end of the year is rapidly approaching, which has meant the slow wind down of most customer requests. This has, in turn, lent me more time to do some strategic thinking about my next few years and draw maps.

Monday was a nice quiet day. A client got in touch asking about delivery of their software. We’d actually already delivered it, so there’s a clear lesson from me in clarifying communications and making sure that the definition of done for new work includes letting the client know. It’s the first time it’s happened and I suspect it’s a function of everyone being much busier. It’s annoying, but thankfully not the end of the world. We’ve got some content to tweak and then they’ll be live.

Development has moved to committing to main branch via pull requests. It’s a good first step towards DevOps, but it’s causing a little bit of initial slowness as we identify areas we need to improve before we can go all the way. I’m glad we’re surfacing them, but it’s an unforeseen hurdle that’s slowing down delivery of new features. I’m happy with this tradeoff as it’ll make us faster in the long run — even if it means I’ve got fewer fun new features to show off.

Tuesday was a mammoth technical day. I spoke to the lead dev about our technical debt: as a startup, we generated loads for the same reason that running away from monstrous creatures builds up lactic acid in the muscles and carbon dioxide in the lungs. If the choice is between short-term pain and long-term death, we always choose short-term pain — but now that we’re successful, we’ve got to get rid of it in order to scale to the next order of magnitude. It’s better than over-engineering in the first place, because that guarantees you‘ll never get feedback from your audience, but it means we go from rapid delivery to a slightly more pedestrian pace as we, metaphorically speaking, lie down on the ground and grip our sides, saying “I’m fine, I’m fine, just-woo-agh-just give me a minute”.¹

You’re absolutely right, Bojack

The SMT was the usual fiery discussion. The three of us believe in being honest with each other, and discussion can get very frank. We overran by half an hour, and that’s really frustrating. For colleagues with childcare, 1730 is a hard stop and if we can’t ensure we run to time we risk losing those excellent colleagues. I’m going to spend some time over Christmas thinking about the best way to make this work: longer, less frequent meetings? Shorter, more frequent? Or just an aggressive approach to keeping to time? If you’ve got experience in this field please add your ideas in the comments below.

On Wednesday we had our retrospective. There was a lot of good to talk about, some issues that simply refuse to die, and one solid critique of my behaviour as a leader. There are times when I get too carried away with my experience and knowledge and dictate instructions to the team. There are a couple of things wrong with this:

  • From a leadership perspective: it takes away agency from my team, and makes them feel as if I don’t believe they would have come to this conclusion/technology/answer by themselves. That’s a shitty way to make people feel.
  • From a senior management perspective: my time is valuable. If I’m spending it telling people things they already know, I’m wasting my most valuable resource.
  • From a financial officer perspective: I’m responsible for the costs incurred from development time, and if they’re spending time listening to me tell them something they already know then I’m using company money inefficiently.

Management is really bloody difficult, and a skill I’m still learning. The fact my team are comfortable calling me out when I mess up is something I count as a massive positive.

I’m getting there. I think. I hope?

Thursday was my last lecture in FoC and my last mentoring session of the year. I feel slightly better armed for the year ahead, both in terms of my work and my degree. With the morning free I acquired secret Santa presents for all and sundry: Oxford Street at 10am on a Thursday meant most shops were still relatively quiet. I did my best to walk almost everywhere in preparation for the office party later on.


After the office party I headed over to see some former DDaT colleagues in the Fountain and Ink. It’s really nice to see them and talk about what’s going on in Government and on the scheme, as well as getting an understanding of what works and what doesn’t in their current roles so I can use that learning in my own recruitment campaigns.

Plus, any opportunity to catch up on gossip is an opportunity I can’t miss.

Friday started our next sprint. We’ve got some people off over the duration, but enough of the team are working that we’ve committed to getting some work out of the door. I spent some time with my colleague Felix, who’s gone from zero coding knowledge to building something exciting that fills a very niche user need. In order to exceed his objective he’s got to have it deployed by the end of the year, and it looks like he’s on track. I’m really pleased that he’s making such excellent progress — in part because it’s just great to see people shine, but also because it adds evidence to my belief that giving people space, resources, and a clear direction gets quality results.

There’s another bit of management that sucks — I would have absolutely loved to take the project myself, but I don’t have the time. Instead, I have to support someone who’ll take longer to get it done than I would — but, more importantly, they’ll learn valuable skills and I’ll be able to use the time more efficiently.

I’ve seen managers either claim an idea and then never progress it², frustrating everyone else, or reluctantly letting someone else take it before barging in and rewriting the whole thing. I’m doing my best not to do that.


¹ I went with Bojack Horseman, but this was my first pick.

First image when I Google “stitch”, and you’d better believe it’s staying

² A concept called “cookie licking”. No, really.

S02E03: Do you want to build a program?

Yup, now it’s in your head too

This week was also a pretty bad week pain-wise. My infection from last week retreated from my jaw and made its last stand in my sinuses, which left me absolutely crippled with agonising pain.

Everything about humans is badly designed.⁰

Monday was a fantastically busy day as I caught up with emails and colleagues. I chatted architecture with our new technical architect and outlined my vision for how our technology will scale to support half a million users in the next two years¹. It’s (relatively) small fry after government, but for our tiny startup it’s absolutely huge. It’s exciting, but as ever I’m far away from the actual fun of making stuff. As a consequence I set myself the challenge of building a proof of concept microservice out of some of our data over Christmas.

I spent the evening at university. Mondays are Principles of Programming. I’m self-taught and have built little web services here and there, both as proof-of-concept for managers while in the service and as hobby items for my own amusement. As a result I’ve struggled with rehashing hashes, listening to lists and or even getting into ints.


However, this session was so much better as it got into the theory of Object-Oriented-Programming, or OOP.

Tangential reference or not, if you ever think I’m not going to reference Pitch Perfect you’re wrong.

It was really interesting to see all the ways Python both is, and is pretending really hard to be, an OOP language. It was a great way to wind up the penultimate session of the term.

Tuesday I got feedback on our Posting Template. Our current Fast Streamer is brilliant, and I’m incredibly eager to get some more of them seconded out to us. It’s a great program and huge props to the whole team for keeping it going. They’re also using Google Docs, so I got comments back in a useful format and could edit the same document, ensuring we only had one version and didn’t have to fill up inboxes with “Version 3.1-final-final-corrections-final”.

From the incredible presentation “Git for Humans” by Alice Bartlett

Bam. Whole thing finished and submitted in half a day. #winning

At home I felt surprisingly tired and sore around the head, but figured it was the last remnants of the infection. It sort of was.

On Wednesday I woke up in debilitating agony. It was a sharp, focused pain around the right side of my face, from cheek to temple but focused particularly around my eye.

It was the least fun I think I’ve ever had.

It pretty much ruined my day, to be honest.

However, the rest of my team was getting on with brilliant work. One of our devs delivered a really exciting new product — an automated onboarding tool for new clients. Considering that this process usually takes about a week of staff time, this is a giant leap forward and something I’m so excited to see. We’re trialling it internally on our existing queue of customers (in case it explodes in our faces) but we’re eventually going to roll it out as a service to let new clients totally self-on board and further reduce costs.

Saving taxpayers’ money remains my eternal goal

Thursday was my usual day off, and when I woke up all trace of the infection and illness had disappeared. There isn’t a single better feeling, nor any sentiment more alienating, than getting over an illness. You suddenly enjoy tiny pleasures. You breathe deeply. You look around yourself and marvel at the world. You dance through raindrops, relishing the cold sting that’s wiped away by the warmth of your moving, working body.

That last bit’s more literal. I usually walk from Cannon Street to university, because I’m basically a sedentary creature and I like food so a walk is the best way to keep myself at least vaguely in shape. Usually the prospect of a 45 minute walk in a downpour would dishearten me, but today I danced. I splashed in puddles.

I upturned my face and drank in the glory of sensation.

Then I got to St Pauls and my feet were squishing when I walked so I caught the tube the rest of the way.

My Information systems class was the last one of the term. Next week is revision, but since the term’s lectures have been focused on Agile and Scrum I’m reasonably confident I know the content. In Fundamentals of Computing we examined problems that computers can’t solve and watched this video, which if I’m honest I’m still utterly, utterly perplexed by.

Answers on a postcard please.

I also got to see Louise Cato and Sam Villis in the evening. These two women are brilliant, smart, insightful people and the opportunity to talk to them is so valuable that it made the perfect end to the day. There was a lot to reflect on during the journey home, and yet more ideas for my final project. I’ve started keeping a note of ideas, and they currently run the gamut of fun open-source things to money-making pie-in-the-sky ideas.²

Finally, on Friday, I was back in the office. We did some backlog grooming and trimmed out some more of the ancient dead wood. This regular cleaning forces us to reconsider whether the idea we had is the right one, and whether or not it’s the right time for it. If it’s the right idea at the wrong time, it goes into our roadmap. If it’s the wrong idea, then it goes in the bin and we ask ourselves how it ended up in our backlog in the first place.

Whenever the answer is “because we didn’t have a roadmap” I do a happy dance.

I also prepped the agenda for our SMT next Tuesday and got a debrief from the CEO about a potential new product. A client we pitched to a little while ago has come back and told us they’ve got funding, so we need to talk about how we’ll approach it and what we’ll need. It’s a really exciting opportunity, and if the funding is at the right level it means I’ll be able to look at bringing in another team member very soon to own it.

Exciting times.

Unrelated to that — for now — I also spoke to a friend who’s unsatisfied in their job and looking to move. The dissatisfaction is caused by a lack of control over their career, learning, and development. It’s a stupid way for organisations to lose brilliant people, but a great lesson for someone just starting out in business.

By the by — if you’re reading this and thinking that the employee might be one of yours, please take this as a sign from the universe to start trying to fix your culture.³

(self, others)

I’ve got early sight of Miguel Grinberg’s new Python Mega Tutorial, which takes novice Python developers through their first web app. I think it’s brilliant: well written, clear, and perfect for someone who’d like to do web development but doesn’t know where to start.

I’m quite keen to get more Civil Servants coding because I think a basic understanding of building tech and how easy/not-at-all-easy it is is a valuable thing. I know my audience is mostly digital Civil Servants, so: if I offered a course that covered basic Python, then building a rudimentary web service, then (if you’re interested) more complex services — would you be interested? Would your colleagues be interested? Does such a thing already exist?

Let me know here or on Twitter.

#listening

I’m going to see Hamilton: An American Musical in January which is NEXT FREAKING MONTH, PEOPLE so that soundtrack’s been on for every day this week and will continue. I’m halfway to working out whether I can make it our hold music.

https://open.spotify.com/embed/album/1kCHru7uhxBUdzkm4gzRQc


⁰ Except for that example beloved by morons everywhere, which is the proximity of anus and genitalia. If someone ever makes this joke to you, ask them where else they would put the part of the body that excretes. Hands? Belly button? Feet?

¹ Eek.

² That’s my pastry products delivered by drone idea, by the way

³ It could be you. If it isn’t now it will be. Fix it!

S02E02: Betrayed by my own face

This week is sponsored by the feeling of pain.

Content note: I talk about throwing up in this blog⁰.

Having returned from a weekend that involved many bottles of incredibly good vodka, I returned home with a twinge in my jaw. Being socialised as a man required me to say that to everyone who asked, because agonising pain is not something chaps are really allowed to admit to unless your arm’s been separated from your body.¹

As a result, on Monday I shotgunned a couple of ibuprofen on an empty stomach and then promptly vomited noisily. I’m not sure if that was the ibuprofen or the fact that airports are hideous cesspits, but it happened and it was not enjoyable. Side note: there is a TARDIS-like quality to the amount of stuff you think is inside you and the amount that somehow comes out of you when you’re ill. It’s totally weird. I tried to take the day off, but work kept coming in. I answered the questions I could and stayed close to the bathroom in case of further eruptions.


On Tuesday my boss went to speak to one of our first ever clients and had a really good, really frank discussion about how they’ve been using the product so far. In general the feedback was good but there are a few items we really need to get moving on. There were also a couple of really exciting suggestions that we’ve added to our roadmap.² Emails remained continuous. They’re a good sign that our content isn’t up to scratch, but frustratingly the responses take up the time we’d use to write the content. It’s an absolutely frustrating vicious circle.

My jaw hurt even more. My partner reminded me that we live within a ten minute walk of two dentist surgeries, that things don’t just get better by themselves, and that if I continued to sit around whining but refusing to do anything about it she’d smother me in my sleep.

Wednesday: I called the surgery and got an appointment the same day for 12 o’clock. It cost me £20.³ It was an extremely short appointment that went something like this:

Me: I think it’s infected

Doctor: Let’s have a look. Oh yeah, that’s definitely infected. I’m going to drip some anesthetic on it.

Me, seeing the doctor reach for a syringe whose needle was at least as long as my leg⁴: I’m fine with tablets, honestly.⁵

Her, laughing: Oh no, this is just so I can drip it more accurately! Haha!

Me, externally: Haha!

Me, internally: This is how I die.⁶

The rest of the day was dedicated to preparing Jira tickets for some custom work for a new client. I made some progress on automating this process and I’ve got some ideas about how to make it better. I’m currently tossing up between storing multiple API keys and writing something that will act as a pass-through in Python, or learning Google’s Java-esque equivalent of Microsoft VBA.⁷

You’re goddamn right it is Ben

On Thursday I met a friend for lunch and realised that I was a bit early⁸, so headed to class and did some more work on my assignments. I’m not allowed to open source them because plagiarism?, but once they’ve been graded I’ll be able to show them to you. I know you’re keen.

Friday was the first day of a new sprint, and we spent the afternoon on our retro. I felt it had been very sketchy on my part due to extended not-being-there. We had a good discussion that focused on what I need to do to enable the team to work with even less input from me. One of my major bugbears was that we’ve been blindsided by a couple of high priority items, so we trimmed 20% of the lowest priority work from this sprint in an attempt to give ourselves a buffer. If we get extra work we can take it on, and if not we’ll have that extra work to get on with. I’m looking forward to the next retro to see how it works out.

We’re also looking at changing our pricing structure, so we spent a couple of hours going over some models in Google sheets. I love Google sheets. It’s not as robust as some Excel workbooks I saw in Government, but that’s because those workbooks were being used instead of databases. Yes, they don’t work that well. But they’re not supposed to. The fact that you’ve made your car run on thousands of hamsters in wheels doesn’t mean you should recommend it to anyone else. Nor should you complain about the lack of hamsters in your new car.

What went well

  • Sorted out my tooth!
  • Tweet about how being a grown up is about toothache got good engagement!
  • That’s about it
  • Yikes

What didn’t go well

  • General illness

I am literally incapable of not doing this, and now neither can you
  • General feeling of not having enough time, more than likely caused by illness

SEE?
  • Toothache which persists even now. Boo.

⁰ So help me Michael

¹ This is Deeply Unhealthy, and with any luck I’ll get over it soon.

² We have a public roadmap that I suspect almost nobody looks at, but to be honest it’s more for me to store ideas away from the trash-fire that is Jira.

³ Good lord, what a beautiful thing universal healthcare is

⁴ Literally.

⁵ I’m just not okay with needles

⁶ I did not die, apparently

⁷ This is my favorite kind of conundrum

⁸ A week early to be specific

S02E01: Some time later

I go up progressively more early every morning this week. It was awful until I got up at 0430, at which point it was better. It’s a demonstration of sleep cycles, and one great lesson is that I can get up at 0430 and still do a good day of work and social interaction as well as have time for a run.

I am absolutely not going to do that, but it’s a great proof of concept.

Monday

Monday’s overwhelming feeling was total, freezing cold. The heater in our office has packed up for the winter and is spending the season on Southeastern trains, helping them implement sauna mode across the network. I spent a not-inconsiderate amount of time capturing requirements for an upcoming client. It’s currently a very, very labour intensive process so I need to find a way to automate it in a way that’s useful to Mark, who implements the customisations. The work is best done as a batch piece, and so is the collection — but unfortunately not the same batch. I have to transform it somewhere in the middle, or push the ability to customise all the way out to the client.

Tuesday

Tuesday felt non-stop. I got a solid series of hour-long working periods done, including writing up the role template for Felix Tomlinson’s potential replacement. He’s done sterling work, and we’re hopeful we can get a couple of new people in to replace him and develop their digital skills. Speaking to him was immensely useful but sometimes a little difficult, as he picked apart some of the flakier, vaguer things that are in the role description. Some of it is necessary because we’re asked now what we’ll be doing from March to September. As a startup there’s always a chance we’ll pivot, and specificity ties us down too much.

I’ve never seen F.R.I.E.N.D.S, but with all those initials I assume it’s a forerunner to Agents of S.H.I.EL.D

The form itself is a Word Doc with macros in it, which our Google Docs struggled with. It was a little frustrating because an online form would be more accessible, but on the other hand if you’ve got to hand the forms out to people then lines in a spreadsheet are really hard to grasp.

I also had the chance to catch up with Morgan, who with her husband offered some wonderfully frank advice about my own career and future. It was occasionally brutal, but that’s what’s best about advice from people you love and trust. Brutality gets to the heart of the problem and expresses it painfully so that you can identify it and deal with it.

Wednesday

Last day in the office before I head to Poland with my old conference team. I’m in love with the fact that we still hang out and I hope the current team end up the same. This time we headed to Poland, where one of our number is at the College of Europe in Warsaw.

There were a few customer queries, and one that I couldn’t fix and had to pass back to development. There have been a few like this that have disrupted our sprints; it slows down delivery of the bigger items but it can’t be helped. It’s frustrating though, so I’m going to see if I’ve got the funds to get one more developer so we can have a rota of people on “bug-fixing” duty.

I also can’t work out if that should include me. Do you expect senior management to be fixing bugs in code, or just giving you the headroom to do it yourself?

In the last hour of the day two momentous things happened. First, our Fast Streamer published a blog off the back of Michael Brunton-Spall’s excellent post⁰. As he’s not on Twitter, I posted it and then my phone blew up.¹ A few solid conversations followed, but annoyingly they’re all on Twitter so poor Felix only has my word to go on that it got a reaction. If you’ve not seen it, read it here and then go and argue with him about it. Here’s my favourite pull quote from it:

The “death march” bit was mine. The prediction was slightly off. It was the second.

I also had a great board meeting where we signed off strategic goals for the next five years. I like having an idea of what I’ve delivering to, and I’m absolutely loving the freedom I get in how to deliver it.

Thursday

Thursday morning I ironed and packed my suitcase before heading into university. The Information Systems module — essentially a beginner’s guide to Scrum — is quite old hat for me now, but I still enjoy attending the lectures. There are definitely benefits to going all the way back to basics, as I’ve always worked with teams that had been doing Scrum for a while.

Fundamentals of computing is still a total mind-melt. Don’t ask.

Friday

Friday is a blur of waking up at 0430, being ready to leave at 0500, realising I’d forgotten my passport at 0501 and waking up my partner as I looked for it. To her everlasting credit she didn’t kill me on the spot, so that saved my weekend. Then to Luton, to Poland, and once there a tour of the College of Europe’s campus and two bottles of gin between 9 people. And some vodka. And apparently I had to give a giant stuffed bear a fireman’s lift.

I am at least as perplexed as you are by this image

Weekend

We walked around the old Jewish ghetto. It’s full of information, and the whole thing is incredible. The absolute viciousness with which people not so distant from us methodically, efficiently, and indifferently murdered millions of others is hard to get your head around until you walk round a place that contained 300,000 people and then didn’t any more.

We also ate, talked, debated endlessly and did the things you do when you meet with old friends. I love it. I love them.



Reading

@_why’s (poignant) guide to Ruby: it’s the most hilarious guidebook to a programming language I’ve ever read. Please go and read it, particularly if I’ve promised to teach you how to code.

Feeling

Sore. My final wisdom tooth took the opportunity this weekend to erupt through my gums. Unwise in the extreme.

Thinking

About statistical analysis of estimates against time, and whether story points represent the best balance between accuracy and effort. There’ll be another post about this soon.


⁰ “Agile” and “linguistic prescriptivism” are mutually exclusive, so the first digital type to whine that it’s “blog post” and not “blog” is going to get my literal boot up their bum.

¹ Not literally.

S02E00: Here’s what you missed

We’re back, and better than ever

Welcome back, sports fans. It’s been a while. Things have happened.

University: I’ve got three modules this term. Principles of Programming I, Fundamentals of Computing, and Information Systems — or PoP, FoC, and IS. PoP is for beginners and teaches Python; I’ve been using it for a little while in my side projects and so I’m reasonably confident. IS deals mostly with Agile, particularly Scrum — another framework I’m confident using. As a consequence I’m focusing most of my time on FoC, which is just as well because it’s blowing my tiny mind.

Pictured: my tiny mind

There’s focus on concepts like infinite sets and 32-bit integers and hungry philosophers, and my brain is getting soggier all the time. Computers, it turns out, are extremely complicated.

This season is going to see a steady increase in workload and complexity, so balancing it is going to be one of the key character arcs that unfold. I take one day a week to study, but my lectures are only in the afternoon. So instead of studying in the mornings I nose around Whitehall and ask friends and former colleagues for coffee and to pick their brains about things. It has been an effective tactic so far.

Work: I’m pulled a million different ways at the moment, and I’m quite enjoying it. I’m taking care of a product and sponsoring a move to IaaS; I’m writing up job descriptions; and I’m planning the long-term technology strategy for the whole organisation. Doing this mostly means taking a punt on where culture is moving and then skating in that direction. Some initial steps are easy and have a great benefit: putting our application into a container has improved how quickly we can get new features and fixes into production.

I’m also trying to learn as much as I can about making remote work work from as many people as I can, including people who think it’s a terrible idea. Finding out what they feel makes it terrible gives me a strong indication of things to avoid.

Oh, and I got business cards!

This is naturally going to form the complementary arc to the university story. Working only four days a week and keeping everything rolling demands I keep a strict handle on what I agree to do. This is hard for two reasons:

  1. Doing cool but ultimately frivolous stuff has to be deprioritised (boo)
  2. Boring but necessary tasks have to take precedence (boo)
  3. Sometimes you think of something at the last minute that has to be included, and you end up going over your self-imposed limits

Off-by-one jokes are the second best thing in the world

Our Fast Streamer’s suggestion that we run stand-ups in our little team has massively helped with this, because it’s surfaced a lot of 2s before they become 3s.

There are going to be enormous challenges ahead. I’ve drawn a lot of useful advice from the rest of the community, and their continued stories have encouraged me to jump back in.

Here’s to a new season.

Nodes, weights, Uber and Tinder

I’m talking about matching at the moment, because it’s a niche interest of mine and also because I attended a talk on mentoring. I’ve already spoken about how quickly matching people gets ugly and difficult. The programme leader was experiencing this first hand — having grown the programme by 500%, he was starting to struggle to make matches based on qualitative data. He asked me to write something up to offer potential solutions. Here’s my very brief rundown.

There are a few methods by which people are matched. These can be widely categorised into:

  • Monogamous relationships
  • Polyamorous relationships
  • Relationships for the collective good

Let’s start with polyamory

Many-to-one, one-to-many, and many-to-many

This is the approach taken by most dating websites. The optimal outcome isn’t that one person is matched to one person. Instead the algorithm matches individuals to multiple others and then lets the users decide what to do next. Applying this approach to a mentor/mentee matching program is problematic, because the optimal outcome is a 1:1 exclusive pairing.

Relationships for the collective good

A typical example given for this kind of matching is employees and tasks. Every employee can carry out every task, but there’s a different cost in time — which I measure in dollars — for each employee. As a manager, I want to make sure I’m spending my employees’ time in the most efficient way.⁰ I lay out my table as in the previous blog and then find the “cheapest” route through.


Here the optimal matches are:

  • Armond: Clean bathroom
  • Francine: Sweep floors
  • Herbert: Wash windows

As you can see, it would be easy to convert tasks to people and calculate a score based on a number of traits that you’d like to match. The reason I call these “collective good matches” is because the people in them have no say. Armond may prefer to wash windows because he likes to see the sky, for example, but it is inefficient at an organisational level to match him to that task — unless part of our matching score takes into account the employee’s desire to do the task.¹

Although this task is easy with a 3 x 3 grid, at scale it requires an algorithm to manage.

Monogamous relationships

These relationships are a one-to-one match, like the ones above. We divide the population into groups and ask them to list their preferences. We can then apply an algorithm to match the two groups together. Unlike the above, where the group as a whole gets the best matches, this approach strives towards individual optimisation. This problem is usually stated as follows:

Given n men and n women, where each person has ranked all members of the opposite sex in order of preference, marry the men and women together such that there are no two people of opposite sex who would both rather have each other than their current partners. When there are no such pairs of people, the set of marriages is deemed stable.²

The population you’re matching is divided into two groups; proposers and reviewers. Proposers ask their highest preference; if the reviewer prefers this proposal to their current partner then they will dump their current parter and hitch themselves to the proposer; if not, they’ll turn down the proposer.³ Once every proposer has asked, the process begins again, continuing until the round in which no reviewers swap partners.

A consequence of this process is that the preferences of the proposers are always privileged over the preferences of the reviewer.

Conclusion
Applying a monogamous model to the problem of mentor-mentee matches benefits the preferences of one group over the other. If this approach were to be taken, I’d recommend making the mentor the group whose preferences are most respected, as they are the more scarce resource. By contrast, applying the collective good approach might lead to poorer individual matches but will ensure everyone gets a good match, as opposed to a mix of lower and higher scoring matches.

A hybrid approach that generates a “collective good” score and uses that to proxy the list of preferences that would be generated by a “monogamous relationship” approach seems to offer the best of both worlds. It would generate the preferences “blind” — avoiding gender and race bias that we all have — as well as removing the necessity for mentors and mentees to exhaustively research and analyse hundreds of profiles from the opposing group.


⁰ The manager in this scenario is of course entirely fictional
¹ Whether or not it is wise for managers to take their employees’ feelings into account when assigning tasks is not really a question: it is self-evidently a good idea.
² For the purposes of this problem, heteronormativity reigns supreme.
³ Equally, reviewers would rather have someone than no-one

The difficulty of matching stuff

Math is hard.

This is something I’ve been getting my head around since I was about 16. I’m still doing it, and I love it. I love it mostly for the pure math problems which have zero application in real life, but there are occasional fun⁰ opportunities to apply them in real life.

Here’s an example: factorials get really big, really quickly. Factorials are written as n!, and represent n · (n-1) · (n-2)…2 · 1

For example, 3! is 3 · 2 · 1 = 6

4! is 24. 5! is 120. 6! is 720. 10! is three million, six hundred and twenty-eight thousand, eight hundred, or 3,628,800

Factorials get big quickly.

This is a nice fact, but not much use in the real world. Here’s a real world example.

Suppose there are three equally qualified candidates for positions, and three such positions. There are consequently 3! ways we could combine candidates and positions to produce the map of all possible outcomes. You can prove this for yourself by combining A, B, and C with 1, 2, 3 in as many ways as you can with no repetition. You should get the answer 6.

With just six routes through this table, we can just guess — and since everyone’s equally qualified it doesn’t really matter which we pick.

However, if we map candidate skills against skills required, we’ll have a much easier time — each value will get weighted, and we ought to be able to just pick the best ones. If the combo of candidate A and position 2 is the best fit, we’ll pick that one. Easy. And with just three candidates and three positions, odds are it’ll work out so everyone gets the thing they’re best at.¹

So far so good. What if you’ve got 10 candidates and 10 positions, you’ve carried out your calculations and found there’s a tie. To whom do you give the job? And what do you do with the loser? Moving them to their next best match might displace someone better suited:

A1 and B3 both have a score of 9.8 out of 10. B loses. Their next highest score is 7.2 out of 10 for position 8 - but candidate F has a solid 8.0 match for that post. 

You can keep shuffling B down, but eventually they’ll just be stuck with something terrible. You can tell B there’s no position for them — but you’ll be short a person. Or you can move everyone down one, which means everyone will be a bit less happy but you keep candidate B.²

And this is with just 10 candidates, 10 posts, and one tie. A real world, enterprise level version of this could theoretically try to match 400 people with 600 posts. It produces a matrix of 240,000 combinations which has 5.35 x 10¹⁰³² potential routes through it, assuming all candidates are equally well suited to all roles.

That number, by the way, runs out of words to describe it. 10¹⁰⁰ is a Googol, so this is ten Googols. It is a number with one thousand and thirty-three numbers in it. It is a Big Number.

Observe:

5,349,055,099,791,222,867,187,074,878,849,812,372,270,834,990,332,768,891,756,043,927,972,982,546,032,972,559,726,383,830,743,508,574,638,022,032,481,142,092,511,357,370,849,179,536,196,848,984,869,209,987,772,507,742,298,732,994,097,058,599,528,836,347,757,929,295,404,338,673,081,575,870,821,723,692,460,079,706,482,570,287,371,963,070,384,183,395,271,508,817,740,452,356,360,205,405,400,076,328,077,644,366,177,018,904,774,763,787,067,793,674,505,130,374,461,018,071,722,240,219,209,876,026,069,450,357,838,084,927,634,991,911,768,043,405,616,194,537,924,746,255,578,756,684,605,143,768,424,385,681,939,432,642,425,814,964,007,849,933,980,999,312,614,383,494,093,438,927,613,485,586,994,292,340,164,848,044,583,451,835,112,558,785,201,059,853,998,236,545,462,756,538,819,695,086,094,618,612,782,015,955,527,844,062,494,242,962,102,300,424,533,466,777,986,339,498,159,574,662,860,552,719,611,464,078,607,471,138,005,485,406,570,846,602,444,041,750,951,396,025,805,373,283,969,451,966,517,879,164,056,082,649,886,456,017,744,490,326,662,089,509,233,283,231,413,336,626,082,184,360,916,289,000,458,006,921,777,156,174,201,492,790,817,391,810,355,604,710,545,596,318,097,153,721,524,067,736,727,114,993,499,894,144,945,959,049,336,408,040,800,256,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000

It’s also only approximately right.As you can see, after a certain number of millions my laptop gave up entirely and just assumed that the lower numbers were zeros.

Of course that means for every role you can just roll a 600-sided die, but quite frankly that thing is for Dungeons and Dragons only and besides takes three people to roll.

So you try out algorithms, which is where we’ll move next time.


⁰ Yes, fun

¹ If you were particularly perverse, or ran a graduate training scheme, you might do the inverse: select the combinations with the lowest value to force the candidates to improve to meet the job spec.

² I don’t actually have answers here, I’m just posing the question.

S01 E10

The Dragon and the Wolf

This is the season finale. There are a couple of story arcs budding and some that will be closed off-screen. Those reading the book of my daily life have long since given up yelling at the producer’s additions, subtractions, and poetic license and are instead now enjoying the Easter eggs thrown in as knowing winks to a shared joke.

This season came at a grotesquely perfect moment. I was in the right place professionally, the right job was advertised, the timing came together seamlessly. The whole thing seems engineered in sitcom land. On reflection, I’ve enjoyed other weeknoters’ writing more: their truths resonate all the louder with me because I know they are in the past of my life — or the future.

There’s going to be a short hiatus. Meeting with my fellow weeknoters I realised that for all of us these notes have been an outlet. They’re quasi-private and, for me, have been a sort of passive aggressive means of effecting change. For an introvert like me, unable to come up with a fully-formed idea in the confines of a noisy meeting, it’s an opportunity to talk about change I’d like to make. A rehearsal for the real thing.

But next season I’ll be moving into a role where I’ve got access to all the levers. I can’t grouse that management aren’t fixing things, because that’s me now. I’ve got to put in place a culture of openness such that everyone I work with will be willing and able and feel supported to join this brilliant, vibrant, extelligent[0] community. I hope you’ll continue to join me as I try, fail, and try again. I hope you’ll continue to be supportive, kind, and helpful.

If nothing else, I hope you continue to encourage me to drink four caipirinhas on a school night and talk about Doing Good late into the evening.


Monday was spent in absolutely back to back meetings and concluded with a visit to Monroe, a smallish client with an interesting new proposition. I also lined up further client meetings. Only one item went onto my promise tracker, which probably reflects the frantic nature of my day. As a sidenote, this tracker is turning up some genuinely valuable data. Even though I’m on hiatus next week, I may push something out via twitter.

On Tuesday I took two new starters on a whistlestop tour of our software, both front and back. The new starters work for our sister company, and will be using our software day-to-day. Presenting it to staff gives me an opportunity to see it through fresh eyes and helps again to identify areas we need to work on. It was really nice to meet them and to get a handle on how we’ll manage — remote staff working as account managers is a model I’d like to adopt in the near future.[1] I met Morgan in the afternoon and had an extremely positive discussion with some good pointers for me. We talked about the future, and nihilism, and why it is that us millennials feel entitled to things like nice colleagues, remote working, and a work-life balance.[2]

Wednesday I had giant, hour-long stretches of uninterrupted time and consequently got loads done. I spent an hour analysing and commenting on a shared process document, then reviewed and commented on it with the CEO of the company that supplies our developers. His guidance is really valuable and he’s totally open to trying out new ways of working. My director and I finally booked travel, so we’re going to go out and see the team in late September. I’m hugely excited to get into a room and talk about containerisation, software architecture, and automating deployment into cloud infrastructure.


They’re based in Spain, which means it’ll be unconscionably hot, but as long as there’s air conditioning I’m sure I’ll be fine.

I also got to meet some of the other members of the family, and it was an absolute joy. It’s already been covered everywhere else, but my conclusions were:

  • two and a half drinks is just enough to spark conversations that are deep, connected, witty, reflective, and the best.
  • Three drinks is just enough to make you forget everything that was said half a drink ago but remember it was brilliant[3]
  • There are more ways through the Civil Service than I thought possible, and on reflection I don’t know if I’d do it again the way I did
  • is a glorious community and I’m proud to be part of it

On Thursday I was at a training session where I got to learn how to present confidently. Two things I was told to focus on where time-keeping and snappier titles. This was the original, apparently “unsnappy” title:

I don’t see it personally

So I tweaked it to:


and that got a better reaction. To be fair, the colour is a lot more exciting.

Friday I worked from home as I was throwing a little inner party an I wanted to log off at 5.30 and get cooking. In future, I’d like to be able to work from home without feeling like I need a reason — or, rather, without needing a special reason. S02 character arc sorted.

For those interested I made a steak and ale pie. I made too much of it. I will be eating it for the next week.

Fade to black.

Credits.


Reading/Learning: Docker. Always Docker. But it’s meant I’ve drawn my first logical architecture diagram in a year, which is pleasing.

Listening: to trains not running over the next week, as I work from home to avoid the chaos at the London Terminals


[0] Extelligence is the intelligence that lives outside your head, and means your development can increase exponentially by accessing it.

[1] Remote work means our talent pool expands beyond those who live within the M25, and although London is still the greatest city in the world I am willing to accept there may be excellent candidates outwith its bounds.

[2] There is a connection between these things.

[3] This is widely understood to be the worst feeling in the world.

S01 E09

The one before the season finale

This has been an incredibly difficult week. Everything is happening simultaneously, and I don’t feel like I can keep on top of it. I’m struck by the fact that we limit WIP to reduce waste, and that has a knock-on effect: it forces us to stop promising due dates. That’s a benefit to us, because it means we can deliver quality work that’s ready when it’s ready, but it’s bad for customers who won’t necessarily know when they’ll need to put aside time for training.

There’s also the law of diminishing returns. I would like to track every item of work I’m doing, down to the smallest task, on a board. However, I’d need to include “writing things on the board” on the board. Then I’d need to include ‘writing “writing things on the board”’ on the board, and that level of recursion makes my head ‘splodey.

Pictured: ‘splodey head

In any case — I’m going to try, for the next sprint, to at least scribble down everything I promise to do, explicit or implicit, with customers, colleagues or myself, and track what happens to those promises. Whether I deliver (early, on time or late), deprioritise, or abandon them all together. I’d love to make this open, but some of it will be sensitive, and I don’t want to add an extra step into the workflow of figuring that out before I add it to my list.

I’m going to use a Google form to collect data and Google sheets to do the calculations. I’ll publish the resultant data in a couple of weeks, so stay tuned for that.

Here’s the Google Script code:

https://gist.github.com/jonodrew/7ffbfc977ad08e47c4cf2aff02df4a0b.js

YEAH, SPREADSHEETS

And now: the week

Monday was a day full of frustrations that pulled me this way and that. A day where I didn’t feel like anything really progressed, but I still managed to use up all my time. I hate days like that.

Tuesday we finished up a new client’s instance — Madison[0]. I got to do a tiny bit of graphic design and my usual testing. Automating this is a constant theme of work and something I’m now hoping to get done by the end of this year — the first promise I’ll need to enter into my tracker.

Wednesday I presented two papers to my board and received some good feedback. I can’t talk about the content yet, but I’m really hopeful that with some tweaks we can them policy. Fingers crossed.

Kimmy has my back

I also chatted to someone joining the DaT Fast Stream in September to chat about the scheme and their future plans. I’m leaving, and I know it’s the right thing for me, but seeing other people preparing to start this journey is making me hyper-nostalgic. I hope it dies down, because re-applying in five years is going to look silly.

Thursday I went through some customisations for Munroe[1] and then sat down and tried to plan out how we could make this process less labour intensive.

I appreciate this is now bordering on an obsession

I got out of the office a little early to eat steak at High Timber (recommended) and see Much Ado About Nothing at the Globe (also recommend, with caveats). The production is set in the Mexican revolution, and the actors are all extremely British. I found this quite jarring; had this been set in the Haitian revolution, there would have been no thought of getting a majority-white cast to throw in some patois and appropriate national dress — yet for some reason Mexican culture appears to be far game. This at a time when the US President was elected on a platform of anti-Mexican, wall-building policies. It is beautiful. I’m just not convinced that’s a good enough reason to do it.

Friday is retrospective day, and we had a great conversation about what went well and what didn’t go well. I’ve seen a big improvement in these conversations and we all came away with things to work on for the next sprint. I’m a great advocate for retros and for giving time to them: you can’t knock them out quickly and it’s incredibly important to reflect, as a team, on where things are going wrong — and to do it frequently. If you’re not doing it now, try doing it in two weeks time. Put time in everyone’s diaries and battle through the awkwardness.

I’ve had very little time to do my 10% of time this week, but I am making good progress with my O’Reilly book on Docker. I’ve got slightly stuck on my current chapter — I suspect because it needs more than an hour to properly absorb — so I’m hoping to carve out an afternoon next week to crack through it. (That’s promise number two!)


[0] Madison the president, as opposed to the place in Wisconsin. New clients get US president codenames[1]

[1] Not the codenames of US presidents, because it turns out they’re actually a thing, not made up by the West Wing, and the current POTUS codename is “Mogul”

S01 E08

The one where I go back to work

Hooooo boy

This has been…a week. I’m in a Starbucks by Embankment with a juice, watching the world go by, and trying my best to decompress.

50% tastier when it’s got your name on it. True fact

Monday was almost entirely taken up with briefings from my very little team about what had happened in my absence. As I mentioned last time, not as much of the process I’d put in place survived my leaving. This makes me worry that it’s just me keeping things moving, and that’s absolutely terrible for us because it means we can only scale as far as I can work. I came away with a lot to think about, but the overriding element is automation: it seems to be the least complex answer to at least two problems. One subsequent problem of automation, however, would leap out and surprise me later in the week.

On Tuesday I met up with my peer-mentor. Morgan is a former Fast Streamer and has been mentioned here before. She had some great insights for me, and I’m hopeful I returned the favour. She also mentioned a role in her team she’s hoping to get a DaT Fast Streamer to fill and for a moment I was tempted to head back — the opportunities to do amazing technical work are absolutely there, so don’t let anyone tell you they aren’t. Richard, who heads up the firm we employ for development, was in the office too — so it was an incredibly good opportunity to hash out some problems we’d been having and look at the longer term. We have Big Plans, and some details to work out. They’ll be published soon, because making things open makes them better.

On Wednesday I did my manual testing thing, going through completed tickets. Halfway through I was pulled out to do something else, and consequently a fairly large feature went on to our production servers without our clients getting warning. It’s a great feature, and it’s going to help — and for the most part it was welcomed — but I don’t want that to happen again. So if I can work out how to automate some of our processes, I’ll need to work out how to stop automating others.

I also presented a discussion paper to my boss. I like getting the bare bones of a discussion together, and letting a discussion flow from there. Some people recommend “strong opinions, weakly held” but to me that sounds like a recipe for a strong-minded senior person to bulldoze everyone else with rubbish ideas. What else does it require to make it work? If it’s an office full of extroverts then it might not be for me, a closet introvert.

Thursday I’d put aside half a day for Sprint Planning. It’s one of my favourite agile ceremonies, because there’s literally no better way to communicate to devs — particularly those in a remote team — precisely what you’re trying to achieve. I got some really valuable feedback about my user stories: they’re too vague with no clearly defined outcome. We had an explicit conversation about capacity, about what we expect from each other, and about clarity. We cleared up a lot. I’ve never been so confident about a future sprint.

We also finished in 2 hours. BOOM.

Then, right at the end of the day, I called a new client in the United States. Nothing prepares me for the accents in the Southern United States. They’re glorious, but I’ve only ever heard them in films. At some point I ought to head out there. Probably not soon though.

That day finished with bubbles and old colleagues and a couple of daiquiris that, it turns out, I insisted on shaking because I Am A Hipster Twat.

Friday was absolutely non-stop. New clients, like buses, have all clumped together and jumped on at the same time. I spent half a day collecting everything required to get them onboarded smoothly before leaping sideways into a meeting to talk about, among other things, IT provision and folder hierarchies.

I will always be the cool kid in my head

At the very last minute my US-based colleague and I managed to configure a client’s payment gateway to pay us at point of sale, as opposed to invoicing at the end of a period. It means our cashflow is better, and the client doesn’t need to spend any of their finance department’s time on invoices and the like.

I wrote up technical documentation on how to do it in future and called it a day. I felt absolutely drained, so went on a giant walk that took me from Southwark station to Charing Cross via North Lambeth and Westminster. Long walks — any exercise, really — absolutely relax me. There’s a glorious quote by Pratchett about a policeman’s walk, a sort of easy stroll where the swinging pendulum of the leg propels the body forward. It’s really stupid, but these kinds of mindless things: one foot, then the other, then the other — totally frees your brain from everything else.

So that’s why I wrote these notes now. Because I feel a little bit energised by juice and people walking by and strolling across the city.


What I’m reading: reactions to Google DudeBro’s manifesto, particularly those that have insights into how to avoid hiring them. This is my favourite. Also trying to self-correct my management, and this piece that I literally just read is resonating a lot. Check it out from my favourite CEO Jason Fried.

What I’m listening to: Ear Hustle. An absolutely breathtaking insight into the US prison system. The episode before last talked about solitary confinement. It’s intense. It’s messed up. It’s reminded me a lot of the sterling work MoJ digital do with prisoners: they’re people and pretending they’re not and locking them in circumstances that are deleterious to their mental health is, well, criminal.

What I’m learning: Docker. It might have some valuable applications in my context, and if not it’s very cool right now.

Hansel and Docker. Really hot right now.