Tuesday, 31 December 2019

The year that was, 2019

It's the last day of 2019 and time to look back on what has been a trying year. This time last year I wrote "2019 needs to be a year where I focus on sorting out my personal life" and as I start writing this, I can honestly say by that metric 2019 has been a year of utter failure. Maybe as I write more I'll change my mind, but my overriding impression of this year has been work work work. This needs to change in 2020 and fortunately I've got a new creative outlet for this coming year which I find exciting. In the meantime, let's look at what I have achieved. Maybe next year it wont all be Star Trek Bridge Crew and Strange Brigade.

  • 16 posts on this blog (17 including this one) - fifth consecutive year of a post per month
  • weekly posts through November as part of NaBloPloMo2019
  • started running a weekly exercise class in the park in Bath
  • joined the hospitality team in church
  • ran a D&D game for a part of the year
  • another year of the Year in Pictures site, up to 27 photographers
  • 97 contributions to various projects on github (which is, on reflection, hardly an achievement)
  • loads of photos on my flickr stream

My writing has increased at the cost of ... more or less everything else. The list above is feeble, but I need to remember that it's not quite as bad as it looks. I am reading a lot more, and while I make the same joke every year about playing videogames they do help me relax and so playing more this year is actually a success in and of itself. Indeed, it was one of my resolutions. Speaking of which:

Resolution count: 4/10 - down on last year. Sad times.

Although I don't reflect on work here, I do need to remember that while exhausting this year has been a success - the high point being my becoming a Senior Civil Servant. I set myself two "work resolutions" and managed to score 1.5/2 which is much better and, unfortunately, demonstrates where too much of my focus has been. This year I need to work out how to manage to keep a life around work.

More importantly, next year needs to be about something other than work. As a priority, I need to sort out my health - both physical and mental - and I need to positively engage with a community. Fortunately I seem to have found one I like, so that is a good start. Ideally I'd like to re-engage with some positive social change outside of work - charity work or similar. But I need to sort out the foundations first, so we'll call that a stretch goal.

Brace for another decade.

Sunday, 15 December 2019

Fixing supercharging on a Huawei P10 Plus

I've been using a Huawei P10 plus for nearly two years. A while back I started having trouble with the supercharging capability. Sometimes it would work, sometimes it would just charge normally. A new cable sorted that, but would degrade. Eventually it reached the point where it would only charge normally and sometimes, not even then. The cable would drop out too. Very worrying.

I poked around online quite a bit early on and found various approaches for fixing this problem involving clearing caches and so on. They didn't work. However, finally I have a solution - using an arcane bit of tech and some mystic knowledge. However, before I share we need a DISCLAIMER. I am in no way responsible for loss of data, equipment, life, or sanity if you attempt this technique.

Ok, big reveal time. I took a sewing needle and dug around in the charging port.

Seriously. A frighting amount of pocket lint came out and now the cable fits snuggly, locks in place properly and charges perfectly - even supercharging is back.

Now, you are probably thinking "wow, I'm glad you shared your genius 'poke at it a bit' approach - that was totally worth a blog post". However, this forgets two important facts. Firstly - when I was looking into fixes last time, nobody else mentioned this. Genuinely, there might be someone out there who finds this useful. Secondly - I want to share my technical wins. Even when they are pathetic.

I'm convinced there is something of a design flaw here. I do not have dirty pockets and I've not had this problem with any other phone I've owned. I've had a friend tell me that he's had a lesser version of this happen to him and it's only happened since the switch to USB-C so maybe it's something to do with the shape of the socket. This sounds like a good reason to move to wireless charging to me.

Of course, now I don't have an excuse to buy a new phone that supports it...

Saturday, 30 November 2019

Reflecting on NaBloPoMo

Well, today is the last day of November and the last day of NaBloPoMo. That's five posts in five weeks (including this one). How did it go?

Firstly, it's worth acknowledging that this has been the worst month for this kind of thing. I've been on leave for one week, and away for a few weekends so my normal writing topics and opportunities have been thrown to the winds. Couple this with some extremely difficult weeks in the office giving me no desire whatsoever to write in the evenings and let's just say that it hasn't been easy.

On the positive side, it has been nice to see my blog grow more quickly, I don't think the less thought out posts have been much worse, and I have enjoyed experiencing this with the small community that has attempted NaBloPoMo. I'm also pleased that I have managed to set myself a goal and achieve it (posting on each weekend) even if I did cheat a bit with one of the posts.

On other hand, the pressure to write when I haven't felt like writing has been a bit of a problem. This is the motivation I use throughout the year, however committing to a monthly post means I have weekends free in between so this cadence is less intrusive. I've definitely made decisions to write over doing something else (such as coding) over this period purely because of the challenge and even as I write this I know I'd rather be cooking and playing on a MUD - I'm putting off fun and relaxation in order to write this reflection. When I'm at low energy and low ebb (such as now) this can be dangerous so I'm glad it's only a few weeks - and even more so that I didn't even attempt a daily post. I think that would require a radically different approach to blogging from me.

So will I do it again? Probably. I'm not likely to push it too hard if I'm on my own, but if a group is keen to give it a go again next year I'll be on board. I guess what I'm saying is that the true spirit of NaBloPoMo is the friends made along the way.

And I still hate the name.



