Over 15 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 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 has been well received within the team.
- Pair Programming
- Functional Programming
- Continuous Delivery
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.
I am currently working on a project to address an audit point within structured finance. Strand is a front-office application for the lifecycle management of structured transactions that consist of multiple bookings, some of which carry non-standard risks.
The project consists 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 have a good relationship with front and middle office.
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. In my own time I wrote a port our chosen acceptance testing framework to run with Specs2 tests, which I maintain on Github and has a small number of users outside of Sky.
I 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.
In my free time I wrote a JMX statistics collection and dashboard monitoring system (Scala, Liftweb) for 30+ applications. This has prevented problems in production on numerous occasions, and is used by support, developers and managing directors.
A large, 30 developer project, developing an online library. Much of the revenue for the business is based on usage statistics to various pieces of content, therefore timely and accurate statistics are important. I was put on a team of six developers, working on the reporting subsystem of the website. Raw usage information was stored in a distributed data grid, analysed in various ways, and aggregated in multiple dimensions. Because the system is asynchronous and distributed, testing it comprehensively posed a challenge to the team, so my experience in this area proved useful.
I was contracted to develop a telecommunications provisioning system for Sky Talk. The team’s primary role was to develop a replacement to the existing system, written in Oracle PL/SQL, which 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. Each bi-weekly deployment contained more workflows, until the existing system was no longer used. This allowed us to deploy very early in the project, gaining rapid feedback and allowing the business to quickly see return on their investment.
I was offered a contract renewal, however I left to travel for six months.
Worked in a 100% agile development team on a Java based financial 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. This approach was highly successful - to the point that on numerous occasions, we were asked to talk to other development teams to promote agile practices. Furthermore, as a result of this experience, I was invited to present at the Agile 2007 Conference in Washington DC.
A short consulting gig to produce a integration component between an existing Windows application, and a third party Java application.
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