Personal Information

Name: Ian Spray
Email: available here
Location: Cambridge, UK.
I also hold a full clean driving licence, and have my own transport.


I am a software architect, manager and ex-low-level programmer who enjoys working on problems which span comprehension boundaries: be it hardware/software, functional/engineering or developers/management.  I can read and debug circuit diagrams, explain software to hardware designers, translate between HR & developers and summarise detailed developer solutions to a range of senior management. I have 11+ years of commercial experience in first spin bringup (programming primarily in Forth, C and assembler), 8+ years experience of team leading, hiring and line management and 2+ years of software architecture and data centre hardware/software solution design.

Full-time work

April 2008 – Present

Arm Ltd., Fulbourn Road, Cambridge — Principal Software Engineer

I have worked in multiple internal areas within Arm from debug trace analysis tooling, database design in Java and Eclipse, CI/CD deployment and customisation, API architecture (design & implementation), data centre software/hardware architecture and implementation, OpenSource coding/legal review, low level code for system interfacing, as well as hiring, line management and team leadership.

My programming has been heavily involved with the software aspect of ARM’s CoreSight Debug & Trace IP, utilising low-level hardware interfaces, custom encoding schemes and specially designed data storage and retrieval systems exploiting RDMS features to enable off-line data mining of large result sets.

I have led and created many teams for targeted project work with multiple key cross-divisional stakeholders, and worked closely with departmental managers and project managers to specify, task, resource and deliver results on time. I have current experience of handling multiple direct reports, as well as recruiting, interviewing and coaching placement students, graduates and experienced staff in a variety of roles, have been an accredited internal ISO9001 auditor, dealt with designing and deploying a multi-data centre software development platform with components form multiple external vendors, developed REST API solutions in Swagger and RAML, and implemented them in Go.

August 2007 – March 2008

MIPS Technologies, Cambridge Research Park, Waterbeach — Systems Software Engineer

My role was to maintain and develop new software support for their existing prototype test board (YAMON on the Malta system) as well as develop and test new CPU designs in conjunction with hardware developers, and provide sample code fragments for the development kit.

This entailed debugging an unproven CPU design on potentially unproven test hardware, as well as ensuring that new CPU features have an appropriate software interface and can be exploited by third party developers. Knowledge of development system internals was also essential for both pre- and post-sales support, taking a specific customer problem and either developing a fix or proposing an alternative approach in order to achieve the desired result.

I have also been involved in code profiling (lmbench, oprofile) normal and customised soft core CPU designs with various benchmarking software in order to identify potential performance bottlenecks, as well as the use of EJTAG probes in order to gather information on a live system with zero impact on the running code.

Unfortunately, due to financial concerns, MIPS Inc. closed the UK office at the end of March 2008.

September 1996 – August 2007

Tadpole Computer / General Dynamics, Vision Park, Histon — Senior Software Engineer (Low-level)

I started at Tadpole Technology writing OpenBoot (in Forth and SPARC assembler) for their line of Sun compatible SPARC laptops and servers. This entailed involvement in the early stages of system design and providing early system diagnostics, as well as first run debugging with unproven hardware. I have over 10 years of realworld experience communicating with hardware designers and carrying out initial board tests, reading circuit diagrams and device datasheets as required to come up with test cases and discover potential problem areas, usually in a time-critical manner.

At the end of 2002 Tadpole Technology underwent a management buyout for the hardware division, which became Tadpole Computer Ltd. and my role was widened to include responsibility for IT, Communications and Facilities Management. I was responsible for securing public facing servers, implementing anti-virus and anti-spam measures, maintaining redundant Internet connectivity, liaising with network engineers and installers, programming the PABX, backing up core systems and providing software solutions to enable co-operative working with zero budget.

Later work gave me the opportunity to explore the NetBSD kernel and install system in detail on many architectures (macppc, mips, cobalt, sparc64, i386 and amd64) as well as being involved in procedural specification drafting to attain quality accreditation

I also set up and modified a Wiki system, linking it into our Bugzilla system (to which I also added custom extensions) and NFS file storage as well as ensuring it was available via the VPN to remote offices. I also ensured that the internal protocol formats used in our hardware have been detailed and shown clearly online (in open formats), which resulted in bugs being found via peer-review, well before testing uncovered them.

