Contact Details

Based in Cambridge, UK. Not willing to relocate.

Please use my online contact form to contact me as I do not publish address details on the web.

Technical Summary

I am a generalist, but my early consulting experience shows that I can quickly become proficient in whatever area of software development is required to get the job done. Recently I have been mostly managing humans and writing web services with Python.

My Stack Overflow profile

Professional Experience

June 2018 - Present
Engineering Manager, HP Wolf Security Manageability Team
  • Took on leadership of the Manageability team I had been part of at Bromium after former manager left the company. Led us through the acquisition by HP from September 2019 through May 2020, taking on more formal line management duties of developers on the team than we'd been used to as a small startup.
  • Helped the team navigate the transition to HP while simultaneously shifting to fully remote work during the COVID-19 pandemic.
  • Grew team from 4 to 13 plus associated contractors. Some mentoring and coaching through regular one-to-ones as well as formal company-wide review programs
  • Successfully led team through process improvements to improve productivity, such as the "shift left" of QA, from batch verification on sprint builds to verifying individual tickets before merge. Producing automated documentation of our third party dependencies and their licenses. More automatic process for creating release notes.
  • Restructured team for scale and changing demands as we grew. Introduced a Sustaining Team for handling unplanned work, maintaining and improving CI/CD infrastructure and tests, assisting operations in support of cloud services. Split team into feature teams with Technical Product Owners to work with stakeholders.
  • Oversaw team transition to more focus on cloud hosted, cloud native services at scale. Shift from Windows stacks on EC2 to docker containers in ECS, SQL Server to Postgres, making use of SQS for the celery broker. Python codebase retained support for dual platform, dual RDBMS to support on-prem customers on the old model with the same codebase. Team grew largest instance of our Django stack to handle millions of active devices, while also scaling up our cloud infrastructure to support instances for hundreds of customers.
  • Team also took on the building and maintenance of additional new services for multi-tenancy, license management and automated self-onboarding for customers who buy through HP Sales systems.
December 2014 - May 2018
Bromium, Cambridge
Member of Technical Staff, Manageability Team
  • Senior developer in the Manageability team, working on the Django based server for managing devices with Bromium’s endpoint security product installed on them. Delivered to Enterprise customers for on-prem use as an installer for Windows Server, with a configuration tool written in C# to configure the site in IIS, using SQL Server as the database. I worked as a key team member across all aspects of this product, mostly on the backend.
  • Introduced the use of celery to run background tasks, dramatically improving scalability and enabling many new features. Created a Windows Service (in pure Python with ctypes) to run the celery scheduler and workers on-prem, requiring some extensions to celery internals to enable them to be terminated cleanly at service shutdown.
  • Designed and coded a custom audit system to track changes to models made during Django views, utilising various hooks into Django’s ORM to introspect the changes made during transactions. This was necessary to handle bulk updates in a performant manner, unlike the available third party libraries that were tested at the time.
  • Designed and implemented a custom role-based access control (RBAC) mechanism. Required roles to be scoped by a model's relationship to other models, so that users could be assigned permission to do things that only affect subsets of devices that the service manages. Extensive searching at the time found no existing third-party libraries that could provide such scoped RBAC support for application dependent security contexts.
  • Identified the need/opportunity for various security improvements over the years, such as introducing Content Security Policy headers for defence in depth.
  • Maintained and improved test coverage whenever possible in unit tests and higher level integration tests driven by Selenium and enforced via our Jenkins CI system.
  • Also made contributions to other services and codebases in use around the product. Included code contributions to a highly concurrent, caching API gateway service written in Go.
