Skip to main content

Posts

Showing posts from 2026

Forest Live with Garbage and Skunk Anansie

We saw Skunk Anansie just over a year ago and I haven’t seen Garbage since the Version 2.0 tour in 90s - the best time to have seen them in my opinion. When the opportunity to see them both together came up, of course Charlotte wanted to go - despite it being half way across the country. Soon after we bought the tickets, Garbage announced a gig at the Roundhouse, which would have been closer, cheaper and far more convenient. Support came from Ian Davies and Du Blonde. We eventually figured out that the DJ playing when we arrived was Ian Davies, he had some good tunes, especially when he kept to the 90s.  Du Blonde was quite good, the sort of Indie Rock band which were common in the 90s, singing about similar themes, such as the music industry. Probably the best which can be said about Garbage is they were good. The two guitarists were lackluster, but of course Shirley Manson was great, marching around, in bright red boots, like she owned the stage - which of course she did. Great ...

I Asked an AI to Build Me a Bank Data Platform

I Asked an AI to Build Me a Bank Data Platform. Here's What Happened. Claude wrote this post for me and we reviewed and revised it together. I know this won't be popular with at least a few of my regular readers, but it felt like the right thing to do given the project it's describing.  Lambdas don't play well with RDS databases. Connection pooling, VPC cold starts, idle timeouts — it's a well-documented headache. But a Lambda is the obvious choice for a cloud-native Open Banking API implementation. And RDS is usually the best choice when you want to query and analyse data. I'd hit this tension before and never resolved it cleanly. So I wanted to see if Apache Iceberg could be the answer. It works with Lambdas (just write Parquet files to S3), and it can be queried like a relational database via Spark or Athena. I was also keen to see what the Lambda integration actually looked like in practice. I decided to pair with Claude Code on the build — treating it...

A C++ "Hello, World!" on the public internet

I have been reviewing Fran Buontempo's new C++ book , and somewhere between the chapters on modern idioms and the bits where she nudges you to actually do something with the language, I caught the itch. I have not written any C++ in more than twenty years, and the book reminded me how much the language has moved on without me. I wanted to host something small, written in modern C++, on a URL I could share. This project is the result. The brief I gave myself was deliberately tiny. A single HTTP endpoint that returns `Hello, World!`, built in C++, deployed somewhere real, with the whole thing reproducible from a fresh checkout. The point was not to ship a product. For the HTTP layer I picked  Crow , a header-only framework with a Flask-shaped API. Header-only matters here because it keeps the build simple The whole server is twelve lines: #include <crow.h> int main() {     crow::SimpleApp app;     CROW_ROUTE(app, "/")([]{         return ...

It Started with People: PRs in the World of AI

Sometimes, even when you’re close to your team, patterns or underlying issues emerge over time. Some of these are insights you may wish you had recognised earlier. The important thing is to talk to your team and work on a solution together. Sometimes, together you resolve one challenge and enhance something else at the same time Like many teams, we’ve been through many Pull Request (PR) process evolutions. We started with requests in Microsoft Teams chats - they often got lost. We tried automated notifications in  Teams, but they were only possible in an odd place - so they got ignored, and lost. Then we created a chat for our team just for PRs, with a strict no chat policy, and an emoji system so engineers can see someone is looking at their PR, when there are comments, when it’s approved, and the engineer can even mark it as urgent if necessary.  It worked really well, until something unforeseen happened. The Challenge I realised that one of my engineers was taking on the ma...

Getting Hands-On with Apache Iceberg: From Docker to AWS in a Day

  On Tuesday this week, I was back at AWS on Holborn Viaduct learning about Apache Iceberg with a colleague. Iceberg is a table format standard for managing large-scale datasets and their metadata. The AWS-managed approach is to store the data in S3, meaning you only pay for storage and bandwidth. Other tools, such as Apache Spark , can then be used on top to build a data warehouse - or in this case, a Lakehouse. AWS also supports self-hosting, but this requires you to configure and manage aspects such as maintenance yourself. One of the major advantages Iceberg has over other data warehouses is its support for True ACID transactions, and its table format standard means you don’t have to run a database engine. Anything which wants to access the data can go straight to S3. As a software engineer with a background in object orientation, this feels potentially brittle and a coupling nightmare, but I am sure it works in practice.   The pre-workshop presentations made Iceberg feel...

Should HTTP Status Codes Reflect Business Outcomes?

