Let’s do awesome things together.

  • I take ideas from inception to operation.
  • I solve your product and technology problems.
  • I do solemnly swear that nothing you read here is generated by AI. I wrote every single word.

Architecture is gardening.

Large software projects are living things. They grow, adapt, and sometimes run wild. The way we design them - and the way we design the organisations that build them - determines whether they flourish or wither. Over the years, I’ve come to see architecture not as a static blueprint or a master plan, but as an act of cultivation. This article is the first in a series exploring my personal philosophy of architecture: how we can guide complex systems, human and technical, with the same care and intention as a gardener tending a landscape. ...

July 8, 2024 · 11 min · Alex

A framework for creating strategy

Recently, I wrote my very first technology strategy. Overall I’d say the process went pretty well. Of course writing the strategy is intimidating to begin with, but once I started I quickly realised that the much more intimidating thing is actually working to implement the strategy after it’s written. I felt and still at times feel like fleeing to the woods to live as a wolf as a result of this realisation but I’m pretty sure my life insurance has exclusions for fleeing to the woods in order to live as a wolf. It’s not the family oriented response you think it could be, despite wolves being good family members that live in packs. ...

June 15, 2022 · 20 min · Alex

The Role of a Software Developer

What if the role of the software developer is not actually about writing software? What if the most important thing I can do today isn’t to write a sweet recursive function that delights and confuses the next human that reads it in equal measure? As our industry has matured, the roles of technical staff in an organisation have changed. Increasingly, companies require that technical folk interact with customers. Some people like this. Some don’t. Let’s have a brief chat about the opportunities and costs of this happening and what that might mean for your progression through the industry and your life. ...

June 1, 2022 · 6 min · Alex

Introducing the QUERY HTTP Verb

Introducing QUERY The IETF has published a document detailing the QUERY verb. The Query verb neatly solves the problem of asking APIs for LOTS of data or conditional data. In other words, QUERY enables API providers to provide a means for clients to ask the server about data, where the client isn’t sure what data is available. A worked example Working in Agri-tech, I often want to find out information about animals. Unfortunately, that information can live across many systems, with many identifiers (primary keys or other). In one context I’ve experienced, Dairy Animals can be identified and referenced by five or more different identifiers - so what do you do if you don’t know all of them? ...

November 25, 2021 · 7 min · Alex

Trialling One Day Sprints

1-day sprints are a fantastic way of turning the traditional time pressures a team might face from negative to positive. They act as a time constraint on the team and force clarity, agility and feedback into your work system in far more significant amounts than you might already have. They can act as circuit breakers for teams struggling to meet sprint goals. They can create momentum in and outside of the team and encourage teams to focus on producing the smallest impact possible for your users. They carry risk, but some thoughtful conversations upfront can minimise any negative impact later on - and the rewards are well worth it. ...

October 17, 2021 · 7 min · Alex

Implementing a team topology

Any organisation that designs a system (defined broadly) will produce a design whose structure is a copy of the organisation’s communication structure. — Melvin E. Conway Introduction Team topologies are a concept created and popularised by Manuel Pais and Matthew Skelton. They describe a way of reforming your organisation shape in such a way that improves the architecture of your software while reducing cognitive load and directing more energy and focus towards the streams of value that flow through your organisation. ...

February 24, 2021 · 21 min · Alex

SQL Joins with Sequelize

While working on an API for my day job last week, I needed to do a SQL Inner Join with Sequelize and Typescript in a web API. Here’s how I achieved it. Environment: Things move quickly in the JS ecosystem. Here are the library versions used in the subject API at the time of writing: "dependencies": { "@types/express": "~4.0.39", "@types/sequelize": "^4.27.21", "express": "~4.16.2", "sequelize": "4.38.0", } Context: I have an identifier in one system that I need to correlate with an identifier in a second system, but I could only do that via an intermediate identifier, also in the second system. A good case for a SQL Join. ...

October 11, 2020 · 5 min · Alex

Running Deployments with Github Actions

In a previous article I wrote about Getting Started with Github Actions . In it, I talk about the basics of Actions, how they work, what the language looks like and how you can get started. If you’ve never used Actions before, I highly recommend you have a quick read of that before reading this, as I build on some of the ideas presented there. Continuous Integration (CI) versus Continues Deployment (CD) versus Continuous Delivery (unhelpfully, also CD) Put simply, continuous integration is the act of continually moving your changeset into the wider codebase, as frequently as it makes sense for your use case. CI is an essential practice because it drives us as engineers to produce smaller changes more often, and these small changes tend to be less risky individually. Those small changes also lead us to deliver value to our users more rapidly, and more often. ...

July 13, 2020 · 11 min · Alex

Getting Started with Github Actions

Continuous Delivery is a foundational skill that your organisation needs to be good at if it is to remain responsive and ’lowercase a’ agile. A full solution for continuous delivery tends to include (but isn’t limited to): The ability to create artefacts that we can release to production, across many products, teams, branches, environments and repositories. The ability to quickly validate an artefact as a candidate for release (through applying the testing triangle - unit, integration, acceptance, smoke and so on). The ability to release code to production without necessarily activating it for users (typically through feature flags, canary built and graduated rollouts). The ability to rapidly respond if a release candidate we later find to be problematic (again through canary builds, graduated rollouts, and by quickly rolling back software found to be problematic). The ability to audit or understand what code is where, what state that code is in, and why that code is where it is. More concretely, a decent CI/CD solution will: ...

May 28, 2020 · 13 min · Alex

Spring Boot - Comparing Liquibase and Flyway

What are Spring Boot, Liquibase and Flyway? The Spring Ecosystem When you need to create a web application or an API in Java, be that RESTful, SOAP or GraphQL; whether you’re looking at synchronous HTTP, Asynchronous or Reactive, Messages on Queues or Event Sourced with Kafka, it’s hard to go past the Spring Ecosystem. If nobody ever got fired for buying IBM, you could probably say that nobody ever got fired for creating a Spring-based application. ...

April 23, 2020 · 9 min · Alex