Towards the end of my time at Tadpole I created a custom Linux load for a thin-client laptop which was build O/S and toolchain agnostic and had binary reproducibility. This entailed building all packages from approved source, release management (GPL and Company IP), startup behaviour control, update methodology including a robust fail-safe mechanism for field updates and sanitised event handling. It also required customisation of the Linux kernel and boot time environment to suit the specific hardware options, including reducing initial startup time and ensuring appliance-like behaviour.

I also had practical experience in: Forth, Sparc Assembler, Solaris, CDE, NetBSD, Linux, C, Perl, bash/sh, sed, awk, CGI, KDE, HTML, JavaScript, OpenWindows, exim, Apache, IMAP, BIND, ClamAV, SpamAssassin, PHP, MySQL, NetBSD, sendmail, FVWM2, HTTP, Java, TCP/IP, International Framemaker, ISO9000, Email performance tuning, Spam and A/V scanning, designing and implementing a bespoke engineering-wide timesheet (MySQL, PHP and SteelBlue), Asterisk PSTN replacement, CVS, Bugzilla, SCCS.

September 1994 – September 1996

Image Technologies Developments plc, Hounslow West, Middlesex — Software Engineer

My main function was that of printer driver writer to ITD’s custom PostScript RIP, which moved from Windows 3.11 to NT, and later to both ’95 and NT v4.0. Towards the end of my time with ITD, I programmed both the Macintosh and PC on a project that allowed transparent data and file transfer between Mac and PC, including a custom GUI. In order to interface to some of the more obscure printers, it was necessary to write NT and Win3.11 device drivers in C and assembler to take full advantage of specialised add-on cards and core kernel functionality.

Amongst others, I gained experience in the following areas: Windows NT/’95/3.11 SDK & DDK, C/C++, Visual C++, 80×86 assembler, Optimisation, Multi-platform RPC, Win 3.11 & NT Device Drivers, PCI card drivers, Microsoft Macintosh SDK, Macintosh Sockets, Network programming using AppleTalk and 68000 patches, LPR, DLC and NetBIOS, NT Sockets, Multi-threaded NT applications, Source Safe version control, colour print and imaging issues.

July 1992 – September 1993

British Rail Research, London Road, Derby — Technical Officer (Degree Work Placement)

I developed and maintained all software involved with Radio Surveys, including the core real-time custom assembly suite, with my knowledge of Amateur Radio proving very useful. My tenure was extended by 1½ months to allow me to finish the project I had conceived and implemented, which replaced a five year old pen-plotting system. I also had first hand experience of BS5750 from first inception to a fully working system.

Practical skills learnt were: 80×86 assembler, Visual Basic for DOS, Windows 3.10, real time data capture for GPIB, serial and A/D inputs, practical radio propagation understanding, WordPerfect 5.1, BS5750, how to present technological ideas to a reluctant audience, team work with non-computer literate members.

Contract work

The Chequers

August 2013 – November 2018

Customised till/ePos programming, location photography and website design for a local pub/restaurant.

Deborah Jayne School of Dance

January 2013 – March 2019

Custom web design for Deborah Jayne School of Dance, a dance, and theatre school in South West London, with web hosting and post-publishing admin work.


April 2012 – April 2019

Custom web and print advert design for Feetbeats, a dance, musical theatre and Street Dance school in Surrey, with web hosting and post-publishing admin work.


September 2010 – February 2019

Custom web design for Dansicality, a West London based team of dance tutors.

Arthur Frederick Photography

June 2011 – Present

Partner in a photographic company shooting products, events and weddings in and around Cambridge.

Monk Cycles

June 2010 – August 2010

Product photography for online store.

Connected Comms

March 2009 – June 2011

Web design, bespoke photography, online image search (including rights clearance) and business card design for a consulting business.

Funky Moose Ltd.

September 2008 – June 2009

Web shop backend module customisation, VoIP setup advice and configuration.

Marble Hill Dance Studio

August 2008 – April 2019

A custom web design for a London dance school, with PDF form design, SEO, image gallery, web hosting advice and post-publishing admin work.

British Antarctic Survey, Cambridge

August 2006

A short fixed-term contract undertaken whilst at Tadpole to translate Forth code into flowcharts to aid the replacement of an a 11 year old winch control system.

Legba Studios Ltd.

2002 – 2006