I’ve delivered my Beyond the Code: Services Which Stand the Test of Time presentation a handful of times this year. Toward the end of the first half, I take a stronger stance and talk more directly about the design of RESTful interfaces. Most of the material in the presentation is framed as guidelines rather than hard rules. However, the RESTful section leans much more strongly toward rules, and there’s one rule in particular that I consider non-negotiable: Never, EVER, use a field in a response to indicate success! Then I show this example on the next slide of why you shouldn’t do it: Just in case it isn’t immediately obvious, there is a conflict here between the HTTP status code of 200 , indicating everything is OK, and the success field in the response body saying that it isn’t. Usually this gets a knowing, sometimes uncomfortable laugh from the audience, but not tonight in Digital Colchester. One audience member challenged this stance with a question I’ve been thinking about since...

Foundation an Earth

I really enjoyed Foundation’s Edge and I had great expectations of Foundation and Earth.  I was disappointed. About 90% of the story just plods on. Then the last 10% is really good, but goes super fast. I think part of the problem is that Asimov was told to write longer books and this has resulted in padding in the form of the character constantly discussing and rediscussing the same points. More frustratingly, it doesn’t finish the psychohistory story and there are no further books in the series. Written only six years before the author's death and followed by two sequels, perhaps there just wasn’t enough time. Some of the sexism from the earlier books is back. It’s very much a book of its time and Asimov's apparent attitude. With Foundation done, I’ll be progressing to Asimov's robot books. Isaac Asimov ISBN-13: 978-0008117535

The Gathering: Great Band. Great Set. Great Venue. Great Sound!

Great Band. Great Set. Great Venue. Great Sound! Need I say more? I will… We loved the Shepherd's Bush Empire the first time we went in December 2023 for Paradise Lost and My Dying Bride, so we were really excited to be going back. It didn’t disappoint. We had some good seats in the balcony and the sound was so much clearer than a lot of other venues we have been to over the last few years (I’m looking at you, The Roundhouse!) The openers were a French three-piece metal band called Lizzard, who were completely new to me. They were progressive, heavy enough, and incredibly tight. Their songs were long, with extended instrumental sections, which I really enjoyed. I loved it! I’ll definitely be listening to more. I’ve been into The Gathering since I heard Nighttime birds. I like all of their albums, but my favorites are the Anneke van Giersbergen era including Mandylion, How to Measure a Planet, If Then Else and Souvenirs. I first saw them around the time of How To Measure a Planet, s...

Help Shape My Research - Your Input Matters!

I’m currently working on a new piece of writing that I’m hoping to present next year, and I’d really value your input.  To support this research, I’ve created a short survey to gather perspectives, experiences, and insights. Whether you’ve got strong opinions or just a few minutes to spare, your response would make a genuine difference. Why take part? Your feedback will directly contribute to real research It only takes a few minutes to complete You’ll be helping shape something meaningful and (hopefully!) impactful I’m aiming to build a deeper understanding of the topic, and every response helps create a clearer, more balanced picture. Take the survey here:   https://forms.gle/VCqJdJz248awjyjNA Thank you so much for your time and support, it’s greatly appreciated!

Clean Architecture is both a product of its time and a set of ideas that transcend its time.

For a book divided into small, discrete and easily absorbable chapters, there’s a lot of Clean Architecture.  Its strengths are the discussion of the SOLID Principles, Compensation and insistence on abstract interfaces, encapsulated concrete interfaces, loose coupling and cohesion - every software engineer should read it just for these. Its weaknesses are the verbosity and its heavy bias towards object orientation and dependency injection, but then it’s a book of its time. The open minded reader will see through this and realise that Clean Architecture is applicable and applicable everywhere. There’s a long appendix which, although quite self indulgent, is actually really interesting and I’m glad I persevered with it. Clean Architecture: A Craftsman's Guide to Software Structure and Design: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series) Robert Martin ISBN-13: 978-0134494166

London Tech Leaders Summit 2026

When One Beyond invited me to take part in the London Tech Leaders Summit, I wasn’t quite sure what to expect. What I definitely wasn’t expecting was a seven‑foot robot interrupting the opening welcome. As the doors flung open, the robot ducked to fit through, marched to the side of the stage, interrupted the speaker, and proceeded to continue the welcome itself. It was initially a little unsettling, but to be fair, its jokes were better. What followed was a full day of presentations, panels, roundtable discussions, and workshops. All were framed through a leadership lens and all centred on AI. I know what you’re thinking: not another AI conference. But this one really stood out. Rather than theoretical hype, it was software leaders - many in similar roles to mine - openly sharing what they’ve learned from using AI, where it’s taken them, and how it’s shaping their organisations. There were several highlights. Hywel Carver , CEO of Skiller Whale , made a particularly memorable point:...

