I started writing articles in 2020 as a way to reflect intentionally on my ideas - I use writing as a way to think and learn. By publishing online, I might help others learn too; I really hope there's something interesting here for you!
I started writing articles in 2020 as a way to reflect intentionally on my ideas - I use writing as a way to think and learn. By publishing online, I might help others learn too; I really hope there's something interesting here for you!
Test-Driven Documentation: Turn Your Test Suite into an Executable Spec
15/01/2026
Tests and documentation both describe how software behaves—but they fail in opposite ways. Tests can verify behaviour without knowing whether it matters; documentation can be validated by humans but not automatically verified. This article introduces
On the Importance of Server-side Validation (or How to Hack a Form)
25/08/2025
I document a few learnings I made on how easy it is to bypass client-side validation using the Chrome DevTools, which outlines the importance of server-side validation of form inputs.
Quantifying Code “Understandability” with Bounded Contexts
25/03/2025
I explore an idea I’ve been considering recently - assessing the understandability by discovering the bounded contexts within a codebase based on mutation of state.
Story Points Aren’t Dead–You’re Just Making the Wrong Optimisation!
26/01/2025
Story Points measure complexity, not time; misalignment occurs when Project Managers equate them to timelines. To enhance delivery speed, focus on value-adding tasks and avoid using Story Points as time proxies, which can obscure underlying issues.
Not Your Everyday Tech Lead: What Does It Mean to Be TL in a Lean Software Company?
15/06/2024
This talk given at Tech Lead Conf 2024 discusses the role of a Tech Lead in a Lean software company and the challenges they face. It emphasises the importance of problem-solving and continuous improvement in software development. I share my struggles as a Tech Lead and the importance of distinguishing between being a maker and a manager. I also highlight the significance of identifying root causes and solving problems to prevent future issues.
The Micromanagement Trap: A Tale of Three Managers
11/05/2024
After a conversation with my sister about her concerns about becoming a micromanager, I got together some thoughts about the causes of what we call “micromanagement”. It’s not caused by spending too much time with your reports and it’s not solved by lowering your standards for the quality of work…
TypeScript Migration Using Codemods
12/03/2024
A Dev Yokoten is a chance for developers to raise the tech awareness of others within the company by sharing something cool, or non-standard that they did to innovate on their project. In this Yokoten, I shared the refactor work I have been managing on a massive legacy codebase.
DRY vs WET - is Everyone Wrong About The Biggest Question in Software Engineering?
18/02/2024
Using mantras and reducing complex topics down to catchy acronyms like DRY and WET reduces cognitive strain on developers in picking up Software Craft, but the oversimplification and misuse of these principles can have implications on code quality.
What Does it Mean to Be a Tech Lead in a Lean Software Company?
24/01/2024
I discuss my mental model of what it means to be a Tech Lead working in a software agency that uses Lean. This is quite different from the standard perception of TL, which seems to commonly be synonymous with “senior dev”. Senior devs are distinct from TLs and valuable in their own way, but what distinguishes the two?
Toyota Talent: Build a System to Train Your People
10/01/2024
I’m currently looking at how we train our people at Theodo, so I recently read Toyota Talent to help me understand some of the aspects of how Toyota train their employees and how this fits into the Lean model. Training your people is a no-brainer and I’m interested in particular in how to break down a job and focus on standardising the core tasks to produce stable outputs to work. Here are my notes on the topic…
The Elusive Definition of “Leadership”
30/12/2023
“Leadership” has a fuzzy definition. Many of us aspire to be leaders, but it’s difficult to know how to develop these skills when we don’t know exactly what the term means. Here, I look to break down one frame through which we can look at leadership and some concrete steps for how anyone can become a leader.
Universal Apps: A Single, Unified Codebase Powering iOS, Android, macOS, Windows, and Web
24/09/2023
Both React Native and Electron.JS offer abstractions which allow developers to use established web technologies to build applications on native mobile and desktop platforms respectively - the concept of “Universal” Apps takes this a step further. This article discusses how we might use the lessons described in Robert C. Martin’s Clean Architecture to create a single app which can be distributed natively across all platforms.
NextJS 13’s App Router, React Server Components, and Confusion
19/09/2023
NextJS 13 released with some pretty cool features and support for React Server Components (introduced in React 18). Despite this, I’m hearing descent from some colleagues about the changes Vercel have introduced this time round. I want to highlight some of the reasons this release has been so contentious.
Deploy your Dockerised app to Fly.io with BitBucket Pipelines in 15 minutes
31/07/2023
In this article, I walk through an example of how to setup a BitBucket Pipeline which automatically deploys the changes to my service when I merge a pull request.
Design Patterns for a Lightweight Java API from Scratch
30/07/2023
Design patterns are vital to make sure that your codebase scales and doesn’t deteriorate in quality with over time. In this article, I cover the main design patterns I used in creating a lightweight Java API which processes an HTTP request without using any external libraries or frameworks.
Build a Lightweight Java API from Scratch
29/07/2023
In this article, I cover how you can create a lightweight Java API which processes an HTTP request without using any external libraries.
Supercharge your Learning with This One Tool for Programmers!
02/04/2023
Some people seem to naturally learn much quicker than others - in this article, I share one habit I have taken up which I have noticed supercharges my learning. I had to write an article to share it!
What Even is Tech Quality and Why Should I Care?
31/01/2023
In this talk, I discuss one way that junior developers build up their framework of “Tech Quality” and how we can increase the speed of our progression to become more effective Software Engineers. I focus on promoting a combination of bottom-up and top-down learning and propose my own model which is derived directly from maximising value generation.
What Does it Mean to be a Good Software Engineer?
18/12/2022
Here I share my thoughts on my own model of what I think it means to be a “good” Software Engineer. This article is addressed to early career Software Engineers who take pride in their craft and are determined to be good at what they do. This is for those of us who want to make the highest possible impact with our careers. I want to precisely articulate what we should care about and why it matters.
The Bridge to JSI
12/05/2022
In my talk at React Native London, I give an introduction to what React Native is (for React web developers); I explain the current architecture (how it actually works), and continue to explain what the future architecture will look like (JSI).
Why using Poetry is better than PIP
17/02/2022
An overview of package management in Python, and why you should probably consider using Poetry as a python package manager over PIP. I also discuss how package management works in the JavaScript ecosystem!
Principles Gathered from Clean Code: A Handbook of Agile Software Craftsmanship
05/02/2022
Want to know how to write Clean Code? Robert C. Martin brings us a pragmatic guide to improving the quality of our code. In this article I hope to condense many of the practices that he promotes so you can quickly apply them to your own code.
How to Connect your MySQL Database to your Dockerized Django Application
19/09/2021
Recently, a friend of mine was working on a project which was a Django website running inside a Docker container. She wanted to connect her ORM to a MySQL database, but was struggling to find out how to do this. I decided that this couldn't be too difficult to do, so I gave it a go and now I'm sharing my findings.
AWS Fargate: Harness the power of Serverless for Long-Running Computational Tasks
21/08/2021
We all know the advantages of serverless computing: pay only for what you use; scale up and down with ease; abstract away the complexities of managing servers. In this article, I illustrate how you can acquire these benefits for long computational tasks which are too large for Lambda or Google Cloud Functions to handle. I share a case study from a recent project and how we used AWS Fargate (along with S3, Lambda, DynamoDB, and more!) to create a robust task architecture.
Build and Host your Own Blog with Gatsby and GitHub Pages for Free
01/08/2021
A step-by-step guide to building your own blog using the Static Site Generation framework Gatsby.JS and deploy to the web for free with GitHub Pages.
Writing a Native Ionic Plugin for Capacitor in Less Than 30 Minutes
12/07/2021
When the pandemic first started, I decided to develop a contact-tracing mobile app. I was studying Computer Science at the time and decided to use the same cross-platform framework that we were using on our course - Ionic. I wanted to use Google's Nearby Messages API to share packets of information between iOS and Android devices via Bluetooth, but I couldn't find a plugin for this, so I decided to write my own!
What I Learned in my Computer Science MSc at UCL
01/09/2020
After studying BSc Physics at The University of Sheffield, I moved on to study MSc Computer Science at UCL, where most of my learning was through the projects I built. If you’re looking to study Computer Science, here are four concrete examples of projects you might expect to work on during your degree.
Alumni Interviews: James Haworth Wheatman, former Technology Director and VP of Enactus Sheffield
12/07/2020
James joined Enactus Sheffield as a second-year Physics student because he wanted to make a change and become a more responsible citizen. Now, three years later, he works as a software engineer in London, helping clients fulfil their visions for new products they would like to build. Read our first alumni interview to find out what Enactus is all about and what you can learn from the experience if you join.
Python Natural Language Code Parser
03/07/2020
I created a Natural-Language-to-Python parser over a few days called Parseltongue (a way to speak to a Python!); it takes in Natural Language and outputs Python code. The source code itself is written in Python and based on my understanding of work I did with a Natural Language Processing system in 2019-20.