Posts from 2021

Sep 9, 2021

I built a real-time strategy game in the browser

As a child I loved real-time strategy (RTS) games. A large and fairly open world, several players, competition for resources, and a goal of producing armies to conquer my opponents. Something about the mix of freedom and strategy was an absolute joy to me.

Games like Rise of Nations and Supreme Commander showed me how powerful computers could be. Some of my first serious programming was building community projects like gametags or modding tools.

I always wanted to build my own RTS game from scratch. Master all the different things needed: game design, engine design, graphics design, efficient pathfinding. It’s taken a long time to get there, partly because I don’t like C++.

Due to the pandemic, I had enough time last year to realise this old dream. Now that I’ve been making my blog more active it’s time to share it properly.

The game

My game is called RTT. Here’s a preview:

RTT contains all the key elements of an RTS game: resource collection, unit production, AIs, obstacles, realistic pathfinding. And it runs completely in the browser! The engine is written in TypeScript. Pathfinding is done with a mix of my own routines and the navmesh npm library. It’s rendered using ThreeJS, WebGL and GLSL.

There are several different types of units. Small engineers that can go build structures or collide with enemies. Larger tanks that spray out projectiles. Artillery that sends slow, powerful projectiles. And laser tanks that do exactly what it sounds like.

Getting it performant in multiple browsers has been hell. For a long time I was close to giving up. Even once I’d dealt with the worst-profiling code, and done things like caching paths, performance inside browsers varies a lot. My 6-year-old MacBook Pro with integrated graphics runs well now, and that’s something I’m very proud of.

There’s no proper UI right now, so all the players are AIs. There’s some difficult problems taking it further, that I’ll take about another day. But you can click-drag to select units and right-click to move them. Go have a play!

Continue reading…

Sep 8, 2021

Securing Raspberry Pi access using free CloudFlare

I’ve recently been building an environment monitoring station at home using a Raspberry Pi 4B+. It turns out to be a remarkably powerful computer, much more than I remembered from earlier versions. I’ll write more another time about the environment side of things, but today I’m going to focus on how awesome the UX is when putting it behind Cloudflare.

Continue reading…

Sep 2, 2021

Choosing a technical focus as a software engineer

Young technologists have a wonderful opportunity to explore. Software is involved in almost every company; software ate the world. Whether you’re a software engineer, data scientist or product manager you can work on more-or-less anything.

Continue reading…

Mar 5, 2021

Getting alerted when cycle paths flood: part two

I recently moved back to York, a city I absolutely love. One of the best things about living here is cycling. But York has two rivers, one of which brings rain from hills a long way away. Some of the best cycle routes can flood after rainfall when the rivers rise.

Continue reading…

Mar 4, 2021

Getting alerted when cycle paths flood

I recently moved back to York, a city I absolutely love. One of the best things about living here is cycling. But York has two rivers, one of which brings rain from hills a long way away. Some of the best cycle routes can flood after rainfall when the rivers rise.

Continue reading…

Mar 3, 2021

Finding a new job in tech

Inspired by Toby Lorne, I wanted to share about my recent job hunt.

For the last four years I have been an engineer at Government Digital Service in London. My background is quite varied. At GDS I quickly became a DevOps expert and built, taught and operated infrastructure for cloud platforms, payment processing and digital identity.

4 years is a long time to stay in one technology job, even with many different teams and projects. I have contributed to just about every service in GDS, and many elsewhere in government. I decided to find a new challenge elsewhere as my growth had slown down. I want to stay on the technical career track for the time being.

I have moved back to York as I wasn’t enjoying London during the pandemic. Quality of life here is excellent and I’m planning to stay. Remote roles are freely available.


I applied for senior-level DevOps, SRE and software engineering, roles at these types of organisations:

I got lots of interest from other teams in the Civil Service. I already know I can succeed there, and they already know what I’m capable of. But after 4 years I think it’s important to see somewhere else and keep learning. I ruled out large enterprises for the same reasons. I also ruled out finance for the time being to focus on quality-of-life.

I applied to several startups with problems that interest me. I have past experience with a small Y Combinator startup, and helping grow some larger startups. I’m sure I’ll go back into the startup world sooner or later.

I also interviewed with a cloud consultancy that I’ve known for quite a long time. I haven’t done consultancy before, although I’ve done a lot of freelancing and think consulting might suit me well.

All the roles I applied for were mostly- or fully-remote. This ruled out a few very competitive companies but not anywhere I was desperate to work at yet.


Here’s a brief summary of how I progressed in the interviews:

Stage Passed Rejected Withdrew
Application 6 -  
CV Sift 5 1  
Phone screen 4   1
Tech interviews 3   1
Offer 2 1  

I got responses from every application and ended up with two offers. I withdrew one application when I decided not to stay in government, and a second that was too far behind when I got offers.


I had two offers to choose between: one from a late-stage startup and one from the cloud consulting company. Both were quite appealing and I was confident I’d grow from both.

I chose based on my favourite work. On GOV.UK PaaS I have found myself helping services across government by solving incidents or advising on architecture. Consulting is a great way to get similar exposure in the private sector.

I’ve joined EngineerBetter to carry on my existing work with Cloud Foundry. Cloud Foundry is gradually fading, but it’s quietly delivering enormous value to many large organizations. I’m not quite done with it yet.


I have a bunch of education and skills, but it felt terrible having a really good time during a pandemic that has hurt so many people.

Every company respected that I use they/them pronouns. I was very happy about this. Companies seem to be well into adjusting to the existence of non-binary staff.

It’s getting harder to find pure-technical roles that I think will challenge me. I’m not sure what to do after Senior, but sooner or later I’m going to be writing a lot less code and doing a lot more negotiation and planning.

Asking difficult LeetCode-style Computer Science puzzles seems quite rare outside of finance, enterprise and Silicon Valley startups. These problems test abstract thought, but they also exclude people without a Computer Science education. I didn’t encounter any problems that I couldn’t solve.

Finding fully- or mostly-remote jobs was very easy. I’m no longer in London and don’t want to travel there every day. This was not a problem for any organisation I talked to. There’s some selection bias here in terms of the company culture that appeals to me. Remote salaries were quite similar to what I’d have targeted in London.

Having deep experience of both development and operations is extremely valuable right now. I wasn’t very surprised to receive multiple offers. I think I got bonus points for having taught infrastructure a lot in my current role.

Interviewing at Senior level feels easier than early-career. Expectations are higher but I have a lot of confidence and many deep experiences to draw on. I also have a bigger network for referrals and to ask questions. I imagine Staff level would still be hard.

Companies do a lot of interview stages. I had 20+ videocalls over two weeks. Scheduling these was very draining despite even though most companies have worldwide interviewers available at any convenient time. In hindsight I wished to have taken time off to find a new job.

Civil Service total compensation is competitive with non-finance private sector. But so much of that compensation was as a pension. Focusing on pensions doesn’t work unless basic salaries are high enough for the housing market. That pushes a lot of people away eventually, like me.

Cloud Foundry is gradually turning into legacy. It’s going to take decades to disappear, and the number of teams using it is still going up. But I’ll be done with it within the next year.

Continue reading…