There are two scenarios I keep seeing with AI in production, and they are the same scenarios in different disguises. The first: a team has seen a demo, the demo was dazzling, and now probabilistic output is headed somewhere that needs exactly one right answer - a total, a status, a legal something. Everyone's excited. The second: a team has a genuinely perfect AI use-case - a summary, a…
At some point in every codebase's life, you fix the same bug three times in one afternoon. Once in the TypeScript type. Once in the resolver. Once in the validation layer. Three commits, three little green ticks, an exhale-laden sense of accomplishment - and then, somewhere around the third coffee, the sinking realisation that the bug was never actually in the code. The bug was that the truth is…
There's a game you play as a kid - music plays, a potato gets passed around the circle (ours was a beanbag, I think, or somebody's shoe - the potato was always theoretical), and the only rule anyone actually remembers is that you do not want to be the one holding it when the music stops. That's it. Fifteen years of shipping software - startups, banks, tax systems, and now a large government data…
The Pattern Underneath the Pattern I've spent fifteen years building software. In that time, I've learned to pay attention to systems - how they fail, how they recover, how small repeated interactions compound into something much larger than any single event. At some point I started noticing the same dynamics in myself (it look a hot minute). Not in a dramatic way. More like: the same worry…
A Letter to My Younger Self Before Their First Talk Dear 2013 me, You're about to step on stage, or...stand up in front a bunch of web developers in London. Your heart's racing, you've had a gnawing feeling of dread in your stomach for the past week. Your mouth's a bit dry. That last cortado certainly did not help. You're wondering why you ever agreed to this. Let me tell you a few things I wish…
Introduction - The Accidental Era of "AI First" Over the last two years, you've probably noticed a strange vibe in the software world: everyone is moving at impossible speed while simultaneously questioning if any of this will matter in five years. We've crossed into a world where individuals can do what once required teams. A world where "engineering" sometimes means "describe the system you want…
Devdle is a Wordle-inspired daily puzzle app I built for developers to solve coding challenges. It was a super fun project to build, and brand obnoxiously over-the-top, so I figured it would also be fun to do a deep-dive on how I built it, how it operates and where it's hosted. Enjoy. TL;DR Edge-first stack (Cloudflare Worker + Pages) keeps the daily puzzle snappy worldwide. Puzzles are generated…
Securing a Banking System's UI and API The below was a talk delivered at fintech_devcon in August 2025 in Denver, CO. I've adapted it into the blog post below... I've spent the last several years building fintech products from the ground up. Today, though, I want to talk about something that often gets bolted on far too late: security. Not security as a checklist. This is about building systems…
AI Can Help You Write Code - But It Can't Help You Think The hardest part of software engineering has never been the syntax. It's never been whether you used map or forEach, GraphQL or REST, Tailwind or BEM. The real difficulty is developing the ability to reason about an entire system - understanding how data moves through it, how changes ripple across it, and how one decision in a helper…
There's a strange delay in engineering leadership no one warns you about. It's the time between when you fix something and when you experience the tangible benefits of your actions. Fix a bug? You're a hero before lunch. Rebuild the monitoring system to detect drifts in a payment system? It might be weeks, months before those efforts come into fruition. That's the Problem → Solution → Impact Gap…
Or, "How I Learned to Stop Worrying and Love the Journey" There's a running joke in engineering circles that if you sit still long enough, someone will come along and replace your perfectly functional code with the latest framework named after a fruit, bird, or obscure Norse god. I've seen the same thing happen at companies and startups when old contractors or staff leave, and new ones join: "oh…
Introduction No matter the size of the company or the maturity of the codebase, there's one question I've found myself asking time and time again when tackling a new task: Is there an existing solution I need to augment, or do I need to solve this from scratch? At first glance, this might seem like a simple question-just check the README, right? But in reality, it's never that straightforward.…
A great engineering team doesn't need constant oversight. It needs clarity, trust, and the right tools to execute. As an engineering manager, my philosophy was simple: ✅ Push the product forward. ✅ Unblock my team. ✅ Get out of their way. The result? A team that shipped fast, maintained high-quality code, and took full ownership of their work. Here's how I did it. 🚀 Laying the Groundwork for…
Introduction After 15 years in software engineering and engineering leadership-ranging from IC (individual contributor) roles to CTO-I've seen countless engineers thrive (or struggle) based on how well their working style aligns with the company's needs at the time, from the Cisco's and GoDaddy's of the world, to your favourite seed-stage startup, I've seen different engineers suit very different…
TypeScript has become the de facto standard for building robust, maintainable, and scalable JavaScript applications. Yet, migrating a large production codebase to TypeScript can be a daunting task, especially when you're dealing with 160,000 lines of mission-critical JavaScript and users with real money in your system, and their tax returns to submit. At WorkMade, I decided the pain would be worth…
The Illusion of Realtime in Computing In software development, we often talk about "realtime" as if it's a definitive concept-messages sent instantly, updates reflected immediately, data synchronized across systems without delay. But what does "realtime" actually mean? And does it truly exist? From event ordering to WebSockets, let's break down what makes realtime computing possible, the illusion…
A structured approach to writing reliable software by progressing and ascending through three distinct levels of quality assurance. A software development quote I love is "Make It Work Make It Right Make It Fast" - to build on this pillar, I want to delve into my own personal mantra I employ when I've come up with a solution to a software problem. I ask myself: "Does it work, how you want it to,…
Securing a Bank UI How I Didn't Lose Any Customer's Money And Retained My Sanity Throughout Before I joined Clerk, I was a fintech CTO for nearly 6 years, with 4 years at Letter and 2 years with WorkMade. Aside from the truck load of valuable lessons those experiences taught me, I also had the fun* challenge of securing people's money on a daily (hourly? MINUTELY??) basis. I pretty much poured my…
Leadership in engineering isn't just about writing code or managing timelines-it's about creating an environment where teams thrive, products succeed, and everyone grows along the way. Over my career, I've had the privilege of working with incredible teams and companies, and I've learned some key lessons on what makes leadership effective (and doesn't make people sad). Here's my take: Balance…
"Alright, five years ago, right before Thanos, I was in a place called the Quantum Realm. The Quantum Realm is like its own microscopic universe" - Scott Lang, Avengers: Endgame Every line of code we write is an act of creation-a way of collapsing the infinite potential of an idea into something real. Yet, we rarely stop to consider: what if our UI components themselves could exist in a state of…
"We do not ‘come into’ this world; we come out of it, as leaves from a tree." – Alan Watts The world is built on systems. Some are physical, like the weather or a Kubernetes cluster. Others are abstract, like the algorithms behind a recommendation engine or the thoughts racing through your mind during a late-night coding/anxiety* session. Systems surround us, often unnoticed, until they break.…
Predicting Unpredictable Bugs & Testing Distributed Systems Or, "No-One Expected Dennis Nedry But Maybe Could Have Better Prepared For His Actions" Dr. Ian Malcolm For most people, Jurassic Park was the first time they'd been exposed to the term "Chaos Theory": Malcolm: "You see? The tyrannosaur doesn’t obey set patterns or park schedules. The essence of Chaos."Ellie: "I’m still not clear on…
How I manage time off and schedule in new work AKA "Asynchronous Pipeline Building", but more on that below... Read this bit first I've made this post with contractors in mind for two reasons: 1 - I've been one for 7 years now, so I feel a little more confident talking about it 2 - My definition of contracting is basically "staff augmentation for one company at a time", where you're just paid…
Thanks to Pete Lacey’s tweet, I decided to turn the inability I was facing to come up with some useful concepts to blog about, into writing a post on the inability most people seem to face on starting something. Pete gave me lemons, I'm going to see how I do making lemonade. The Issues I believe the issue most face with starting something, anything, a blog post, a software project, a book, a…
Intro This post should serve as general observations and remarks on my own personal experience using both Vue and React for production applications and services, as opposed to simply drawing you in to a VUE VS. REACT clickbait fest. Background of my use-cases I began using React at the beginning of 2015. My first big use of it was on a project for Cisco, building a real-time test automation…
I recently re-designed my personal site after not touching it since December 2015. When I sat down to re-design it, I felt like Jekyll's workflow and development experience suddenly felt...outdated. Mostly because a lot of the development I tend to do is JavaScript-based and (all fragility jokes aside), JS development in 2017 is pretty slick. This post is essentially going to be a collection of…
WebSockets…and React Native Amongst other things, highlights include: Building a command line interface in the browser for test engineers to remotely debug scripts they’re running Fine-tuning the performance of the UI to handle hundreds of messages a second over the WebSocket connection, whilst keeping the interface responsive Porting a section of the web application to an iOS app using React…
Speculo Speculo is an easy way to visualise colour palettes. Every time you change a palette colour, it updates a set of commonly used website layouts. This allows you to visualise your colour palette in a variety of design scenarios. Visit Speculo → Features Automatically updating preset layouts Click any layout to zoom in and focus on only that layout Colours can be selected via the colour…
I really didn't want to bum people out with this post, so that's why I've named it after a Take That song, as opposed to a Smiths song (was going with "Heaven Knows I'm Miserable Now...with Web Development"). Blame my recent viewing for the teen angst tone of this post. Essentially; everything is the same, nothing is new, stop worrying about stuff. This post isn't a cry for help, I'm actually…
Aim Provide a sane way for a user to search our static Jekyll blog and view a bookmarkable page containing the relevant results. For the eager-beavers among you, take a look at the Installation details at the bottom of the post. Intro "Transform your plain text into static websites and blogs." Simply put, that is Jekyll. This post isn't an intro to Jekyll or even a sales pitch for Jekyll. The…
Permeate iOS app → Intro I've been a web developer for 4 and a bit years now, primarily using JavaScript & Node.js to build web apps. This was my first foray into the native world. I thought I'd share my experiences of approaching iOS from a web background. I certainly wouldn't class this as a tutorial of sorts, as my knowledge is going to be minimal after just one app, but if you do learn…
iHi.im → Preamble Jack Smith and myself made a web app a couple of years ago called iHi. It ran on a PHP/MySQL backend and some Google Maps driven JavaScript on the client. The user would hit the site, the PHP would allocate them a unique URL (stored in the database) and they could share the URL with friends, essentially sharing their location. The hosting expired on that site, so I pulled it…
Making elements the same height Sometimes you might have a need to grab a few elements, and then make them the same height. In an ideal world, you'd use CSS, but this isn't an ideal world, so we must use JavaScript! So drop this code in and you can achieve equal heights, really easily: <script type="text/javascript"> function sameHeights(selector) { var selector = selector ||…
A constant barrage of "new things" When I started back in 2009, I remember having a handful of bookmarks that I used to scour for all the information I could lay my hands on... Sites like Nettuts and Line25 were big enough buckets of information on development and design, if felt like those were all a beginner really needed. Then I joined Twitter and started following Smashing Mag, HackerNew…
Everyone and their mother is now telling you to "stick your site on GitHub", but if you don't know what a GitHub is or the idea of forking, pushing and committing freaks the hell out of you, then I hope this short guide will at least help you overcome those barriers and come to realise that it's a dream workflow to have your site hosted on GitHub and all the benefits that come packaged with it.…
Controlling navigation in a large client-side application As more and more applications are moving to the browser, we're now finding ourselves having to fix some of the already solved paradigms, ie. navigation. Sending the user to a different URL is no problem, whether you're using hash based navigation or HTML5 PushState, this is probably going to be handled by your MV* framework of choice.…
They're also decisions and choices in disguise A while ago, I saw this Dribbble shot from Morgan Allan Knutson and I have to say, other than thinking the design of the poster was visually pleasing, the message on the poster didn't really mean that much to me. But… Recently, I've been working on the rewrite of KashFlow's software alongside a dedicated UI/UX guy and noticing how much thought goes…
Kill your output with premature optimisation "Design Patterns", "Code architecture", "Scalability", "OOP", "Maintainability", "The code you write now, is the legacy code of the future", "Be kind to your future self" & "Code smells". Just like Bruce Almighty trying to block out the voices in his head, my pangs of guilt and angst come from the paradigms above; like an unwavering, continuous stream…
Tim Berners-Lee on the Principle of Least Power: "Computer Science spent the last forty years making languages which were as powerful as possible. Nowadays we have to appreciate the reasons for picking not the most powerful solution but the least powerful. The less powerful the language, the more you can do with the data stored in that language. If you write it in a simple declarative from, anyone…
This post is a re-publish from an article I did for .Net Magazine back in September, 2012. Since they've gone and deleted it from their site after redirecting everything to CreativeBloq, I thought it'd be a shame to see it trashed. The internet’s mark is forever; a saying that has plagued the minds of copywriters and web designers for the duration of the modern web. A flippant scrawl on a notepad…
"Side projects, yo!", "Are you going to Open Source it?", "Is it on GitHub yet?", "Please don't make another one; contribute to an existing OS project", "Have a full time job and you create Open Source projects? Congratulations, now you have two full time jobs." Everyone talks about the amazing sides to being involved with Open Source; as we all know, there are many. You can be a complete beginner…
Backbone is awesome. It allows you to write large scale apps but still keep control of the code you're writing (read: it doesn't do all that much for you). However, a lot of people struggle (people, being me, for ages) to level up from the 'Todo' App in the early stages. Hopefully this post and the related GitHub repo will assist you nicely. We're going to be using Dan Harper's sweet ViewManager…
This post isn't going to go too much in depth about what Jekyll is, but more how to get going with it insanely quickly, however; Jekyll is a static-site generator. You give it Markdown, Liquid, HTML & CSS and it gives you a deployment ready site to upload to your server. Go read more on the site. Fire up your command line Now type these commands: gem install jekyll jekyll new my-awesome-site cd…
Backbone is frickin' awesome. What I feel makes it awesome is the fact that it helps you write and structure better JavaScript code and not better "framework-x" code. It's amazingly intelligent but not opinionated, which is what causes problems for a lot of people when getting to grips with it (myself included). The site itself and corresponding docs don't really go beyond the syntax and methods…
Any guesses as to which will alert first? window.addEventListener("click", function(){alert(1)}, false); window.addEventListener("click", function(){alert(2)}, true); Answer: the second one. Explain that to me, yo! The third, now optional, parameter in addEventListener is "useCapture", which literally means fire the event at "capture" and not "bubble". When an event is attached to an element, it…
In the relatively brief time I've spent learning to design and develop, I've learnt a great amount but the most scary and humbling thing I've learnt is what I still have left to learn. It seems to be a rabbit hole of knowledge and understanding. Constantly feeling stupid whilst looking at what others are producing and achieving both drives and grounds me. The key thing that struck me very…
The JavaScript below is perfectly legal, it grabs a DOM element that doesn't exist and then sets it's text. No errors at all. setTimeout(function () { document.getElementById('myEl').innerText = 'Hey there, yo!'; }, 0); var myDiv = document.createElement('div'); myDiv.id = 'myEl'; document.body.appendChild(myDiv); Great Odin's raven!? Imagine your code as building blocks, all stacked on top of…
I must hear the word "API" about 20+ times a day. However, I've noticed a few people recently on Twitter and email me asking "where do I begin with APIs?" or "how do I get started with APIs?". Well I'm hoping after reading this today, you'll 1. Know what an API is and 2. Not to be so afraid to just get stuck in with them! I've tried to write this tutorial whilst trying to remember what concepts…
Today, I released Heisenberg.js, a project base for building modern JavaScript applications. Features From the site itself, here are the key features: Not a framework, but a base project to help you structure your JavaScript code and files. Makes use of the Mediator Pattern, so you can trigger events around your application. Templating built in - Handlebars is included but feel free to change…
I believe that passion is the underlying reason why people and products succeed. Have you ever used a product and you clearly know that there was no passion involved in the design, manufacturing or shipping of said product? Yep. That’ll be the the lack of passion. Misalignment of a button, displeasing typography, odd placement of parts, all of these things, at first glance, might be misconstrued…