This post is the fifth of five written in NaBloPoMo - the National Blogpost Month which, yes, is a thing. My plan is to write one post a weekend for the month of November. Due to some amazing planning, that means I have to write five posts rather than the four you might immediately expect. These posts will be a bit shorter than normal most likely and all of the posts will be tagged with (sigh) NaBloPoMo2019.

Sunday, 24 November 2019

Failing to relax

This is going to be a brain dump and may not have an actual point. You have been warned.

I've just had a week off work. Time to relax, recharge and reset. Only ... it hasn't worked. My normal pattern for time off is a few days doing very little, then I'm ready to re-engage with the world around me and I get a few days doing some kind of chunky project. This time, it took until Thursday before I managed to think about dragging myself back into the real world and I found myself wishing my week off was starting at the end of the week.

At the same time, the various activities I use to enthuse myself haven't worked either. I can't write, as the two main outputs for my writing are this blog and RPGs. This blog is increasingly (and deliberately) distilling my thinking and learning from the office which is very useful in general, but not something I want to be writing when I'm supposed to be disconnected from work.

My life in roleplaying games at the moment is largely dead, thanks to weird work / life patterns so there isn't much scope for writing there. Even when I do get into a game, I find myself wanting to hide at the back more than I used to. I don't fancy playing a character making significant decisions that can affect large groups of people when that is literally my day job these days.

I can turn to coding. Unfortunately, I'm between projects at the moment and starting a new one is much less fun than writing some code to fix specific problems. Anyway, writing code is hardly the best way to avoid thinking of work - last time I picked anything up, I spent my time looking at testing infrastructure and different ways of populating test data.

This leaves me in a difficult position. There is a hard question about what I actually do to relax. But more importantly, I think I need to ask some very pointed questions about why it is so hard in the first place. Why does it take a whole week away from work before I feel like I've actually left? Am I really saying that I should only take holiday in two week blocks? That doesn't seem healthy - if true, it feels like work is taking far too much out of me on an ongoing basis. So what do I do about that? What CAN I do about that? Wouldn't it be great if I had an answer to that question?

Still, I got a blog post out of it...



This post is the fourth of five written in NaBloPoMo - the National Blogpost Month which, yes, is a thing. My plan is to write one post a weekend for the month of November. Due to some amazing planning, that means I have to write five posts rather than the four you might immediately expect. These posts will be a bit shorter than normal most likely and all of the posts will be tagged with (sigh) NaBloPoMo2019.

Tuesday, 19 November 2019

Fun in the cold, dark mud

Over the summer, while staying at Lee Abbey, I went to a short daily exercise class which consisted of 15 minutes of flailing around to music. A short and stupid conversation with a friend from Bath later, and I found myself charged with setting up a similar session in Bath. Except weekly, and for longer.

This is going to be a "how to run an exercise class" post. Before we get going there needs to be a MASSIVE DISCLAIMER that I am not in any way trained, qualified or insured. If you do anything here, or indeed turn up to the session you do so at your own risk.

That out of the way, this is how I run a high intensity training session.

Time and place


The hardest part is the location. I'm lucky enough to live within easy walk of Victoria Park in Bath, which is an expanse of grass big enough to play some music without bothering anyone other than the ducks and a few dogs. As the weather gets worse it's going to be interesting. We're already coming back covered in mud so I'm polling all the attendees to see who has access to places with a roof. We meet at 8.30 on a Saturday morning, because who wants to be in bed when you can be cold and wet in the dark?

Community and communications


Most of the fun comes from convincing folk to join the group. We stay in contact via a WhatsApp group for instance messaging, and faster excuses. The groups has about 10 people in it, and I reckon about half have ever turned up.

Exercise routines


I've chosen to run the sessions in a tabata format. That is, for each exercise we do 8 runs of 20 seconds with a 10 second rest in between. In theory, the first is supposed to be hit hard to a target for the next 7 but that is something that varies from person to person. We do 8 exercises, plus a warm-up and warm-down and the whole thing last about 45 mins.

This isn't true tabata - it goes on for far too long, for one. But nobody wants to go out to the park in the dark and wet for 5 mins.

If you've been to an exercise class in the past you'll know the basic exercises. We don't do anything clever, and certainly nothing that needs any skill to teach. I trawled the internet, looking for sites with some interesting exercises on them that do not require any equipment and came up with a list. I remix the set slightly each week, to get a blend of hard cardio and more strength based routines and they go on my exercise spreadsheet, because my life is spreadsheets. That sheet has a few workable sessions, if you'd like something to get started as well as links to the sessions on Interval Timer (see below).

Running the session


To run the session, I use a couple of apps on my phone and a bluetooth speaker. My speaker of choice is the Anker Soundcore because it's waterproof and apparently runs on magic dust as it never, ever needs charging.

I use Google Play for the music (see below) and Seconds Pro as the timer (also available on iOS). This does cost the princely sum of £4.50, but for the cost of a beer it's great.

The secret weapon of all this is the site Interval Timer. This allows me to create the classes on a desktop PC before uploading them to my phone (by emailing myself the link). All I need to do on the phone is remember to turn on the audio alerts in the setup for the individual routine.

Bring the noise


Finally, the music. Some people think you can exercise to anything. They are wrong. There is a perfect balance of beats per minute, high energy, and emphasis on the treble so it cuts through as everything goes dark. Most important is that it infuriatingly tugs at your memory because you KNOW this song but you can't remember WHERE FROM or WHAT IT IS but while you're thinking about that you're not thinking about the fact you're lying in cold mud in the dark at 8.30 on a Saturday morning.

