As the primary DevOps engineer in a small software tools team I designed and built the continuous integration (CI) infrastructure and co-developed its automated test farm.
Over eight years I extended, adapted, and evolved this system in response to business needs and new opportunities. In 2020 I handed over a system that (at the touch of a button or on a clock-tick) would build complex multi-platform, multi-branch software products from source, delivering signed installers into a binary repository, and launch a vast matrix of tests on all supported host platforms, power cycling more than 100 connected target hardware boards automatically so as to test on each independently, and presenting tabulated, easily understood results.
The system worked, and I’m proud of it: it was maintainable, flexible, and fit for purpose. It routinely caught bugs early so that the team could fix them before they had the chance to become major problems, and it created reliable, reproducible builds.
I learned a lot from this experience; it’s time to apply it in a new context. Are you looking for someone who understands DevOps? Contact me!
Skills and technologies
- DevOps, product engineering
- Jenkins, continuous integration, test automation
- Version control admin: Git, Subversion, CVS
- Python, Groovy, Bash, C, Perl
- Packaging and installer creation for Windows, Linux, Mac
- Build tools: Maven, Tycho, Ant, Make, Eclipse, Visual Studio
- Binary repositories: Nexus
- Open-source license compliance
- Good team worker, able to persuade and to cooperate as needed
- Effective coach and mentor
- Good communicator
- Attentive to details
- Flexible and always keen to learn
2012 to 31 July 2020: NXP
Principal Software Engineer
I joined a software tools startup, Code Red Technologies, which was acquired in 2013 by NXP Semiconductors. The Cambridge and San Jose Code Red team, which expanded to include members in Bucharest and Brno, evolved our Red Suite toolchain to create MCUXpresso IDE.
- Created a CI system where none had existed before. Built a Jenkins installation to integrate a multi-platform, multi-component software product. (Before I started, most build steps were manual, with the final stage automated on Windows only.)
- Made the entire CI system maintainable, flexible, and safe, by coding all the jobs in Groovy and using the Jenkins JobDSL plugin. Documented it fully in internal wiki pages.
- Migrated the Jenkins master from Windows to Mac, and later to an Ubuntu VM in a corporate datacenter, keeping everything working on the way, and extended it to manage a heterogeneous collection of build and test nodes.
- Imported a complex legacy source tree with years of history from Subversion to Git, and introduced modern working practices (Git, JIRA, Nexus) to an established team.
- Wrote (in Python) a suite of scripts to automate the testing of multi-platform software driving custom hardware, all controlled from Jenkins (see video for details), and to display results and alert developers to failures.
- Maintained installers/packaging scripts for all the supported platforms: Windows, Linux (deb and rpm), Mac OS X.
- Developed a happy working relationship with colleagues in Bucharest, coaching them and transferring technology and understanding, so that they could carry the system forward.
2000 to 2012: a deliberate swerve
There were other things I wanted to do, and I was lucky enough to have the opportunity, so I did them. I edited and typeset a lot of books, and I did some professional political organizing. I also bought a narrowboat and ran it as a holiday hire business.
1996 to 2000: ARM
Principal Software Engineer
I designed and implemented a configurable automated build system for software tools products within ARM Development Systems. Jenkins didn’t exist then, so I wrote the code myself in Perl, creating a multi-platform system to check out sources and deliver tagged, labelled product builds as installable CD images. I recruited and trained junior staff to manage the build system.
I administered a complex version control system using CVS (state of the art at the time), handling branching, merging, and policy decisions on working practices, and supporting about 50 users. I also wrote the Windows installer for the tools product.
1989 to 1996: Harlequin
Three years developing and maintaining electronic publishing software (writing code in C and PostScript), two years managing customer support for it (one of these in the USA, while helping to establish a new office), and then two years specializing in software build and release management.
Achievements range from the purely technical (fixing difficult parallelism-related bugs; implementing major improvements in memory management; making code portable across platforms) through process improvements (introducing a customer support database; setting up a code review system and getting everyone to use it; coaching developers to work with the version control system rather than fighting it) to customer relations (being the long-term contact point with important customers, and spending hours on the phone helping them find bugs in their code that they thought were in ours).
Harlequin is now part of Global Graphics Software.
1984 to 1988: Topexpress
I worked on a variety of software tools projects, including writing a code generator for C on x86 PCs, porting a C compiler and adding a runtime library and symbolic debugger, and designing and implementing ASD, a very early symbolic debugger for the first ARM processor.
Topexpress was acquired by VSEL, which no longer exists.
1981 to 1984: Various Cambridge startups
I worked with friends for small companies that no longer exist, including Aries Computers (purveyors of a BBC Micro expansion board), and a small software applications offshoot of Torch Computers. I learned a huge amount about how to write software.