Richard Dawe's Curriculum Vitae

Age:

40

Nationality:

British

Locality:

Bristol, United Kingdom

E-mail:

cv@phekda.org

LinkedIn profile:

http://www.linkedin.com/in/richdawe

Github:

richdawe and rdawemsys

Telephone:

0777-6141675


Software engineer and systems programmer with 19 years' commercial experience of developing C and C++ software on Linux, in small- to medium-sized companies.

Self-starter, with a desire to understand the big picture down to the details. I love digging into issues, starting at the high level, diving down into the code of individual components and gathering data, to build up a mental model of the system.

History of delivering solid, reliable code in on-premise and cloud environments. Customer-focussed, results-driven; I'm always looking for ways to help my colleagues succeed. I'm always looking for ways to improve the quality of the systems that we're building.

Skills

Development languages

C (proficient) (19 years); C++ (C++03, STL, boost) (proficient) (5 years); Lua (proficient) (7 years)

Scripting / glue languages

Perl (intermediate); bash shell scripting (intermediate); Python (beginner)

Development environments

Linux (mostly) and Solaris; multi-threaded software; client and server software; event loop with threadpools

Databases

Cassandra (intermediate); Postgres (intermediate)

Development practices

Version control (Mercurial, git, subversion); debugging (gdb, valgrind, strace, lsof, small amount of DTrace / perf); packaging for install/upgrades/uninstalls (rpm); design and code reviews; Continuous Integration, Continuous Deployment (Bamboo, Ansible)

Development processes

Kanban, Scrum, waterfall

Networking protocols

HTTP 1.1, SMTP, ESMTP, SMPP, SNMP; SSL and TLS (including X509 certificates and Public Key Infrastructure (PKI)); TCP/IP (IPv4, IPv6, UDP, TCP)

Data formats

MIME, RFC 2822 and related standards for e-mail; JSON; XML (DOM, SAX, schemas); YAML; CSV

Employment

September 2007 - present

SparkPost, and Message Systems, Inc. (remote working, from home), UK

SparkPost is built by Message Systems, the world's #1 email infrastructure provider. Customers including LinkedIn, Twitter, Groupon, Salesforce, Marketo, Pinterest and Comcast send over 3 trillion messages a year, over 25% of the world's legitimate email. These companies choose SparkPost to provide the deliverability, speed and insight they need to drive customer engagement for their business.

SparkPost provides email delivery services for apps and websites, hosted in the Amazon Web Services cloud, and accessible via REST APIs and SMTP (Simple Mail Transfer Protocol). Reporting and metrics are provided via webhooks, APIs and the administrative UI.

Message Systems's Momentum software is a high-performance messaging server supporting SMTP for mail reception/delivery, supporting extensions in C or Lua, e.g.: for integrating anti-spam technologies.

SparkPost is a trading name of Message Systems Inc. I've broken my time at SparkPost / Message Systems down into several "eras" below.

March 2015 - present

The Cloud era at SparkPost: Principal Engineer

As part of the Platform Engineering team, I designed and implemented new features in our SparkPost and Momentum products. I provided architectural oversight for the messaging platform and integration with other systems and with internal teams. I provided technical leadership and encouragement to the rest of the team. Some highlights:

  • Vision and design for taking our single-tenant mail platform and making it support multiple tenants concurrently. This was part of a larger project to reduce costs and allow more rapid delivery of new features. I led the development team; did a good chunk of the development work (mostly in Lua). Migrations to the new architecture were done by a separate team.
  • Investigated and greatly reduced the latency of REST APIs. Documented the behaviour of the garbage collector (GC) in our internal fork of the Lua 5.1 virtual machine. Implemented data gathering to help understand slowest steps. Changed the GC behaviour to remove a major bottleneck, reducing latency by 50%. (All C code)
  • Designed and prototyped the Relay Webhooks feature, for converting inbound SMTP traffic into HTTP POST calls (mostly in Lua, with C as necessary). This feature enables customers to support e-mail using purely HTTP/REST protocols.
  • Added support to Momentum for delivering SMS messages over encrypted connections (SMPP over TLS) (in C).
  • Triaging and resolving escalations from our support team; tracking down production issues; supporting colleagues working on escalations / production issues; proposing fixes in C or Lua.
  • Provided the vision and technical guidance for delivering a feature for managing e-mail domains. This imposed new restrictions on customers, and required discovery and much communication with customers. Migrations for the new feature were done by others.
  • Part of the API Governance team, which was responsible for designing the initial APIs for SparkPost, setting the internal REST API standards, and providing on-going assistance for new APIs, and breaking API changes.
  • Provided training sessions including: multiple event loop architecture in C; extending Momentum in C and Lua; Lua best practices; TLS encryption.
  • Kept people focussed on delivering the minimum functionality required. This was partly to ensure we could iterate rapidly, but also to ensure that we did not over-build software before we understood what our customers wanted or needed. We used Kanban, and earlier Scrum.
  • Secondary on-call for production issues for the Platform Engineering team.