January 2008 - November 2014
Velocix - An Alcatel-Lucent Company, Cambridge
Technical Lead
  • Worked as a key member of the Engineering Team throughout the transition from a startup running a Content Delivery Network as a service, to being a wholly owned subsidiary of Alcatel-Lucent selling a productised version to ISPs.
  • Worked on many backend services in Python. Designed and wrote new components where required, with unit and functional tests alongside. Extended, maintained and fixed bugs in existing services, refactoring to add unit tests where possible.
  • Replaced a legacy configuration tool, written in C++ and Perl, with one I wrote from scratch in pure Python. The new system was more configurable, easier to deploy and use and faster to run. I provided a functional test suite and full documentation, which the Operations Manager later commended me on for its readability and completeness.
  • Designed the software architecture for a core REST API. Chose the Flask Python framework with eventlet for concurrency, served by gunicorn reverse-proxied behind nginx.
  • Worked on the team implementing the REST API. The team was awarded for achieving high unit test coverage and producing useful code documentation (doxygen).
  • Maintained a legacy web UI, written in Perl using the Catalyst MVC Framework and JavaScript with jQuery for parts of the front end.
  • As Technical Lead, I introduced and led many automation, process and architecture improvements:
    • Wrote, documented and introduced a schema migration tool to manage changes to our core relational database. Enabled the Engineering Team to scale to multiple independent Scrum teams that could all work across the full stack in parallel.
    • Proposed and designed a move away from monolithic Apache instances towards a system of multiple backend web-services fronted by nginx used as a public reverse proxy. This would bring performance and security improvements, and simplify operational management and maintenance.
    • Introduced peer code review for my team, using ReviewBoard. This was later adopted by the whole of Engineering and is now standard practice.
    • Introduced automated functional testing of our web UI using Selenium Remote Control driven by Python unit tests.
    • Prototyped a Continuous Integration system using BuildBot. This formed the basis of the system still in use today.
    • Proposed, designed and implemented a major restructuring of the mainline in our version control system (Perforce) to simplify branching. Communicated the impact to all Engineers in Cambridge, Chennai and Madrid. Successfully executed the move of approximately 15,000 files in hundreds of directories with minimal disruption.
July 2005 - December 2007
Infomatrix Ltd, Fen Drayton, Cambridge
Software Engineer

Mainly worked on the SqZ product - a HTTP accelerator for wireless networks. Implemented a new algorithm to improve the efficiency of the transport protocol in the Linux based server and the cross platform client, using C++ and the STL. Designed and wrote the web based administration package for the server, using PHP for the statistics pages including graphs of data usage. Also prototyped a personal firewall for Windows, implemented as an NDIS intermediate mode driver.

Customer projects included:

  • a virtual keyboard for Windows, for use with a touch-screen or mouse. C++, MFC, Win32 input APIs
  • a web based system for analysis of test logs. Included Ajax features to make the application appear more responsive. PHP, JavaScript, MySQL, Apache, C++
  • writing a system of makefiles to build some software components, breaking dependencies on the complicated internal build system so that development of the components could be outsourced more easily. Once completed, the software could be built using GNU make on many platforms including Solaris, AIX, HP-UX, Linux and Windows
July 2002 - June 2005

Still employed by Infomatrix, but worked on site at Symbian for three years.

Initially contracted for three months to provide Win32 and COM expertise. I provided technical advice during the acquisition of a replacement for the legacy PC Connectivity software. I worked with the supplier to ensure Symbian's requirements were met, reviewed documents and the proposed new Object Model. I wrote example clients that could be used to demonstrate the simplicity of the new API to Symbian and its customers.

Following the delivery of the new system, Symbian took on the maintenance of the new PC Connectivity solution, which they called Connect QI. My contract with Symbian was extended and I was given the job of maintaining and enhancing QI.

Primarily I worked in C++, using STL and the ATL and MFC frameworks for the COM Servers and GUIs. I wrote Perl and VBScript for the build and test systems. I also:

  • created an SDK to accompany the core system. This came in three versions: two for different types of customer and one version for the general public which was available to download from
  • designed and implemented the SDK documentation system using XSLT stylesheets for translating the original XML into HTML for distribution
  • created a suite of installers for the various components and SDKs using NSIS
  • was involved in the interviewing process when an additional contractor was required so I could concentrate on adding new features
  • performed a technical review of several chapters from a colleague's book on Symbian PC Connectivity

When providing technical support on Connect QI, I developed an excellent working relationship with several customers. Several times when answering a customer's technical questions I took the opportunity of producing a new sample application for the SDK to illustrate a particular feature.

July 2000 - June 2002
Infomatrix Ltd, Fen Drayton, Cambridge
Software Engineer

Worked on the full development cycle of numerous projects. This included customer funded projects that they had outsourced to us and internal product developments. I quickly became recognised within the company as the resident expert on MFC GUIs and the Win32 APIs.