Basically, you want 90s dance music. If you're not thinking about Saturday Night or remembering that Rhythm is a Dancer, you're doing it wrong.

And happiness!


And that is it! Walk to the park, connect the speaker, start the music, start the timer and off you go!

With success, you too could create something wonderful like this:

Bath HIIT results



This post is the third of five written in NaBloPoMo - the National Blogpost Month which, yes, is a thing. My plan is to write one post a weekend for the month of November. Due to some amazing planning, that means I have to write five posts rather than the four you might immediately expect. These posts will be a bit shorter than normal most likely and all of the posts will be tagged with (sigh) NaBloPoMo2019.

Sunday, 10 November 2019

Governance or trust?

Since this series seems to be "Tom has a half-formed thought" let's look at governance vs trust. I regularly find myself having to find a comfortable place between the two and it's an interesting balancing act.

At one end of this spectrum, people rightly want to be trusted (and feel trusted, but that's a different post). When I ask "is X in a good place?" and the answer is "yes" that should be enough for me. My leadership team is highly skilled and I do trust them to do the right things.

However, at the other end of this spectrum, good governance tells me that I should have extensive metrics in place for the definition of "good" and that data flows straight to me so I don't have to ask this question, I can just look. I've already asked "give me these metrics and that will show me what you're doing".

I don't like either approach. I am not doing my job correctly if I don't have a clear understanding of what my technical leadership is doing and the decisions they are making. I also can't represent them effectively to the wider organisation without more detailed information. Ultimately, this hands-off approach leaves everyone at risk - while one can't really do the wrong thing when there are no parameters, with no specific questions being asked or answered, it's impossible to say someone did the right thing either. This is a serious problem when something goes wrong - and something always goes wrong eventually.

And I certainly don't want a deluge of data. I want to know that data is going to the right person and being acted upon. The right person isn't me - I have enough to do without interpreting unending raw data. This is why we have distributed leadership, and an empowered hierarchy. More importantly, the interpretation of the hard data is different in each area. I need to get to the story, and know the data is there if I need to dig into it.

Generally, I find that empowered autonomy is an excellent way to do things, however for the sake of everyone involved there has to be defined edges to that autonomy. That allows individuals to focus on their area, and gives me a structure for trust in the context of governance without it becoming intrusive. In practice, this means that I'm setting wide definitions and mostly looking at a traffic light rating system for ongoing reporting - giving very coarse-grained answers to my questions. This keeps a good balance between trust and governance. The raw data and interpretation of it is kept distributed where it belongs, but the specifics of each area means that questions are being asked and answered. The answers are trusted, but because the specifics are defined (can this be built? is the code linted? etc) there is enough of a shared understanding of what we mean by "yes" or "green". It also gives me a route to ask for the working, if there is need. It gives me what I need - a highlight of the areas that need discussion, and (hopefully) a sea of green for all the things that are fine.

Governance AND trust. I think.



This post is the second of five written in NaBloPoMo - the National Blogpost Month which, yes, is a thing. My plan is to write one post a weekend for the month of November. Due to some amazing planning, that means I have to write five posts rather than the four you might immediately expect. These posts will be a bit shorter than normal most likely and all of the posts will be tagged with (sigh) NaBloPoMo2019.

Sunday, 3 November 2019

Growing is intimidating

What would you do if you weren't afraid?

Not exactly the most original question in the world, but I've found it a very important one in my career. Moving to GDS and London were very big, very frightening steps for me. Later, my manager and mentor left the organisation and I had to step into his shoes - another huge and terrifying step which plunged me into a very different working environment. Then later again, my role was reassessed and deemed a Senior Civil Servant role - and the game changed again.

This came to mind recently when I was talking about next steps with a friend. We were discussing a job that, on first look, was huge and terrifying. As we talked, we broke the problem down and it became a lot less frightening and started to look distinctly manageable. The scary part remaining was the change in scope and perspective.

On reflection, this is also true of many of the earlier changes I faced in my professional life. It wasn't so much the change in circumstances that scared me, it was the required shift in the scope and therefore the potential risks from failure. Moving to GDS, suddenly I had to think about the wide development needs of all of GOV.UK - the website which provides information from the government to the nation. Then, becoming Head of Software Engineering, I expanded that to other corners of GDS as well as accepting responsibility for the careers and development of every technologist working there. Now that is all still true, but I'm also involved in the future shape and function of the whole Cabinet Office and my role has influence much wider than that.

Each time, considering the problem has been much more frightening than actually dealing with it. Each problem has turned out to be a collection of smaller, and distinctly more manageable problems but with a shift in breadth which has made them look far more difficult.

It's not been easy, for sure. I've had to learn new skills and new approaches (especially around dealing with ambiguity), but that is hard work and not in itself something I find overly scary. I've had to learn to allow myself the space for the mental reset to deal with the new context - definitely something I have messed up more than once, with unhelpful side effects.

There is a world of difference between "terrifying" and "hard work" though. The latter is something to get through. The former can be a hard block to something new and interesting. Certainly, forcing myself (or being forced...) to work through it has utterly changed my life and "what would you do if you weren't afraid?" now sits alongside "ask and answer the obvious question" and "what would make you happy from your next five years?" as trite, but very important questions at the heart of how I think about working life.



This post is the first of five written in NaBloPoMo - the National Blogpost Month which, yes, is a thing. My plan is to write one post a weekend for the month of November. Due to some amazing planning, that means I have to write five posts rather than the four you might immediately expect. These posts will be a bit shorter than normal most likely and all of the posts will be tagged with (sigh) NaBloPoMo2019.

Sunday, 27 October 2019

Mental health checkin

Back in January 2018, I wrote a post about recovering from some pretty bad experiences. Nearly two years on it's time to check in, celebrate success and declare myself completely ok again. Because that's how mental health works, right?

Yeah, I'm fine. No problems here.

Reading back, I'm reminded that two of the most powerful things I did back then were to set my sights on some things that made me happy (partly by identifying some of the things that didn't) and create positive feedback loops around them. I was getting back into the habit of creating things and achieving some of my goals. I was starting to lose some weight and work at my fitness. Now in the future I have to take a hard look at myself and see which areas have worked, which haven't and which are at risk of backsliding. Then I can set some more targets and attempt to achieve them.

