I am a software engineer working in the embedded systems industry, developing applications in C and C++ for proprietary systems. I have experience working with legacy codebases and the constraints of low-powered systems. My emphasis at work is on using robust design and automated testing to minimise opportunity for mistakes.
- C and C++ professionally, with hobby experience in Haskell.
- Eclipse, Vim and GDB development tools.
- Subversion, Git (including Git-SVN), ClearCase source control.
- Windows, Linux and Solaris.
Software Engineer, Honeywell Security, March 2011 – November 2013
- Development of features for real-time control systems and communication hardware transmitting over PSTN, USB, GSM/GPRS and Ethernet to remote sites using proprietary and industry standard protocols.
- Maintaining compliance with international standards for security products.
- Triage and correction of issues identified by Product Quality Department and customer use.
- Integration testing and documentation.
- Installation of a continuous integration server to automate building and static analysis. During phases of intense development these tests caught a number of failures. This venture became an officially supported project due to its success.
- Development of a static analysis tool to validate some important data stored in a custom format. This tool identified flaws which would have been hidden for months, and continues to guard against further problems as part of static testing.
- Development of an integrated test framework to automate integration tests on the target systems. Addition of these tests also helped identify flaws in existing sytems and guard against regressions.
- Co-authoring a patent which was filed in 2012.
Development Engineer, Cisco System (via AAP3 Ltd), 2007–2010
- Embedded software development in C, to software engineering standards defined by ISO 9000 and TL 9000. Worked on four different code bases doing feature development, porting and maintenance. All changes required code review, unit test and system test before commit.
- Diagnosing failures from interactive debugging or log output, to identify system regressions and diagnose customer problems.
- Dealing with customer representatives to identify field problems, providing detailed explanations, quick workarounds and long term fixes.
- Reviewing code changes and software specification documents at various stages in the engineering lifecycle. Providing feedback on functional specification and customer requirements.
- White box testing using a model-based test framework. Set up an automated test system to run and report all tests on a daily basis. Increased coverage on one component from one fifth to four-fifths of features.
- Work with technical writer to update published documentation, including reviewing changes. Kept the internal wiki up to date with diagnosis techniques, common questions and links to external information.
System installation, Seebyte Ltd, 2006–2007
Moving the company to larger premises and improving facilities while assuring minimal disruption to business.
- Liaising with building management, utilities providers and deliveries.
- Installing and configuring network and VoIP hardware.
- Moving infrastructure over to Asterisk-based telephony system with fax/email gateway.
- Setting up local SMTP and DNS services.
- Using Python to process data during software/DB upgrade process.
- Documentation of all design decisions and future support requirements.
- YMCA Scotland, volunteer IT support, 2006
- Edinburgh Copyshop, 2005
Qualifications and Patents
- Six Sigma DFSS Green Belt, Honeywell Security Group (Dec 2012)
- BSc (Hons) (2ii) Computer Science, The University of Edinburgh (2005)
- 6 Highers (AAAABB) and 3 CSYS (ABB), Dunbar Grammar School (2000–1)
- British Sign Language level 2, Deaf Action (2007–8)
- Offsite Persistent Storage and Configuration Synchronisation for Control Systems
- Filed 2012. United States 4874-117762. Europe 13150435.9-1810.
I train and play Capoeira Angola as often as I can as well as maintaining my group’s website. I have a regular appointment with friends at the local pub quiz, where we consistently don’t come last. I enjoy coding in Haskell and learning advanced functional programming techniques.