June 2013 - March 2015

The on-premise product development era at Message Systems:

Lead Engineer (June 2014 - March 2015),
Senior Software Engineer (July 2013 - June 2014)

I joined the Engineering team part-way through the development of Momentum 3.6, a major update to take full advantage of multi-core systems; and at the beginning of Momentum 4.0, a major update to the Momentum product line, adding scalable, fault-tolerant message generation APIs, and new UI, metrics APIs and webhooks. Some highlights:

  • Designed and built the C and Lua APIs to allow REST APIs to be built using idiomatic Lua on top of Momentum's HTTP server. This allowed faster development and iteration of key APIs than would have been possible with C.
  • Designed the click and open tracking system, and led the team building it. (80% C, 20% Lua)
  • Discovered, investigated and resolved throughput issues with the HTTP server when running in multi-threaded mode. (C code)
  • Tracked down and resolved some infrequent and subtle crashes when reloading the configuration under high load, due to unsafe use of data across multiple threads. Some core C APIs and callers needed updating to be thread-safe. (C code)
  • Triaging and resolving escalations from our support team; supporting colleagues working on escalations / production issues.
  • Subject-matter expert on the internals of our software, Lua, and mail standards.
  • Provided training sessions including: lifecycle of messages in Momentum; how to use 3rd-party anti-virus and anti-spam integrations.

September 2009 - July 2013 (~6 years)

The "Professional Services" era at Message Systems:

Principal Solutions Engineer (January 2012 - July 2013)
Client Integration Architect (September 2009 - January 2012)
Professional Services Engineer (May 2009 - September 2009)
Senior Software Engineer (September 2007 - May 2009)

As a part of the Professional Services team, I designed and implemented solutions based on Message Systems' Momentum messaging server, primarily for e-mail. This involved extensive customisation, including extending the platform with C, C++ and Lua.

I was the technical sponsor and development lead for several large Professional Services engagements, including two separate multi-year projects. These involved extensive requirements analysis, design and solution implementation work on behalf of the clients.

Many of the projects were replacements for existing mail systems. Challenges included "hidden requirements" where the functionality of existing systems was undocumented or not well understood; providing feature parity or equivalence, including integrating with other customer systems; in some cases, no access was permitted to customer systems due to regulatory requirements.

One of the largest engagements that I was responsible for involved customising Momentum with ~5,000 lines of C++ code, replacing some of the core codepaths of Momentum with custom behaviour, and driving mail policy based on data from an external system accessed via a C++ library provided by the customer. Message Systems was contracted to develop and support this code. I developed about 50% of the code. I also documented how a complex and poorly understood part of the customer's existing system worked, so that we could build the replacement.

Another large engagement was one of the first large-scale uses of Lua for mail policy with Momentum, driven by data from a Postgres database. As part of this project I and another colleague in Professional Services found, debugged and fixed a number of issues with the Lua bindings, which involved tracing problems from the Lua layer down into the core C code. These ranged from simple functional bugs through to subtle memory corruption or timing bugs.

Other activities included working with the Engineering Team on development of the mail platform, discussing client requirements with Product Management, and working with the Support Team.

May 2003 - May 2007

MessageLabs, Gloucester, UK (Now Symantec Email Security.cloud)

MessageLabs is a provider of managed services for e-mail, Instant Messaging (IM) and web communications, to companies of all sizes, and with partners such as IBM and Verizon. In the case of e-mail, messages sent to/by a customer pass through MessageLabs's e-mail infrastructure before being delivered. Services such as anti-virus (AV), anti-spam (AS), Image Control (IC) and Content Control (CC) are applied as the message passes through.

October 2005 - May 2007

Senior Software Engineer at MessageLabs:

  • Responsible for the SMTP mail server software at the core of MessageLabs's e-mail infrastructure. This software accepted, scanned, modified (if required; e.g.: tag with "[SPAM]") and delivered messages according to customer-configurable policy. Written in a mix of C and C++ (STL and boost), packaged for installation with rpm, all on Red Hat Linux.

  • Designed & implemented new features in the mail server to support updated versions of AV/AS/IC/CC services, working closely with cross-functional teams (Development, Test, Operations, Client Services, Product Management).

  • Led a team of 2 - 4 people implementing new features and bugfixes in the mail server, and associated software. This included maintenance releases for critical bugs in tight timescales.

  • Supported the Operations and Client Services teams in resolving customer issues.

  • Experience of the full software lifecycle, from requirements analysis to ongoing maintenance.

  • Ensured quality: peer code reviews; unit testing; end-to-end test suites (using Perl and other harnesses); memory debugging/valdation tools such as valgrind; helped define C++ coding recommendations; investigated and evaluated static analysis tools for improving C++ code quality; local expert resource on rpm (mostly from painful real-life experience).

  • Technical Lead for two projects to improve mail reporting to customers: one succeeded; one failed, due to factors including problems with project dependencies, and storage limitations.

  • Technical Lead for a proof-of-concept (PoC) to evaluate a replacement for the aging SMTP mail server software. The PoC was successful, Ecelerity was chosen. Subsequently I advocated its adoption in several solutions, to improve time-to-market, reliability and manageability.

  • AccuRev and CVS administrator; Linux systems administration