Why am I writing a post about this? Well, as I've written about before, writing helps me arrange thoughts into something logical and practical. It's like rubber ducking, but with a keyboard. It also puts out a public declaration of intent. While nobody will ever hold me to these, it helps me focus my mind by declaring a definition of done. It's possibly a negative experience to force myself to do something because I've committed to unnamed Other but it does work as a motivation, so it'll have to do at the moment.

On the health front, I managed to lose a huge chunk of weight (hurrah!) then I put an annoying amount of it back on (sigh) which has resulted in much unhappiness. On the plus side, I am significantly healthier than I was at the start, so this isn't a yoyo situation because my yos are different sizes. However, emotionally this journey is a total failure. I'm going to have to adjust my diet and eating patterns again, and mess with my exercise routine. This is something I (like many others) find very rough and the key needs to be finding some exercise I really enjoy and want to really commit myself. And lo, time problems.

Speaking of time, I built up some bits of hobbies (primarily coding and game writing) which worked well. More recently, however, I've been finding that I haven't had time to code and I've not been impressed with the quality of my own writing. Some of this is a lack of energy and I place a significant amount of the reason for this on work. My job changed again and settling into the new role has, for a variety of reasons, taken a toll on me. If I'm going to keep doing it, there needs to be some changes. I need to be more rigorous about leaving at a sensible time each day, and I need to find ways of experiencing positivity as well as crushing waves of negativity.

I've also got other hobby-related problems to sort out. They are supposed to be fun, so I need to recapture the enjoyment. I'm not going to go into specifics, but most of the things I used to enjoy have slowly turned into a grinding chore and I need to find a way of fixing that or put an end to them before they become yet another drain of energy.

This is all very negative. Before, I found positive experiences and amplified their effects as well as shut down some negative behaviour. At the moment, everything in my head is about fixing sources of unhappiness, which means lots of DON'Ts. Almost nobody finds that approach motivating or uplifting. I am struggling to turn this around as so much of my time is rammed full of draining activities, adding something positive just feels like a chore.

The point of writing these posts is to take a step back and really think about what is going on. This time, it is all about managing my time - and I think it's important that it's not about optimising my time. I can't just cram more in, I need to get much much better at creating time. That way I can "waste" more time on activities I enjoy, while still keeping up the useful things that I do. I have found that simply having spare time - time not pre-allocated - is something that makes me happy.

I wonder if Hermione can lend me her time-turner?

Saturday, 28 September 2019

Timesheets make me angry

I have a strong hatred of timesheets. I had to fill them in early in my career and every time the organisation increased the importance of these things, I found myself getting more miserable and also working fewer hours. While I chase others off home at a sensible time, I am for myself a "get it done" person at work. However when it was in black and white, I wasn't going to stick around.

For me, timesheets are an invisible eye watching all the time. They are a piece of bureaucracy that adds nothing other than a sense of unease. No place I've worked has been short changed by my hours and counting them places value in the wrong part of the job. I like to think the work I deliver is why I'm paid, not the time spent sitting at a desk? Timesheets also emphasise the power dynamics of "minion" and "management" when the manager either doesn't timesheet or effectively signs their own one.

Looking back, this has impacted my mental health over the years without me realising it - and this is without ever working in an environment which actually cares about them. I don't recall ever having a conversation with my line managers about the contents of my timesheets. I can only imagine what it would have been like if they were reviewed "properly" as they certainly are in some places.

So at one point, many years ago, I just stopped. I could have written a script to keep filling the things in, of course, but I prefer to tackle this kind of thing head-on so I informed my manager I wasn't going to do it any more. I expected at least a discussion and maybe an argument. He just shrugged. I was surprised at the sense of release I felt getting rid of the creeping anxiety and cognitive load associated with The Organisation looking over my shoulder - so surprised, I'm still thinking about it a decade later.

So why am I writing about these things now? This was one of the events I keep reflecting on in my current role. There are significant human (and specifically dehumanising) costs to process and as managers we owe it to those we look after to keep those processes as light and relevant as possible. There are things we have to do, but let's keep it minimal and that includes stopping unnecessary processes.

I was also thinking about this in the context of the increasing push against productivity culture. There is a trend in the modern world to make every second count, to optimise your life patterns and be the best you. This has the same effect - the constant sense of being watched and judged - and is not healthy. I want to be able to enjoy my spare time without worrying that spending the afternoon playing videogames means I haven't learnt a new programming language, or read that paper about emergent techniques in machine learning. My friend Iris has written a rather good post about how productivity culture brings misery, which I recommend reading.

