• Using an ephemeral MongoDB single node replicaset in a devcontainer or codespace

    I love using devcontainers to manage my development environment. They make it super easy to ensure a consistent development stack is in place. Recently i started developing against a MongoDB instance. For node.js, i use mongodb-unit to spin up a standalone server on the local client. But there’s no equivalent package for Python. Although there are lots of posts on stackoverflow about configuring a single node replicaset using a healthcheck, and there’s even an example given by a MongoDB employee, they didnt work for me. When setting up the server to use authentication, it also needs a keyfile, which has… Continue reading →


  • From RICE to ICE: which framework for your project?

    I’ve previously explained the RICE and ICE techniques for prioritisation. Both techniques are frameworks used to evaluate and rank projects or tasks based on their potential impact, feasibility, and difficulty. However, I wanted to highlight the two key differences between them to help you chose the right tool for your project. The ICE technique (Impact, Confidence, Ease) assigns scores to each project based on the potential impact of the project, the level of confidence in its success, and the ease of implementing it. The scores for each factor are multiplied to get a final score, which is used to rank… Continue reading →


  • Ice, Ice Baby: Chill Out and Prioritise with the ICE Technique

    Yesterday, i talked about the RICE technique for prioritisation. Today, i want to introduce ICE technique, another prioritisation framework used to evaluate and prioritise tasks or projects based on three factors: Impact, Confidence, and Ease. Tomorrow, i’ll compare them both. To use the ICE technique, each item is assigned a score out of 10 for each factor, and the scores are then multiplied together to calculate a final score for each task or project. The higher the final score, the higher we should prioritise completing that item. This creates a simple yet effective framework which allows us to compare the… Continue reading →


  • You want RICE with that?

    Imagine that you are a product manager at a software company, and you have three potential features to prioritise for the next development cycle. How do you pick between them? There are many ways, but one i recently learned about is the RICE model – a prioritisation framework used by product managers, teams, and organisations to prioritise projects, features, or tasks based on their potential impact, effort, and other factors. RICE stands for Reach, Impact, Confidence, and Effort, and it provides a quantitative approach to decision-making. To use the RICE model, you assign values to each of the four factors… Continue reading →


  • Are you A senior developer, or THE lead developer

    In our world, we organise in Pods – an autonomous group of 6-9 people with all the skills needed to solve a problem. Multiple Pods form a Team. Within a Pod, there can be multiple Senior Developers, but only a single Lead Developer. They have different and overlapping responsibilities and accountabilities. Every project must have exactly one Lead Developer, and has one or more Senior Developers. It is the accountability of the project or product manager to ensure that these roles exist in a team, and that the roles are filled with skilled team members able and willing to fulfil the role. A Senior Developer Every… Continue reading →


  • Names change, and so do email addresses

    We’ve recently been rolling out a new internal application. At our organisation, users have an email address which is generally firstname.lastname@company.com, or something like that. When a user logs in to the application, the app will look them up using their email address and figure out what parts of the application the user should be able to use. The problem One day we got a ticket for a user who was adamant that they had access but when we looked in the application, we couldn’t even find them in the system! Probing a bit further, it turns out that they… Continue reading →


  • The Two Email Rule: When to Escalate from Email to Real Conversation

    When i think back to the deepest of the many deep holes i’ve dug myself in to over the years, they almost all start with an email. When working through my inbox, it’s all too easy to just bash out a reply and hit send. Usually, that’s fine – a quick email is all it takes, and the issue is closed. But sometimes, that email triggers a reply, and that reply another, and it’s hard to predict when but eventually I’m having a complex conversation about a complex issue and it all goes wrong and before I know it, we’re… Continue reading →


  • How to: LetsEncrypt in standalone mode for Unifi on Ubuntu 20.04 LTS

    This is an update of my previous post, now that cert-manager is more mature, and i’ve rebuilt my server on Ubuntu 20.04 (from 18.04). Install certbot Certbot installation instructions are at online of course but here’s a summary: Create a new certificate using LetsEncrypt We’re going to use standalone mode, and first we’ll get a test certificate just to validate that everything’s working (so that we don’t trigger LetsEncrypt’s rate limits). You should see something like this: Install certificate in unifi I use an amazing certificate installation script from Steve Jenkins. Get the real LetsEncrypt certificate Simply run the same… Continue reading →


  • Can you do that new job?

    Generally when evaluating someone for a role, I look for 5 things: Behaviours – how do they operate in a team? Do they admit to mistakes and learn from them? Do they help others? Communicate and live to their personal values? Are those values ones I want people in the team to live to? Accountability – can this person handle the magnitude of the role? Are they able to manage stakeholders of the right level of seniority? Domain – how deep is their knowledge of this business, industry, sector etc.? And how deep does it need to be? Function –… Continue reading →


  • Fix: AccessToKeyVaultDenied when using KeyVault with Function App application setting

    After following the instructions on the MS website to establish a KeyVault reference and place that in my App Settings, I set up a Managed Service Identity and grant that identity access to my KeyVault key. Next, wishing to follow Microsoft’s advice and secured a firewall around the KeyVault, ensuring that I checked the Allow trusted Microsoft services to bypass this firewall? setting, however, I was still receiving an AccessToKeyVaultDenied error: I even checked and yes, App Service is supposed to be able to bypass the firewall – so what was going on? Well, on the KeyVault resolver reference page… Continue reading →


About me

I’m rob. I spend my time exploring the world, playing board games with my family, solving complex technical problems, and learning new things. At work, I lead a team of solution architects designing and building complex realtime trading systems. Sometimes i write about things here, or code them on GitHub. I believe a few things that guide what I do and how I do it:

  • Hard things are hard. It takes time, effort and practice to be good at them.
  • Everybody can learn something new every day. When we’re born we know how to eat and cry and that’s about it. Everything else we’ve learnt, and we can keep doing that all our lives.
  • Great teams are fun to work in, and great teams achieve great outcomes. The wider the range of people and perspectives in the room, the better the work.

Look back