Experience

Director of Engineering

This role built upon my existing responsibilities as a Member of Technical Staff at Bromium (see below). The role added an increased responsibility for working directly with the business and leaders of other engineering teams to set overall product and development direction.

Supported the professional development of members of my team, with regular feedback and 1-on-1s.

Implemented a light-weight agile process (daily stand-ups, regular issue triage and two weekly sprints) to give us predictability in releasing new features.

Grew the team from 2 to 9 engineers, mostly local with some remote.

Performed initial triage and prioritization of incoming bug and feature requests, producing a roadmap that could be communicated with the rest of the organization.

Worked closely with the VP of Engineering and the rest of the engineering leadership to promote development and process best-practices across teams.

Evangelised the benefits of reliable automated testing for product quality among other engineering groups.

Member of Technical Staff

I was originally part of a two person team, responsible for quickly designing and delivering a centralized web console for managing devices running Bromium's endpoint security product. We successfully delivered the project on time (with tests!). Over the next 4 years it grew into a highly-available, on-premise web-service which was capable of handling rich streams of forensic data from hundreds of thousands of clients.

Bromium's security product uses micro-virtualization to seamlessly isolate each browser tab and document in its own virtual machine, preventing any malicious software from infecting the host operating system. My team were responsible for a web-service (Python/Django) which helps manage the deployment of this security product within large enterprise environments, in addition to providing the ability to analyze and visualize the stream of forensic data captured from malware caught running within the virtual machines.

As the team grew, I transitioned from being an individual contributor to being the project manager and eventually the engineering director. I remained technical throughout this transition and as the development manager my time was split 60/40 between managerial and technical work.

Tools for analysis and visualisation (D3.js) of rich timelines of malware activity.

Software Engineer — Intern

RealVNC

Jul 2011 → Sep 2011(3 months)

cc++androidqnxusb

Summer internship in automotive team, working on a product that allows mirroring a phone's screen to a car's built-in display.

Benchmarked their existing methods of communicating VNC/RFB protocol with Android over USB. Developed a new method using the (then new) Android Open Accessory Protocol, which dramatically decreased latency. This involved debugging and working around various bugs in AOSP's kernel and Java runtime.

Updated existing products to work with a newer version of the QNX platform. Developed a port of libusb to the QNX platform (which was later upstreamed), so that product's existing cross-platform USB code could be used. Prototyped a consumer VNC viewer for the BlackBerry PlayBook using an early-access version of Blackberry's development SDK.

Education

Computer Science

University of Cambridge

2009 → 2012

pythonc++system-verilogbluespec

Final Year Project: Using Bluespec SystemVerilog to create a touch-screen 6502/NES emulator running on an FPGA. Test harness written in C++/Python to compare implementation against pre-existing reference implementations.

Philip Haswell Scholarship for Computer Science, 2011-2012

Open Source (6)

An X11 status bar which aims to be customisable, simple and lightweight. This was developed for use with my window manager, Lanta, but it should work with any X11 window manager that implements enough of EWMH / ICCCM.

Cnx is written in Rust. Where possible, it prefers to asynchronously wait for changes in the underlying data sources (and uses mio/tokio to achieve this), rather than periodically calling out to external programs.

It includes a number of widgets: currently active window title, a work-space pager, CPU temperature sensors, volume control and a clock.

Experience

This role built upon my existing responsibilities as a Member of Technical Staff at Bromium (see below). The role added an increased responsibility for working directly with the business and leaders of other engineering teams to set overall product and development direction.

Supported the professional development of members of my team, with regular feedback and 1-on-1s.

Implemented a light-weight agile process (daily stand-ups, regular issue triage and two weekly sprints) to give us predictability in releasing new features.

Grew the team from 2 to 9 engineers, mostly local with some remote.

Performed initial triage and prioritization of incoming bug and feature requests, producing a roadmap that could be communicated with the rest of the organization.

Worked closely with the VP of Engineering and the rest of the engineering leadership to promote development and process best-practices across teams.

Evangelised the benefits of reliable automated testing for product quality among other engineering groups.

I was originally part of a two person team, responsible for quickly designing and delivering a centralized web console for managing devices running Bromium's endpoint security product. We successfully delivered the project on time (with tests!). Over the next 4 years it grew into a highly-available, on-premise web-service which was capable of handling rich streams of forensic data from hundreds of thousands of clients.

Bromium's security product uses micro-virtualization to seamlessly isolate each browser tab and document in its own virtual machine, preventing any malicious software from infecting the host operating system. My team were responsible for a web-service (Python/Django) which helps manage the deployment of this security product within large enterprise environments, in addition to providing the ability to analyze and visualize the stream of forensic data captured from malware caught running within the virtual machines.

As the team grew, I transitioned from being an individual contributor to being the project manager and eventually the engineering director. I remained technical throughout this transition and as the development manager my time was split 60/40 between managerial and technical work.

Tools for analysis and visualisation (D3.js) of rich timelines of malware activity.

Jul 2011 → Sep 2011
Software Engineer — Intern
–
RealVNC

c, c++, android, qnx, usb

Summer internship in automotive team, working on a product that allows mirroring a phone's screen to a car's built-in display.

Benchmarked their existing methods of communicating VNC/RFB protocol with Android over USB. Developed a new method using the (then new) Android Open Accessory Protocol, which dramatically decreased latency. This involved debugging and working around various bugs in AOSP's kernel and Java runtime.

Updated existing products to work with a newer version of the QNX platform. Developed a port of libusb to the QNX platform (which was later upstreamed), so that product's existing cross-platform USB code could be used. Prototyped a consumer VNC viewer for the BlackBerry PlayBook using an early-access version of Blackberry's development SDK.

Education

2009 → 2012
Computer Science
–
University of Cambridge

python, c++, system-verilog, bluespec

Final Year Project: Using Bluespec SystemVerilog to create a touch-screen 6502/NES emulator running on an FPGA. Test harness written in C++/Python to compare implementation against pre-existing reference implementations.

Philip Haswell Scholarship for Computer Science, 2011-2012

Projects & Interests

Jun 2017 → Current
cnx
–
https://github.com/mjkillough/cnx

rust, rust-tokio, pango, cairo, x11, xcb, linux

An X11 status bar which aims to be customisable, simple and lightweight. This was developed for use with my window manager, Lanta, but it should work with any X11 window manager that implements enough of EWMH / ICCCM.

Cnx is written in Rust. Where possible, it prefers to asynchronously wait for changes in the underlying data sources (and uses mio/tokio to achieve this), rather than periodically calling out to external programs.

It includes a number of widgets: currently active window title, a work-space pager, CPU temperature sensors, volume control and a clock.

Apr 2017 → Current
lanta
–
https://github.com/mjkillough/lanta

rust, x11, xcb, linux, window-managers

A simple, tiling X11 window manager.

This began as a way to improve my Rust knowledge, but I have since begun using it as my primary window manager. Lanta aims to be simple and easy to maintain.