Reading this back, I think I've finally understood why I so dislike timesheets. They are a control over people, not projects - a way to directly turn a human into a pile of money. They are also a way to stoke paranoia through being watched (there is a reason the right to privacy is in the Universal Declaration of Human Rights - and yes, I know that it doesn't technically apply here) and strongly suggest one isn't trusted. Even when I'm not actually being watched, they push me towards feeling I should be "on". However you look at it, monitoring time hour by hour just isn't healthy and has significant impacts beyond simply filling in a box on a spreadsheet.

Thursday, 29 August 2019

Fixing Xcode command line tools on an older version of OSX

This will be of interest to nobody but Future Me when it inevitably happens again.

It has been a while since I did anything approaching proper coding and since I use it as a lifeline when things are getting bad, I thought it was time to make something again. The most* fun part of programming is discovering a problem in the development environment and disappearing into a rabbit-hole for days to eventually bring you to the point where you can actually start.

This time, it was vi not working because rvm had triggered a Homebrew update which hadn't worked properly because of an OSX upgrade and ... argh. Ultimately it was Xcode, then the Xcode command line tools being missing.

This is going to come up again, so here's a note for future me.

For boring reasons I do not (and cannot) run the latest version of OSX or the latest version of Xcode. Consequently, running brew update && brew upgrade gave me:
Error: Xcode alone is not sufficient on High Sierra.
Install the Command Line Tools:
  xcode-select --install
That command is not going to work on older versions of OSX. It triggers another process which (I think) hunts for the very latest version of Xcode in the App Store and its tools. I don't have the latest Xcode so it fails to find anything useful.

After quite a bit of hunting I found I can download the exact version of the tools I need from the Apple Developer site.

Once this is downloaded and installed, everything works ok (although I did have some luck also fixing up Homebrew with brew doctor).


*least

Sunday, 21 July 2019

Tilting at windmills

The other day I was accused of having a quixotic attitude to issues of workplace culture. Aside from having never been accused of being an idealist in my life, this has irritated me enough to stick with me, so I'm going to write something about it.

First of all, in British English, "quixotic" means:
"preoccupied with an unrealistically optimistic or chivalrous approach to life; impractically idealistic"
This is by the Collins dictionary definition.

For me, the emotional component of the word comes from its origins in the novel Don Quixote where it refers to the protagonist. Depending on your reading, he's on a noble quest to bring back the better ideals of times gone by, or he's hopelessly deluded. Either way, he repeatedly fails to achieve anything - usually while being mocked (and beaten) by those around him.

So it is in this context that I can't say I was thrilled by the comment. I've written many times about my overriding feeling that I'm not really achieving anything in an attempt to show myself that it's not actually true. To have this combined with the suggestion that the reason I do what I do is deluded definitely hurt.

Passed through my emotional filter, the rough translation of all the above is "what you talk about is insane, you don't know what you're doing and you're failing at it".

We were talking about toxic culture in the tech industry and whether it can be "fixed". My position is that, even if all we're doing is only creating bright spots in an otherwise toxic swamp, things can change. Since I'm now in a position of senior leadership in this industry it's partially up to me to do something where I can.

Example the first: I know many technologists who invest heavily of themselves in their work and work excessively long hours. Often this behaviour is encouraged, despite the cost to the individual and these people are treated as disposable by the organisations they have enriched when they do reach the point of burnout. Economically sound, but not right.

Example the second: I have a friend who is looking for a new job. She's a talented developer who should have her choice of places to work, but because she doesn't want to work in a toxic bro-culture she's struggling to find places to even apply.

This is the reality of the tech industry and I reject the idea that we can't do better. Idealistic? Yes, of course. But if I think it's utterly impractical to change the culture around me then I need to get out of this industry. More than that, the whole thing needs burning down and the earth salting to prevent re-growth.

The other part of my summary is that I don't know what I'm doing and I'm failing. This is something I take very personally as, for better or worse, I always try to have a clear plan. I know what I'm doing and why, and I feel working without a plan is failing. In my time in technical leadership I've had ideas, created strategies and seen positive change on the back of it. Of course, I don't know everything but I am very aware of that - I'm not deluded. I have good people to talk to, and I'm adding to that list all the time. What I do have - and this is more important than any of my own input - is enough influence to enable and empower others and create an environment for real cultural change. It is only in my area, of course, but people in my area have a habit of going elsewhere and taking our culture with them...

Now, the title of this post is a deliberate nod towards my writing a whole post aimed at an offhand comment I'm quite sure was not intended as I've written here. In American English, the Cambridge dictionary definition of "quixotic" is:
"having intentions or ideas that are admirable but not practical"
While this is not where my brain goes, for various reasons I suspect this (and without the additional layers of meaning drawn from linking the word back to the novel) was more the intended definition and to be honest I mostly agree. If my goal is to "fix" the technology industry then I'm clearly going to fail - it is not a practical goal.

However. To roughly paraphrase something I remember from a film (or TV show?) "striving for the impossible does not mean toiling in vain". The point (aside from my amazing citation ability) being that pushing for unreachable goals is not ridiculous as it brings you closer to where you want to be, even if you never reach it - asymptotic behaviour for those of a mathematical persuasion.

