Projects   Work   Skills

Latest blog post: Easily Applying a Fluent Builder Pattern to Javascript Classes

Professional Experience
because projects are useless without clients

June 2012 to Present

I am the sole database engineer at Pzazz, a UK wide franchise which provides art, drama and music clubs to schools.
Zing is a custom built Java based web-application, using a Neo4j backing store to resolve complex authentication issues.
I use TDD principles and Continuous Integration to ensure a high quality product, which can be found on GitHub.

Rare Ltd.;
July 2014 to September 2015

I worked as a Software Development Engineer Intern at one of the UK's greatest and oldest video game developers, writing performant C++ for Xbox One.
Part of Microsoft Studios, Rare are well known for their many AAA games, including Goldeneye 007, Banjo Kazooie, and more recently Sea Of Thieves.
I worked on both Sea Of Thieves and Rare Replay.

Succeed Consultancy;
Summer 2012, 2013

I was Junior Developer at a small yet successful PeopleSoft and Oracle based consultancy.
I worked on an internal document system, producing interactive graphs in d3.js, a task planner and a complex search system. I also used Java to interface with MongoDB and Neo4j system.

Sea Of Thieves Rare Replay

Sea Of Thieves

Be the pirate you want to be!

On Sea Of Thieves, I worked on integrating our sound middleware into the Unreal 4 engine in a test-driven manner, making sure it joined cleanly into the audio team's workflow.

Rare Replay

Experience a compendium of Rare's finest games!

On Rare Replay, I was responsible for all user authentication and Xbox One related controller connections. I also worked on UI, saving/loading, and ensuring we hit all the stringent quality measures required for all Xbox products.

“Rare Replay is, simply put, one of the best collections in gaming history.”
- Attack of the Fanboy (10/10)
“This collection alone is reason enough to buy an Xbox One.”
- XGN (9.5/10)
“A new milestone for compilations.”
- Destructoid (9/10)

Personal Projects
because I like to experiment

Education & Skills
because not everything has to be learnt on the job

  • The University Of Sheffield

    I study Artificial Intelligence & Computer Science at Sheffield University. I aim to graduate in the summer of 2016 with a 1st class degree!
  • Udacity

    I took CS101: Building a search engine, passing with a high distinction. This course looked at creating a web crawler to index many linked pages.
  • Stanford Database Course

    Completed with 81% in the final exam. I learnt about core database concepts, including normalising and ACID compliancy, as well as writing advanced SQL queries and understanding XML XSD and DTDs.
  • Watford Grammar School For Boys

    A2 grades:
    A, Computing (won prize for best performance)
    B, Maths
    B, Physics
    B, Psychology

  • Strong programming skills

    I have strong, professional experience with: Java, C++, Javascript, HTML, CSS, SQL, Neo4j/Cypher, Git, Perforce, as well as using TDD with Continuous Integration servers (Travis, TeamCity.)
  • Great development abilities

    I have solid, personal experience with: Python, Rust, and Meteor.js
  • Awesome with people

    I'm comfortable both as a leader and a contributor in a team, and I'm always happy to present to audiences on topics I'm interested in.
  • What specification?

    I work best in a behaviour driven development cycle, writing specs and tests first before implementing.
  • We Love To Party

    I throw sick parties. Not a software skill, per se, but I put on awesome light-shows for parties.

because sometimes I write about stuff

  • Easily Applying a Fluent Builder Pattern to Javascript Classes

    Javascript is a free-for-all when it comes to mutable objects. js-builder-decorator can ensure your objects become read-only, with a clean builder interface.

    As functional programmers are keen to remind us, immutability. is. awesome.

    Immutable objects can’t be changed in any way, meaning they’re completely thread-safe, they’re easy to reason about, and values you depend on with them aren’t going to change unexpectedly. More and more languages are moving over to “immutable-first” thinking - that is, instead of adding a “const” or “final” keyword like in C++ or Java to stop an object changing, rather objects are immutable by default and require keywords like “mut” in Rust to make them mutable.

    Javascript however, does not offer such keywords (ES6 is looking to change that however!) as of yet. Facebook’s immutable.js helps out, as does seamless-immutable.

    A problem with these however, is they require all objects be constructed immediately before being passed in, and for classes with many fields, this can become cumbersome as the constructor may require many arguments to be passed in. The best solution to this “telescoping constructor” anti-pattern is the fluent-builder pattern.

    What here, looks easier to read?

    Read more!
  • Safely Automerging Git Branches With Rultor

    Your master branch should always be clean, and pull-requests have the risk of breaking that. Luckily a tool named Rultor is here to help…

    Continuous integration & delivery are brilliant tools that allows us to ensure a software product is always ready to release. Using an external build server to make daily (or more regular!) builds of your source code lets everybody on a team know the health of the product - is it building for all platforms? Are all the tests passing, and in a timely manner?

    It’s trivial to link a public GitHub account to somewhere like Travis, which can let you know within minutes of your commit if you’re going to see that dreaded build failure badge or not.

    But wait, why should you only know this AFTER the fact? Why not find out if a build is failing before allowing commits to master, and rejecting it right there? This is where Rultor comes in to save the day.

    Image of Rultor in action.

    Read more!
  • Std::pair Is Not Okay

    Take the time to make a struct or complete class: future devs will thank you.

    I came across code equivalent to this abomination recently, written by a long-lost developer in the time before code-reviews. It’s not long, but it’s not great.


    Read more!

  • The Windows .Bat Variable Quirk That Cost Us an Hour

    Variables in the Windows CLI have an interesting property that makes how you set them important

    We had a bit of fun at work today, trying to figure out why on earth 3GB of seemingly junk data had been copied into a folder my colleague was working in.

    Jack had been trying to copy a single file called %file% from %TEMP% to a folder we’ll call %destination%. With the rest of the unnecessary code stripped away, this is essentially what he had:

    Seems… pretty normal right? So where was all this junk coming from? Closer inspection of the files didn’t exactly give any helpful clues; it consisted of odd .html files, some small gifs and even the Java 7 installation file.

    Read more!

  • Explorations in Statistics

    (or why you should never extrapolate from tiny sets of data)

    I was wrong today. That was pretty cool.

    It all started off when my fellow second year computer science students started getting results back for an assignment written in Haskell.

    I got my result back. 65%. I was shocked. I normally average 85%+, and here I was, with what I considered to be an awful mark. There wasn’t even any feedback on where I’d gone right and wrong. Just a single, cold mark.
    Naturally I reached out and asked my friends what they’d got.

    Read more!