Photo by Helloquence on Unsplash (Edited)

The importance in getting the API correct and the initial design of the API.

Editor's Note: the previous story in this series is “Introducing”, about the idea to ship a project demonstrating thinking to the world.

The Contract

The fundamental assumption I am making with this application is that it will be consumed over the network. There are two different was we can express the internal state of this application over the network:

  1. As a rendered user interface to be consumed by a browser
  2. As an interface through which clients can make specific remote procedure calls (RPCs) and receive structured information but no user interface

Generally speaking I strongly prefer the latter approach.

To render or not to render

In small…

A volunteer project to demonstrate how I approach software engineering

More recently I have found myself looking for a new position for a software engineering company in DE, Germany. This has brought about a number of new and interesting challenges; most particularly for this article the need to demonstrate my capacity as a professional software engineer.

The challenge when applying for work is attempting to showcase skills in such a way that demonstrates to future employers that I am a competent, solid investment to help improve their organisations and their teams and to demonstrate that I am capable of doing the work that I am say I am.

To that…

Hardly a revelatory notion and yet while I was sitting drinking my Sunday morning coffee the idea seemed to drive a needle directly toward the heart of organisational dysfunction, illustrating a set of nebulous and seemingly disconnected problems behind a singular easy to grasp notion.

One that I am unclear that will hold up and yet one that I feel is worth exploring literally.

The many and varied organisational dysfunctions

Organisations are not necessarily linearly predictable in their output and it can thus be difficult for an outsider to see whether a given organisation is “dysfunctional”, relatively speaking. …

Photo by Masaaki Komori on Unsplash (Edited)

Extending a “locking” primitive to allow updates on given primitives in ${N} directions

Recently I had the chance to work with the at Global Fashion Group in Berlin to help them work on shared services across ventures such as the Iconic, Zalora, Dafiti and Lamoda. This business operates at several orders of magnitude more scale and has grown aggressively in its fairly short time to become among the the largest fashion companies in the world.

This has been an interesting experience and one that, on the whole, I am enjoying immensely. With the new job comes new technical challenges, one of which is the challenge of “scale”.

The platform pushes through an obscene…

Our world is hopelessly, hilariously complex. Both Thomas Thwaites in his quest to build a toaster[1] and AJ Jacobs in his quest to thank all the people responsible for his morning coffee[2] illustrate this complexity; it is essentially impossible to reason about how the world works together to produce the various miracles we experience on a day to day basis.

With software eating the world[3] we in the software engineering community are tasked with finding a way to represent this impossible complexity in our software ecosystem. …

Photo by Shot by Cerqueira on Unsplash (Modiifed)

There are a series of allegories that encapsulate the murkier, more confusing part about producing software — the human part:

“Culture eats strategy for breakfast” — Peter Drucker¹

“Organizations which design systems …​ are constrained to produce designs which are copies of the communication structures of these organizations.” — Melvin Conway²

Recently a team I have been working with has been evaluating and architecting a shift from a monolith to a microservice architecture with the goal of isolating domains of the business within their own failure boundaries and increasing the aggregate availability of all services.

This in an of itself…

Photo by Evan Dvorkin on Unsplash (Edited)

Looking for a fuller version of this article with pretty syntax highlighted code and additional tips & advice? Check out the original on

Recently I have had the opportunity to join teams employing a number of different approaches to continuous Integration and Delivery (CI/CD):

  1. Version Control: Scripts embedded in the git repository, executed as a result of git events
  2. GUI: Scripts written and uploaded to a server, executed on arbitrary events (time, git hooks)
  3. None: Scripts sitting on a bastion server, executed as required

In all cases the team had a set of reasons for employing the solution the…

Photo by vision webagency on Unsplash (Edited)

How organises projects as well as why we do it in that way

Version control is one of the more fundamental pieces of software development. It allows developers to navigate through a projects history to understand who implemented each change, as well as why they did so. It is an invaluable tool for use while understanding any given issue. uses git as its version control tool of choice. git is the defacto standard of the software industry, having replaced Mercurial, Subversion and CVS. The majority of our development tools and our workflow builds on top of git primitives such as:

  • patches
  • branches
  • tags

And so forth. That said git, for all its…

Photo by Analise Benevides on Unsplash (Edited)

Understanding what (e)BPF is and what its used for

I have a fairly long history using Linux for a number of purposes. After being assigned Linux as a development machine while working with the team at Fontis a combination of curiosity and the need to urgently repair this development machine as a result of curiosity driven stick pokery meant that I learned a large amount of Linux trivia knowledge fairly quickly. I built further on this while helping set up Sitewards infrastructure tooling; a much more heterogeneous set of computers and providers but with a standard approach emerging built of Docker and Kubernetes.

The sum total of this experience…

Photo by Tim Gouw on Unsplash

A story about the process of becoming an “expert”

I have been extraordinarily lucky in my software development career. Given a limited set of experience and idle curiosity about computers I was able to meet a number of people who guided me to developing my development skill set until it is the reasonably broad, experienced skill it is today.

As I’ve grown as a developer I’ve been able to meet other extraordinary developers; those who when I was early in my career seemed god-like in the ability to produce software, understand or diagnose some issue or be able to foresee some industry pattern. Even outside of the software development…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store