While failing to source that, I found this relevant quote from Mikhail Bakunin:
"By striving to do the impossible, man has always achieved what is possible. Those who have cautiously done no more than they believed possible have never taken a single step forward."
I'm not sure what it means that I'm now quoting a revolutionary anarchist.

The Newsroom uses the story of Don Quixote as a major theme for the show. It links it to the Greater Fool theory.
"The greater fool is actually an economic term. It’s a patsy. For the rest of us to profit, we need a greater fool - someone who will buy long and sell short. Most people spend their life trying not to be the greater fool; we toss him the hot potato, we dive for his seat when the music stops. The greater fool is someone with the perfect blend of self-delusion and ego to think that he can succeed where others have failed. This whole country [America] was made by greater fools."
Sloan Sabbith, The Newsroom

Do I think I know better than those who came before me? No. But I do know I can make a difference and I intend to do so. It's why I do what I do and I have the original commenter to thank for getting under my skin enough to analyse my thinking and reaffirm that important point. That is mostly why I write this blog.

We should always be seeking to improve, whether it is through evolution or revolution. We should always be seeking to build that rose-tinted version of the world that could exist (quote paraphrased from some wonderful folk at work). Personally, I hate the idea of stagnation. I need to be moving towards a better future - and by that I mean actually improving things and not simply maintaining or (in many ways worse) just fighting a rearguard action. Anything less does feel like failure.

Oh my goodness. Have I become an idealist?!

Sunday, 23 June 2019

Why am I feeling bad?

This is a reflection on where I feel I am right now. It's helpful to me to write this down.

A while ago I wrote about being proactive in work. I looked at the balance between reacting to what is going on around me and taking the time to look ahead. At the moment I'm not getting that balance right.

I really hate not having the time to think around problems and last week I had to cancel some 1-1s to reduce my own cognitive load. I've written before about making time for people and this is a big deal (in a bad way) for me.

So I feel like I'm failing right now. The question is - what can I do about it?

First of all, I should put "right now" into context for myself. The nature of my job has changed. I've taken on a new role, with a whole world of new things to learn. Now I need to be clever and insightful in conversations that feel like they've been happening for months when I have maybe a week's worth of context. To catch up, I'm basically constantly cramming for the next big test. There is a constant feeling of my brain being an over-saturated sponge and I'm looking at half a bucket of water left to absorb. It's overwhelming at times, despite my colleagues being very supportive.

This is a particularly busy time. There is a lot to do, and a lot of decisions to be made and it all needs addressing immediately. Both of these will definitely pass.

Secondly, I need to recognise what I'm doing right. As I cram information and react to the current situations, I'm putting in place the building blocks for the future. I'm taking the opportunity to restructure the software engineering community so it will be in a better place as we go forwards. I'm pushing some of my colleagues outside of their comfort zone, and I'm already seeing them really growing which is good for them as individuals and us as a department. We are using the current challenges as an opportunity to bring some important work to the fore and ask the right questions to take us in the right direction.

I may be thinking on the back foot, but that doesn't mean this is short-term thinking. I'm still managing to work in support of my longer-term goals and, while I'm not necessarily delivering in exactly the way I want to, I should recognise that I'm keeping myself more or less on track despite the new pressures.

As I write this down, I realise that I'm juggling an awful lot at the moment and not dropping too many balls. Overall, I should stop kicking myself.

Monday, 6 May 2019

Buying code

TL;DR - I found this old post about outsourcing and found reading it again interesting.

The magic bullet that is outsourcing rears its head every so often. Why worry about organisational capability and capacity when you can commoditize the process? Push some money at the problem and it goes away, right?

Well, no. Not even close. There are many problems fundamental with this way of thinking and for me they boil down to two key things:

1. Code is never finished
2. Effective and sustainable outsourcing is really hard

I'm going to write a separate post about the first point. Probably more than one - every time I sit down to write something it grows by a frightening amount. The short version is that written code is the start of the journey, not the end. It's why we have entire frameworks (such as ITIL) to manage the services created. You may have paid someone to create the software - but then what?

I was going to write a series of thoughts to cover the second point. But then I discovered something fun - I've been writing on the internet long enough to be repeating myself. So here is me, nearly six years ago, writing about the pitfalls of outsourcing on my old work blog. It's worth a click - if only so they see a weird spike in traffic on an older post.

I find the thoughts there interesting for a few reasons. Firstly, the world hasn't really changed. At all. The fact that I'm writing this post is due to this approach still being seen as an easy solution, and still having some very dangerous long-term effects. The only point in there I think has improved is that Agile working with a supplier is a bit easier these days - although that might be a reflection of the difference in agencies operating in London and Bath.

