Over 18 years experience in a variety of industries, developing distributed systems and web applications. I am passionate about improving the way that software is developed, with a particular focus on simplicity and quality. I have plenty of experience of delivering high-quality applications which have been developed in a sustainable manner.
I like to work on simple systems, refactoring ruthlessly to evolve the design. I’m a big believer in starting small, demoing & releasing often, and iterating based on user feedback.
In 2008 I began learning Scala, in 2009 I used it on a small production application, and at Sky I introduced it to the team, switching all new development to Scala. In recent years I have enjoyed learning pure functional programming in Haskell. Through this journey I have found that fully utilising the type system results in clearly documented code, that is simple to test and easy to reason about. At Deutsche Bank I championed Haskell and Elm for two production applications, which was well received within the team.
- Functional Programming
- Continuous Delivery
- Pair Programming
Elm Websocket—a library for creating a websockets server in Haskell, which automatically generates the Elm client code. This includes JSON codecs and data types, derived from the Haskell types.
Clairvoyance—a specification-by-example testing framework that produces living documentation on the system's behaviour.
We are replacing an excel pricing spreadsheet with typelevel scala, mongodb, reactjs, kubernetes, etc.
In addition, we will automate documentation generation and execution.
Developed a front-office application for the lifecycle management of trades within Structured Finance. The project consisted of a small team of developers, responsible for talking to senior members of the business, building the system to capture the transactions, and supporting it in production. The project has been a large success, and we had a good relationship with front and middle office.
On this application I championed a number of technologies within the team. The front-end was a single page app written in ScalaJS (on top of React). This allowed us to shared data types, safely refactor across the entire stack, and write some pretty amazing abstractions to scrap boilerplate code. The server was written in functional scala using Typelevel libraries.
I was also on a team tasked to develop a workflow system for rates exotics sales and trading. We began with a small prototype, which was shown to traders and iterated upon.
Part of a small team to rewrite an application to communicate with telephone switches. I was the main driver behind the team adopting Scala. I wrote a port our chosen acceptance testing framework to run with Specs2 tests, which I maintain on Github and has a number of users outside of Sky.
I also lead the development of rewriting an address matching application, using Lucene, Scala, Scalaz, Dispatch and Spray, which was delivered ahead of all estimates, despite most of the team having to come up to speed on Scala. The application is written in a pure functional style and has no exceptions, no 'if' statements and had only one small bug once going live. It has a full set of automated tests and can be deployed to production in minutes.
Developing the reporting tools for Wiley's online library. Billing is based on aggregated usage statistics to various pieces of content, therefore timely and accurate statistics are important. We collected, normalised and stored access information in a distributed data grid, then aggregated in multiple dimensions. Because the system was asynchronous and distributed, testing it comprehensively posed a challenge to the team, so my experience in this area proved useful.
I was contracted replace a telephone provisioning system, written in Oracle PL/SQL, that was scaling poorly with increased subscribers. Rather than completely discard the existing system, we designed the new system in such a way that provisioning events would be routed through the existing workflow system until the replacement workflow had been developed. This allowed us to deploy very early in the project, gaining rapid feedback and allowing the business to quickly see return on their investment.
Worked in a 100% agile development team on a document rendering system. Our team pioneered the use of XP development processes within the bank. Among other things, we developed strictly in pairs, enjoyed close collaboration with system architects/stakeholders/testers, had full test coverage, and continuously improved our process.
Various consulting projects in government
Various consulting projects in the banking sector
University of Queensland, Master of Information Technology Studies, 2004-2005
ACU, Bachelor of Information Technology, 1997-1999
Sun Certified Java Developer, 2000