I worked as part of a team, from requirements gathering through to customer acceptance testing, on the following projects:

  • a cut-down implementation of the NAS layer of a UMTS protocol stack for 3G test equipment. Required intimate knowledge of the relevant ETSI specifications. Cross-platform (Linux, Cygwin, native Win32) C++, TCP/IP sockets
  • a complex Multi-Document, Multi-View GUI for the configuration of 3G test equipment, control of test runs, collation and analysis of the very large logs produced. I was responsible for the majority of the UI, including a custom view that drew expandable message sequence charts from the raw log data collected. I also implemented printing functionality, with WYSIWYG print preview. Win32, C++, MFC
  • plugins for the graphics subsystem of a mobile phone operating system to enable rendering of PNG, GIF and JPEG encoded images. Embedded C

I was solely responsible for the development of:

  • an extensible communications library for controlling TETRa radios. Written in ANSI C for portability and successfully ported to Win32, WinCE and Linux
  • a Windows GUI to simulate a 3G mobile phone handset and interface with the NAS layer of a UMTS protocol tester. C++ with MFC, TCP/IP sockets
  • a dispatcher application, for messaging and real-time positional tracking of a fleet of mobile radio users with GPS devices. Required interfacing with several different models of TETRa handset and an ODBC compliant DBMS. Included an integrated map for the display of the fleet's positions. Win32, C++, MFC, COM/ActiveX, TCP/IP sockets
July 1997 - September 1999
Sponsored Student

I was sponsored through university by Marconi Communications Ltd. This involved working for them over the summer holidays and for my entire intercalated year (a “sandwich” year between the second and third years of my degree course). This was valuable experience as a student, giving me a hands on understanding of commercial software development. During my time with them I was given full responsibility for specification, design, implementation and acceptance testing.

July 1997 - September 1997

I was given 8 weeks to specify, design and implement a Base Station Configuration Tool for the Private Mobile Radio system. This was to replace an older tool that had become unmaintainable. I taught myself how to use Borland Turbo Pascal to create a new modular implementation, complete with MS DOS GUI, by the end of the summer.

July 1998 - September 1999

For my intercalated year I was assigned to a small team of software developers working on the KV90 HF radio. The team were near completion of the STANAG 5066 protocol and were starting work on numerous applications to be deployed over it. I was responsible for:

  • implementing a re-usable VCL component to allow Borland C++ Builder and Delphi developers to rapidly add the ability to route data via the STANAG 5066 stack
  • the design and implementation of a protocol for a simple messaging system. I wrote the application in C++ Builder, using the VCL component I had developed and ADO for storage of messages in a database
  • designing and running acceptance testing for an SMTP email gateway that had been outsourced to an external supplier. Over several months, I reported many obscure bugs that I discovered due to my in depth understanding of the relevant RFCs and specifications. I also verified the fixes by writing test harnesses that were then used in the regular regression tests

On an unrelated project, I reverse engineered a legacy DOS application with no source code or documentation to produce a functionally equivalent Windows GUI for configuring the encryption keys used by an external radio. This was written in Borland C++ Builder using the Windows APIs for RS232 serial communications.

Other Experience

I run my own website at My website first started with static HTML pages at university in 1996, then progressed onto a custom PHP templating framework combined with a Wordpress blog before I switched to a customised Drupal installation that handled everything. For the most recent incarnation, I rewrote the website in Python in order to get some practical experience of using the Django web framework. My website also hosts some old projects from my university days, such as games (written in QuickBasic) and Screen Savers (written using Borland C++ Builder). Before children consumed my free time, I would occasionally update my blog with technical articles or tutorials, such as this tutorial for Yahoo! Pipes.

Some of the web projects that I have written over the years include:

I spotted a mistake in the 5th printing of Scott Meyers' essential book on the Standard Template Library (Effective STL) and have achieved instant fame by being credited in the Acknowledgments of the 6th printing and the online errata.


1996 - 2000
BSc (Hons) Mathematics with Computing with Intercalated Year
1989 - 1996
Denbigh High School, Denbighshire
Special Paper
Mathematics(1), Physics(1)
Mathematics(A), Physics(A), Electronics(A), General Studies(A)
4 Grade A*, 6 Grade A

This is a printout of the online version of my CV; the most recent version can be found at