Secondly, I find it interesting that I felt strongly enough back then to write a post about it. I was a developer, writing code and helping shape a university department. I saw problems with outsourcing, raised them, and when things happened anyway (and, despite the glib phrasing, I should make it clear that my concerns were addressed in the context of the department's priorities) I was one of the people who was saddled with the fixing and learning to make everything work.

These days I'm the Head of Software Engineering for GDS (for the moment at least) and I get to inflict that fun on other people. Or, more accurately, I get significant input into the operating model for the department - which means I need to make sure we're taking into account the points past-me made and ensure we're effectively taking them into account when considering how we build things. Because otherwise, I'm inflicting that fun on other people.

Saturday, 27 April 2019

It's dangerous to go alone

I've played Dungeons & Dragons, alongside other roleplaying games, for most of my life. In the last few years I've been telling people that the skills learned from playing (and especially running) this game are incredibly useful in the office. And people think I'm mad.

Time to explain.

Firstly, for those who don't know, a roleplaying game is a co-operative game focussed around collaborative storytelling. There are hundreds of different rulesets and different ways of playing those games but essentially the Games Master (GM) tells a story. Everyone else takes the role of a single character (the player character, PC) and describes what that character is doing, and how they are responding the challenges of the world. Imagine telling someone the story Lord of the Rings, but instead of passively listening the audience has control of the behaviour of Aragon, Gimli and Legolas (or, if you don't want to imagine it you can read this happening at DM of the Rings). The GM provides context in the setting and the reactions of other characters. The rules define what the characters can do and gives a framework for testing for success.

There are some obvious skills which are gained by playing. Most of the systems involve some basic maths that needs to be done quickly on the fly, which helps with arithmetic. There are social skills from playing in a group, and needing to work together. There is the creativity of thinking up the details of your character, including their motivations and history and some basic acting involved in their portrayal. In fact, Dungeons & Dragons (D&D) was used as a learning tool in schools before it was deemed Evil for reasons which are too tiresome to explain here.

However, I think there is a lot more to it than this.

Consider a job interview. A very common question is along the lines of "imagine you're working here - how would you respond to X happening?". I've had many conversations with people who find it very difficult to put themselves in a fictional situation, understand the limits of their choices in that scenario, and decide on their actions within that context. It's a pretty unnatural thing to do and something of a niche skill, but is definitely a barrier to getting many jobs. It's also exactly what you are doing almost all of the time in a roleplaying game. Pulling out your dice and declaring you're going to stab the manager probably wont help you in interview, but having the confidence to think clearly and quickly in that environment definitely will.

At the heart of many roleplaying games are the challenges. How do we cross this ravine? Can we get the gem from the sleeping dragon? The realm is being invaded, what can we do? These all boil down to "how do I solve problem X with resources Y?" My career has been in technical delivery and management and this has been the question posed by work every single day for over a decade. Like in the games, the answers have varied enormously, and often involve multiple steps to grow Y or redefine X. Practising these thought processes in a safe environment has been very beneficial to me.

Solving problems in D&D often involves communicating with other people (played by the GM) and that involves thinking about their needs and desires. And now we're practising empathy and understanding - in higher stake scenarios and closer to actual conflict than many of us will ever encounter in real life.

When one is the GM and running the game, all the above is dialled to 11. Instead of a single character to track, there are potentially dozens and you have to remember exactly who knows what and how those people might communicate. This starts to sound like the communication that happens in an office which is very important at times of change, or any time information needs to be passed around.

A large part of running the game involves describing the scenario and keeping the story moving. This involves a myriad of narrative and communication skills, learning when to focus on details and when to skip over for the sake of pace. What's important? What makes things come alive? Being able to tell a story is important at interview, and important for talking about your latest great idea in the office and convincing others of its greatness.

Taking a step back a little, being a good GM involves keeping the game itself moving forward. That means taking a group of people, listening to their thoughts and discussions, providing information where required but also helping them come to a set of decisions. All the while, you need one eye on the clock (unless you really like playing to the small hours and getting nothing done) and to keep monitoring the room to make sure that everyone is included. These are key skills required to run a successful meeting.

I can go on, and probably will at some point in the future. For instance, I haven't mentioned anything about teamwork (D&D is usually impossible if the players aren't working together). I look forward to the day when management training is a group of candidates running through the Tomb of Annihilation.

I think playing roleplaying games has the potential to teach some very positive skills. But if nothing else, it is a good excuse to own a lot of pretty dice.

Dice

Friday, 29 March 2019

HTTPS for a small site - redux

A few years ago I set up LetsEncrypt for my sites, so I could create certificates, do HTTPS and blah blah security. Anyway, it all worked well until, nearly three years later...


Balls

Still, an automated process that has been running unattended for three years suddenly stopping working has never caused a problem, right?

It turns out some things have changed with LetsEncrypt in the last three years. Like, everything. Everything. Even the name. Now the thing I want is called Certbot. Fortunately (and against the trend in modern days) it has improved with time. Now there are packages and guides! Sadly, migration is going to be worse than setting things up in the first place. It's installing new software then making sure it's renewing certs generated in the old way, in the old place.

Sigh, here we go.

So I followed the install section of this guide then ran:
sudo certbot renew
And it ... just worked?! I don't understand. This is not computing.

Ok, I need to fix the cron too. That'll cause problems.

Starting as:
export PATH=<boring path stuff> && /another/path/letsencrypt/letsencrypt-auto renew >> /path/to/logs/renew.log
Change to:
/usr/bin/certbot renew >> /path/to/logs/renew.log
And ... that appears to just work too?!

Amazing. It looks like some things do get better.

Saturday, 23 February 2019

Giving nice feedback

For a work environment to be successful, there needs to be trust among the people working there. Scrum echoes this in the main rule of the retrospective - everyone did the best that they could with the resources they had available at the time. Blame culture is being stamped out by progressive companies. People want to be able to approach senior management without fear (and senior managers want to be seen as humans). Everyone should feel comfortable in their workplace at all times.