A long term role starting as an off-site sysadmin for a small startup who have been developing computer games, performing nightly source repository archiving (and instant retrieval), off-line media backup storage, and moving on to DNS, web-hosting and name resolution services using robust Open Source methods, as well as providing IT buying advice, configuration assistance and creating promotional DVD’s.

Academic qualifications

September 1989 – June 1994

De Montfort University Leicester — B.Sc. (Hons.) Software Engineering IIi

During my degree, I covered the following areas: OOD, OOA, Systems Analysis & Design, Networks, Functional Programming, Project Planning, Time Management, Group work, Microcomputer System Design, Human Computer Interaction and Systems Programming.

I also gained practical experience in the following: C, C++, Gofer, Smalltalk, Modula-2, Pascal, Demo II, Yourdon Methodology (using Teamwork), Z, ML, TeleUSE, Domain Dialog, Ingres/Windows 4GL, SQL, SCCS, Prolog, Lisp, UNIX, DOS and HP-VUE. My final year project consisted of writing a Smalltalk interpreter in Gofer, combining the two disparate paradigms of Object Orientation and Functional Programming. I also have 2 ‘A’ levels, 1 ‘AS’ level, and 6 ‘O’ levels.

Other experience

I also have experience in the following computer related topics: NetBSD, Linux, C, Golang, BASIC, MQTT, Assembly language (ARM, MIPS, SPARC, 6502 and Z80), RISCOS, Kubernetes, Event & Interrupt driven programming, Data interfacing techniques, Pascal, Forth, TCP/IP, AX.25, Prolog, CSS, XML, PHP, HTML, JavaScript, MySQL, RAID, ZFS, SIP, IAX, ZenCart.

Interests and activities

At university I competed in white water canoeing as well as photographing the event for the club, often developing and printing the results myself. During my placement year I was introduced to climbing and scuba diving, and have continued climbing since then when the opportunity is available. I hold a current Amateur radio licence and have also had a keen interest in DTP since the late 1980’s, which has carried over into HTML/CSS design and coding, as well as digital photography, where I now apply software skills and methods to image capture and manipulation as well as paralleling analogue photographic skills to improve the final result. Last year I started shooting weddings and parties, and for one event I provided a website with video and stills on the same day as the event for family members who were unable to attend.

I maintain my own servers at home which currently provide web, email (spam and virus scanning) and shell services for over a dozen remote users as well as providing a RAID mirror backup for internal machines and a modified shopping system for a startup internet business. Most of the techniques I have trialled at home have ended up being implemented at work as they were effectively ‘zero cost’ as the configurations had already been proven. The actual hardware has changed every few years, but with the same ultimate aim: keeping the power consumption as low as possible.

Experimentation with more feature-rich servers have led me away from an absolute lowest power figure and have concentrated on maximum performance and features (ZFS, iSCSI, VM, etc.) for ‘no more power’ than the current more organic setup. This has included CPU and motherboard chip design research, as well as underclocking, but has resulted in a wall power reading of 70W for a server with 1.2TB of storage capable of a sustained 55MB/s write data rate over Gigabit Ethernet. Storage capacity, noise and power supply efficiency are the next targets.

Recent advances in ARM CPU’s have led to an abundance of truly low-power, high quality low cost systems, and so the primary system (for 2012) is a Freescale iMX.53 1GHz Cortex-A8 with a Pogoplug E02 as NFS backup and failover. Moving away from the ease of ZFS snapshots was slightly painful, but the satisfaction of having the noise of the UPS inverter (when it kicks in) be the loudest device in my server room can’t be underestimated.

My wife and I also designed, built and ran an MP3 hosting service for independent artists for nine months from which I learnt at lot about the security of ftp servers, how to explain UK copyright law succinctly, and the ability for even the most simple technical instructions to cause confusion 🙂

I’ve also written my own PHP/XML based blogging software, BIND configuration parser, CSS based web gallery (utilising PHP as an offline HTML generator and JavaScript triggers to alter CSS behaviour dynamically), extended the Apache mod_include module and implemented a custom shell based intrusion black-list system, and have started to teach myself the bass guitar.

My non-computing tinkering has included the conversion of a Charge Tap hybrid cycle to a 250W front motor assisted cycle, ESP8266 stand-alone systems, MQTT enabled IoT orchestration, Zigbee home automation integration and an RFID garage door retrofit.


Referees will be provided upon request.