May 2003 - September 2005

Software Engineer at MessageLabs:

  • Responsible for the SMTP mail server software at the core of MessageLabs's e-mail infrastructure.

  • Designed & implemented new features in the mail server, working closely with cross-functional teams.

  • Supported the Operations and Client Services teams in resolving customer issues.

  • Ensured quality through thorough testing, and validation with tools such as valgrind.

  • Integrated Symantec Brightmail Anti-Spam into the SMTP mail server. Packaged the Brightmail server provided by Symantec, and wrote monitoring software for the Operations team. Both the mail server and Brightmail server software were deployed and went live with no major issues.

  • Produced security updates for vulnerabilities announced via Bugtraq and other sources. This included porting fixes to older, vulnerable versions of the software.

  • AccuRev and CVS administrator; Linux systems administration

August 1999 - October 2002

Cabletron Systems / Riverstone Networks, Reading, UK

Cabletron (now Enterasys Networks, now part of Extreme Networks) was a producer of enterprise networking equipment. Riverstone Networks was spun-off to focus on equipment for Metropolitan Area Networks (MAN) and the Internet edge.

June 2000 - October 2002

Software Engineer at Riverstone Networks:

  • Sole microcode author for one custom processor. Wrote microcode (assembler) for two custom processors, including support for Multi-Protocol Label Switching (MPLS) and IPv6 protocols. Worked closely with the hardware, software and simulation teams in California.

  • Initiated and wrote significant portions of some tools in C++ for end-to-end black-box testing of microcode, software and hardware simulations. These were used to find several hardware bugs during simulation, avoiding re-spins of hardware, saving significant sums of money.

  • Responsible for porting the existing IP, TCP, UDP and PPP MIB support to a new SNMP agent, as part of a project to support monitoring and managing Riverstone's Metropolitan Area Network (MAN) routers with SNMPv3.

  • Developed using the GNU tool-chain on Debian GNU/Linux and Solaris. Extensive TCL, Perl and shell scripting for testing.

  • ClearCase administration; Solaris, Linux and Windows systems administration

August 1999 - June 2000

Software Engineer at Cabletron Systems:

Worked on Cabletron's Virtual Private Networking (VPN) software in embedded C for its range of small-office routers:

  • Extended the software's command-line interface.

  • Internet security protocol testing: IKE & IPSec.

  • Worked on support for Public Key Infrastructure (PKI) using digital certificates, which included porting a vendor's PKI toolkit to the router software environment. Liaised closely with the PKI toolkit vendor to report bugs, then test and integrate bugfixes into their toolkit.

  • Developed using the GNU tool-chain on Digital Unix.

Summer 1996, 1997, 1998

Alchemetrics Ltd., Wokingham, UK

Programmer: Wrote database programs on SCO Unix in C; wrote "man" page documentation for their C database library; wrote a caching library for their database library to speed data access; worked on a Motif-based database viewer.

Summer 1995

Murray Computing Ltd., Wokingham, UK

Programmer: Wrote database programs which eliminated invalid data and extracted statistics from the data. Used Borland C on DOS.

Education

1995 - 1999

University of Bristol, UK

MSci Physics with First Class Honours: Four-year course, combining a BSc and Masters degree. Final year included: 20-week research project with a partner on nanofabrication; 45-minute presentation on Free Electron Lasers. For my elective modules, I focussed on Quantum Mechanics, mathematics and the properties of materials.

1988 - 1995

St. Crispins's Comprehensive School, Wokingham, Berkshire, UK

A-Levels (1995): Chemistry (A), Maths (A), Physics (A)
AS-Level (1995): German (A)
GCSEs (1993): 8 As, 2 Bs

Prizes for GCSEs: Design & Technology; Physics; joint-best grades overall
Prizes for A- and AS-Levels
: AS-Level German; best grades overall

Interests And Hobbies


Tue, 29 May 2018 13:08:22 +0100 (cv.html b1da97cfb6dd8adab178179477a6402dbfcff6c8)