All of this is a really good thing, of course. But it seems to me we are also in danger losing something important when it comes to personal feedback. Individual development often involves confronting uncomfortable truths about ourselves before deciding what to do about them, and a part of doing that is knowing what to look at. I've had too many conversations recently with people complaining that they don't get critical feedback. They know they are doing a good job - they are getting plenty of positive feedback - but they know they aren't perfect and want to know what to look at to develop.

So are we being too nice? If we don't give critical feedback when asked, is it because we don't see a problem? We don't want to upset people? Or is it we want to spare ourselves an awkward conversation? Speaking for myself, I very deliberately lean into being supportive over critical (yay me) but if I'm honest I can also see some of the last in my behaviour. Since people have been asking for more feedback, I've tried to change my own behaviour and be more open and offer more (constructive) criticism.

Initial findings are good. Firstly, I've had very positive feedback from people who've been pleased to have something pointed out. I've seen pennies drop and cogs start turning in people's brains. It feels like I'm helping people think, which is the object of feedback regardless of the context. Secondly, it has helped my own development. The first time I gave some properly honest feedback I could feel my own fear and anxiety welling up. But the person wasn't upset or horrified and they still talk to me. Over time, having awkward conversations has gotten a lot easier - and this is a really important skill to develop when moving into management. I'm really grateful to this person for making me think a bit differently about all this and one day I might find the courage to tell her.

Clearly, honest feedback is something to be given sensitively. Although the above might read like it, I haven't been walking round giving the benefits of my "wisdom" to anyone unlucky enough to be within shouting distance. I'm still very careful about who I talk to and when, and it's only people who are asking for it and I trust to have a sensible conversation.

How feedback is delivered is also important. For me, the classic "shit sandwich" technique misses the point somewhat here. We are not talking about problems, we are talking about development opportunities. We are not looking backwards at everything that was "bad", we're acknowledging the past and looking forward at how things could be in the future.

It's also important to ground the conversation in a concrete reality. That means talking about the impact - some of which might not have been noticed at all. For instance, "you are very smart, but are naturally quite blunt" is feedback but invites a "so what?" response. "You are very smart, but are naturally quite blunt and this means people who work with you can find you intimidating" is rather more significant. It speaks to a real (unintended) problem and also leads to a useful discussion about communicating ideas, bringing people along, working with people from other disciplines, and so on. This is all good stuff and it also gives the person enough to kick-start some positive self-analysis.

Of course all this must come with the caveat that it's aimed at helping good people be better. It's important to work with each individual in a way that suits them.

What's the conclusion here? Giving feedback is important, and I think it's very easy to make it meaningless by avoiding the difficult conversation. This does a disservice to those around us. Being too nice doesn't help anyone grow.

Saturday, 19 January 2019

Tagging documents in Google Drive

I use the Google suite for various types of writing, including D&D. Google Drive will let me organise files by folder, which is very early 1990s. What I'd like is some kind of tagging system, so I can find the docs I have scattered all over the place. While it seems like something Google should probably support, while we are waiting for a miracle I can roll my own system using Google Scripts which is apparently mostly ES3, with some enhancement from ES5. So that's ... late 1990s. I guess that's an improvement?

Anyway, language hell is ahead of me and I'm sure at some point I'll convert it to use a proper API in a proper language. Right now, I need a simple way to do tags. Since I don't use the description metadata field (or indeed really acknowledge its existence until I started this) I think I'll use that. Adding something like #npc #story to the field is the level of work I'm willing to do - what I want is something that will pull these tags and list my files using them.

First things first - how on earth do I start writing Google Scripts? Obviously as a lovingly maintained part of the Google suite it'll be tightly integrated so all I have to do is ... add what it claims is a plugin to Drive and I can start creating script files which open in an in-browser editor (I hate in-browser editors, but here we are). Then I need an index file and something to call it. It seems that when loading, the doGet method in the Code.gs file is called and that needs to hit the HTML file. This all needs accessing via a URL to the dev or published version. Ok:

Carefully not thinking about what will happen if a user isn't using Javascript, let us push forwards. Templating seems pretty simple so an HTML file can be put together. I can also drag in a CSS file from somewhere else so I can reuse my awesome styling.

All I'm looking to do here is create some lists, so I just need to get the filenames and links and put them on the screen. Specifically, I'm getting a list of tags then creating a list of files per tag.

Google Scripts provides a load of objects to poke and since it's taking care of the authentication (the main reason I'm doing it this way rather than using the api) this should be pretty straightforward. I mean the only way this could go wrong is if the scripting is using Javascript from before the dawn of time and I have to do absolutely everything myself?

Argh.
To be fair it's not too bad once I've got my head out of Ruby and back into Javascript and then removed all the ES6 goodness I've come to expect in the years since it became commonplace. I can actually craft exactly what I'm looking for:


Under the hood ... eugh. It's pretty ugly - and not just because I've used two different forms of a forEach loop in a single short script. To generate this page, I'm looking at each file to get a list of unique tags then reversing the process - looking at each file to figure out if it has the tag I'm interested in. This is not Efficient CodeTM. On the other hand, it is Working CodeTM so it'll do as a proof of concept. I'll make it less awful when it gets too slow or I translate it all over to the API.

In the meantime, I have a document tagging system, and I can still use my favourite online text editor, even if I had to write the code in my less than favourite online code editor. And here is the code all in one place. One day I'll get tagging and Markdown support from Google itself...