....oooo..
ooOOOOooooooooOOOOOO..
......oo.. ..........ooOOOO..
.. ......
..
..
..
oo ..
.... ..
oo.. ....
.. ..
.... ..oo
.... ..oo
.... ..OO
.. ooooooOOOOoo.. ..oo
ooOOOOOOOO00000000@@00OO.. ........ ..oo
@@@@OO .. ..OO00OO.. ..OO00000000000000OOoooo..
oo00.... ..oooo.. oo@@00000000.. oo00@@OO
00.. OO@@@@@@@@00OO 00 OOOO OOOOoo @@00
00 ..OOooOO0000..oo ooOO ..OO OO00@@@@@@00.. oooo00
00 OOoo ooOO ....0000ooOOoo OO
OO.. 00.. ..00 .. oooo
ooOO OO OO 00
oo oo.. ..oo OO oo00
..oo ..........oo ..oo.... ..ooooOO
oooo .... ..OO
OOoo OO
OO.. OOOO OO
OOoo ..@@@@OO ..OOOO.. 00
00.. ..ooOOOO0000OOOO000000oo 00
OOoo ..OOOOOO00OOoo00@@@@@@OO.. 00
OOoo OOOOooOOOOOOooOOOO000000OOoo.. ..00
..OOoo.. oo0000OO00OOOOOOoo..0000OOOOOOOOoo OOOO
..OOOO.... OO0000OOooooooOOooOO00OOOOooooOOOO ..OOOO
..0000oo......OOOOoo .. ..ooOOOOOO.. ..oo00OO
..0000OOOOoooooooo ..OOOOoo ..OO00OO
..OO0000oooooooooo OOoooo....OO00OO
oo000000ooooOOOOoo .... ooOOooooOO00OO
oo00OOooooOOOOoooo .. .... ooOOOOOOOO00OO
ooOOOOooOO0000oooo.... ..ooOOOOOO0000OO..
..OOOOoooo00OO..oo.... .. .. ..oo..ooOOOO0000OO..
..ooOOOOOO00OO.......... ...... .... .. ..ooOOOOOO00oo
ooOOOOOOOOoo....................oooo....oo ..oo ooOOOOOOoo
OO00OOOOOOOOoo....OOoooooo ..ooOOOO..OOOOoooo .. ..OOOOOOOO..
oo00@@@@00oooooooo....oooooo........ooOOOOooOOOO.... ......ooOOooOOOO..
OO00@@@@@@@@@@@@00oooo.... ....oo00..oo ooooooOOOOOOOO.... ........ooooooOOOOOOOO
oo00@@@@@@@@@@@@@@@@@@OOoo..oo.. ..OOoooo..ooooOOOOOOOOOO..oo ......OO..ooooooooOO@@@@00oo
oo@@@@@@@@@@@@@@@@@@@@@@00OOoooo.. oooo....ooOOOOOOOOOOOOoooo.... ..OO......oo..OO@@@@@@@@@@@@oo
00@@@@@@@@@@@@@@@@@@@@@@@@00oo...... oooooo..ooooOOOO0000OOOO.... ....oooo....OO..OO@@@@@@@@@@@@@@@@00..
@@@@@@@@@@@@@@@@@@@@@@@@@@00 oo.... .. oooo....ooooOOOOOOOOooOOoo .. ....oo.. ..ooOO@@@@@@@@@@@@@@@@@@@@00
@@@@@@@@@@@@@@@@@@@@@@@@@@OO......oo.... ...... ....00..00..oooo.. .. ..oo ......0000@@@@@@@@@@@@@@@@@@@@@@@@OO
@@@@@@@@@@@@@@@@@@@@@@@@00OOoo....oo oo .... ooOOooOOooooOO .. oo ......OO0000@@@@@@@@@@@@@@@@@@@@@@@@@@OO
@@@@@@@@@@@@@@@@@@@@@@@@00oo....ooOO.... ........oooooo00OOoo..OO.. ...... ..oo..oooo@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO
@@@@@@@@@@@@@@@@@@@@@@@@00OO....oo.... .... ......ooOOOO00ooOOoo.... ...... oooo..oo00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@oo
@@@@@@@@@@@@@@@@@@@@@@@@OO..oo..oooo.. ...... ..OOooOOooOOooooooOOoo.. .. ..oo......00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@00oooooo..oo.. .. .... OOOOooOOOOoo....oo.. ...... @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@00OOoo..ooOO .. .. ..OOOO..oo..oooooooooo.. oo.. ..00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@oo .. .... .... ..OOOO..oo..oooo..oo.. .... OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@OO....oo..oo.. .... ooOOoo..oo..oo..oooo.... .. ......00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@OOoo oo..oo.... ooooOOoooooooooo...... .... ....00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@OOoo..oo...... .. ..OOOO....ooooOOOO..OO ..OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@00OO.... .......... oo......oo..ooOOOO..oo ....oo00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@00OO..oo .. ..oo....oo..oo OOoo..OOoo...... ..0000@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOoooo.. oo...... oooooo....oo....oo.... .. ..00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOoo............ oooooo..oooooo...... ..00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OO00oo..ooOO ooOOoooo..oooo.... ........oo@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0000....ooOO ..OOOO....oooooooo.... ..OO00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0000oooo..OOoo....ooooOO..oo..OO........OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OOOOOO00OOOOoo..OOooOOOOOOoo..OO..00@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@00OOOOOO000000OO00OOOOOO00OOooOO00OO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0000000000@@@@00OO@@00OO@@@@OOoo0000@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
I wrote my first BASIC program in 1985 and never looked back. I have worked on everything from x86 assembly language PCI ROMs, to distributed Python applications split across 20 repositories. My specialisms are software maintainability, simplicity, and automated testing. I enjoy working in environments where quality is not negotiable, where the reliability of software is paramount. In my spare time I cook spicy food, and play loud guitar.
2021-09-01 - Present
Docker, Bash, Python, C++, Linux, System Design
DetACT: Full software development life-cycle responsibilities; feasibility study, requirements capture, design, planning, implementation, testing, TTO and maintenance. Team is responsible for ongoing platform improvement, refreshing a legacy codebase while still allowing new features to be added.
AVATAR: Team lead of project to fix critical defect. Full life-cycle responsibilities from root cause analysis through to deployment. Defect was caused by a fundamental design flaw in the software. A new component was designed to rectify the defect, and was built and integrated with existing systems without interrupting normal service. Defect was categorically fixed and has not reoccurred since.
DORA Metrics: Team Lead of project to automatically measure the DORA Four Key Metrics for our product. Full life-cycle responsibilities, from requirements capture to deployment. Solution identification build-or-buy stage showed that no commercial products could support our custom, private infrastructure; therefore, project will use open source Apache DevLake, and modify it to integrate with our custom deployment systems. Iterative project with both development tasks (building the reporting system and dashboards) and process improvement tasks (how do we change our processes to record better data).
Trainee Program: Teaching software engineering skills to apprentices. Mentoring them through exercises ranging from entry level, to simple but real projects for the team. Developed concept and all training materials. Apprentices went on to join development teams, and contribute to the platform.
2019-11-04 - 2021-07-31
GCP, JavaScript, React, Mongo DB Atlas, NodeJS
KRATOS Team: Team lead on brownfields project. Continuous improvement of legacy code, database migrations, feature development. Designed future software architecture and migration strategy. Mentored junior staff.
2017-10-01 - 2019-09-30
Unity, C#, AWS, JavaScript, Python, SQL
Taal Extra: Tech lead delivering new product line, on time and budget. Involved in requirements capture with external partners, designed the system, broke design work into work packages, and led a team of three developers to build the system.
Development: Individual contributor. Worked on tickets across the stack, which involved an HTML 5 JavaScript game player, the Unity mobile game client, and the shared Python backend.
2012-01-04 - 2013-08-01
WCF, C#, WPF, MS Unity, SQL
Test Spec: Full life-cycle responsibility for multi-user system. Requirements capture, system design, implementation. Introduced database migration tooling and iterative development.
AeroServer: Individual contributor. responsible for database development, DAL, GUI and API to vehicle telemetry systems. This software was successfully deployed track-side at Formula 1 races.
2004-01-04 - 2011-12-14
C#, WinForms, Custom protocol development, SQL
Radio system: Lead developer and designer for a set of .NET WinForms applications to control a bespoke radio system, allowing the user to configure the radio, send and receive data, and analyse results. Part of a multi-disciplinary team that included RF engineers, embedded software developers, and end users.
Command/Control system: Developer for a .NET WinForms and SQL Server internet facing system that provided command and control for various disparate internet facing appliances. Part of team of six software developer of varying skill and experience. Introduced static analysis, automated unit testing, and pair programming to the project.
ETL system: Lead Developer for a data export system that connected two UK Government departments. Introduced staged delivery of software to test team, in order to get faster feedback on project progress.
1997-09-01 - 2000-06-01