Deep Imports Are Not Faster

I wrote Deep Imports Considered Harmful for two reasons. Obviously to persuade people not to use deep imports, but I also wanted to reinforce that components should have an abstract interface and an encapsulated concrete implementation. I was expecting some pushback, but all I got was something I should have seen coming and covered in the original piece. Here’s the follow-up to get it covered. Every time you tell someone that deep imports are a bad idea, there’s always one reply waiting in the wings: But deep imports perform better. It sounds plausible. It feels intuitive. But it’s wrong. To be fair, this myth didn’t come from nowhere. In the past, some libraries really did ship poorly structured entry points with giant index.js barrels with side effects, no tree‑shaking - a build‑time optimisation that removes code you never use from your final JavaScript bundle - support, and no clear separation between public API and internal implementation. In those cases, deep imports sometimes ...

Back to Basics: Why the principles that built our industry still matter today

Looking ahead to next year, I want to talk about Abstraction, Encapsulation, Cohesion and Loose Coupling as it seems they are missing from a lot of modern software design. Back to Basics: Why the principles that built our industry still matter today There are only three things certain in life: death, taxes, and constant change in software. For decades, we’ve tried to limit that change. Up‑front design and predictive methodologies promised control, but too often delivered the wrong software for the user. In the late 90s, Kent Beck urged us to embrace change through methodologies like Extreme Programming and concrete practices such as Test‑Driven Development. These weren’t trends, they were reminders of fundamentals we already knew. Design behind interfaces. Keep responsibilities narrow. Make dependencies replaceable. These boundaries matter, from functions and classes to services, systems, and infrastructure. These ideas have been with us since the 60s and 70s. The challenge isn’t inven...

Deep Imports Considered Harmful

Keep It Loose Deep down we all know it’s important to componentise software systems.  It allows different parts of the systems, the components, to change and evolve over time with minimal effect on other parts of the system. Designed and implemented correctly, components are loosely coupled , as well as highly cohesive .   In practice this means that components can be changed, replaced, or evolved independently, without causing widespread change throughout the system. Components with responsibilities, and that naturally change together, are grouped together. Components have abstract interfaces and concrete implementations. Interfaces describe the features provided by a component and hide the concrete implementation. Users of components - usually other components - depend on the interface rather than the concrete implementation. If clients come to depend on concrete implementations - the internal details of a component - the benefits of componentisation are lost. The comp...

Persepolis Rising

Persepolis Rising is set thirty years later and goes off in a different and uninteresting direction. It is of course possible that the entire book is setting up the story for the final two to be brilliant, but the story arc is only referenced in the epilogue. At the beginning the story makes the reader feel that there is no resisting the invading forces and initial resistance attempts fail and result in surrender. However, by far the best part of the book, other than the epilogue, is when Holden’s team find a way to hijack one of the invader’s ships. There are only two books to go, maybe it will pick up.

Configuring Claude Code to Enforce Your Own Guidelines

I’ve been using Claude Code without many rules for a while. It’s certainly not the most efficient or effective way to use it. With its help, I learnt how to create some persistent rules around logging. When we’d finish I had Claude produce this blog post. It’s been reviewed and revised by me. See what you think. The Problem with Tribal Knowledge Most teams have coding guidelines. They live in many places, including wikis, onboarding documents, and the heads of senior engineers who will politely point out in code review that you shouldn't log the request body. The problem is that guidelines only work if they're applied consistently, and consistency requires either constant vigilance or automation. I wanted to find out whether I could move my team's logging rules out of a document and into the tool itself, so that Claude would apply them automatically, every time, without being asked. Two Mechanisms Worth Knowing Claude Code offers two complementary ways to encode behaviour: ...

AWS Summit London 2026: And now for something a bit different.

I always look forward to the AWS Summit. It’s a great opportunity to learn what AWS, and the engineers who use it, are up to, and to catch up with my colleagues. This year, though, turned out to be a bit different. The first year I attended, I skipped the keynote entirely and spent the time in the AWS labs instead. Last year I did go to the keynote, and wished I hadn’t. This year I attempted to do both, but it didn’t really work. I managed just one very simple lab before I had to leave for the keynote. Although I did manage to get to the Red Hat stand early and be the first to get an actual red hat! Although I did have to carry it around all day and all the way back to Norwich that evening.     One of the main issues is the size of ExCeL. It’s big. I mean really big. You may think it’s a long way down the street to the chemist, but that’s peanuts to ExCeL. It’s a long way from anywhere to anywhere else. Poor Hitchhiker’s Guide to the Galaxy references aside, many things, inc...