Software Developer

I have over 5 years commercial software development experience spanning multiple industries and technologies. I am specialized in .NET & Scala and prefer to work with teams embracing modern agile methodologies, micro service architectures and open source software.


My strong education in mathematics has helped me quickly accelerate my career past day to day, dumb, CRUD style projects and into data science focussed roles. I have deployed machine learning algorithms at scale and re-architectured entire data platforms to meet modern big data demands.

Specification structured testing
26 February 2018

Unit testing on .NET Core is pretty opinionated and messy. The wide range of frameworks and the lack of a standard structure beyond Arrange, Act, Assert doesn’t help much. My .NET unit testing opinions are well rooted in what I like to call specification structured testing. To support this, I’ve pulled together a library of base classes that provide a standard for writing concise unit tests in a specification structure, whilst leveraging existing frameworks and tooling. You can find it on GitHub and NuGet.

Emulating the GameBoy CPU on .NET
03 December 2017

This is the second part of a series of articles that I’m writing based on my experiences with my GameBoy emulator written in .NET Core; Retro.Net. This time I’ll be having a look at the core of the emulator, which implements a high level form of dynamic recompilation to emulate the Z80 derived GameBoy CPU.

Emulation on .NET
25 November 2017

Please check out my GameBoy emulator written in .NET Core; Retro.Net. Yes, a GameBoy emulator written in .NET Core. Why? Why not. I plan to do a few write-ups about my experience with this project. Firstly: why it was a bad idea.

The Modern Development Paradigm Shift
22 November 2017

When put into context by the birth of HTTP being over 25 years ago, or the almost 50 years worth of milliseconds added to UNIX time since the epoch, my 5 year software development career is very short. But even during this time I have seen an exponential shift in software development methodologies and technology. This has been unanimously for the better and means that we are no longer reinventing the wheel every day and are instead making cool stuff. Some teams have embraced this, accepted that what they learnt 3 years ago is now almost useless, discarded it and moved on. Others, however have simply fallen behind.