San Francisco Bay Area
I am a software engineer with a passion to create powerful infrastructure that makes it easy for developers to create amazing user applications. I maximise the performance of the underlying hardware by producing elegant, scalable code. I optimise in any part of the system; from huge faults in the architecture, down to tiny inefficiencies in the implementation. I've worked independently and in large geographically distributed teams, been the worker bee and the leader, and am happy and productive in all cases.
Two weeks in Japan! One week back in Blighty.
Ensuring my excellent Uber-fam colleagues are setup for success in their ongoing projects.
Every 5 years Uber gave you a 1 month sabbatical. Spent some time skiing, did >100 Leetcode, and read DDIA (great book) https://github.com/alxn/leetcode
Working with an incredibly talented group of engineers as we execute on the foundation and move to hybrid multi-cloud.
“Full-stack” development building heterogeneous compute device: ● Java; Gbps. ● Big Data frameworks ● OpenCL ● Linux kernel driver hacking, with check.sf.net xUnit testing ● FPGA work ● I/O Cache ● Makefile & Git logistics ● Manage contractors
Delivered portable networking APIs that worked consistently the majority of Cisco's operating systems: IOS (run-to-completion), IOS-XE (Linux-based), IOS-XR (QNX), NX-OS (Linux-based) and vanilla Linux; shipped on Nexus & Catalyst switches, ASR Routers, CRS, Telepresence, and more; for key features such as MPLS, L2VPN, PMIPv6, LISP and others. Jointly influenced executives, so that these APIs became the cornerstone of Cisco's SDN strategy as the onePK Infra layer; in use by onePK, OpenFlow and the Netconf/Yang teams. API layer enabled rapid shipping of OnePK on ASR9K and Nexus 3000 to a tier-1 customer. Produced my highest quality code at Cisco here, with some fantastically talented developers: ● Coded APIs that are easy to use well, but hard to use badly. ● Wrote portable thread-safe and re-entrant APIs; working over sync and async paradigms. ● Designed and wrote routing API and asynchronous operations framework API. ● Wrote network interface abstractions. Advised on thread and dispatch model paradigms for scalable portable code that supports disparate dispatch paradigms. Most exciting of all, had the opportunity to perform some lock-free coding. Designed and implemented enhancements to shared memory trace mechanism, (that pre-dated lttng). ● Re-entrant resize, clear, pause, one-shot and corruption detection. ● Added inline ASM for x86, mips, ppc, sync primitives, and memory barriers. Continued my passion for quality software as an xUnit Test and embedded documentation evangelist within Cisco: ● Implemented extensions for multi-node test and multi-threaded event driven testing. ● Enforced automated xUnit high coverage and clear embedded documentation. ● Pushed doxygen-1.8 Cisco-wide to champion snippets and PlantUML diagrams. ● Steered Cisco to use doxygen for onePK public SDN documentation.
Took an internal transfer to the USA, and within 6 months took sole ownership of NX-OS IPv4 and IPv6 Unicast Routing Information Base code from departing Cisco Fellow; supported this code through the first Nexus 7000 NX-OS release(s). I joined this team before the first release; quickly becoming the only RIB developer, and one of the few experts in layer 3. I had to productise and stabilise code under tight deadlines and high stress environments; frequently triaging and handing off complex issues as the RIB is the "pinch-point" in the system. NX-OS is a Linux-based environment, where I worked on a number of new challenges: ● Improved the threading event and dispatch model. ● Designed and shipped uRIB eventual consistency state synchronization model. ● Dynamically resizable shared memory feature for all unicast and multicast RIBs to use. ● Added backtrace syslog support for NX-OS with shared-lib+offset support and script decoder. ● Bootstrapped a VM-based hardware emulator, with "make iso". ● Mentoring graduates and colleagues new to routing. And a number of familiar ones: ● Designed and implemented "BGP-PIC" support; scaled IPv4 RIB from 56k to 1M prefixes. ● Designed and implemented all NXOS RIB MPLS VPN features, e.g. extranets, VRF-limits. ● Improved maintainability of uRIBs; opaque structures and API, AF-any modify routes. ● RIB-FIB consistency checker, binary event trace, Doxygen for APIs ● Gave org-wide guidance on many technical layer 3 issues.
My first graduate job; learning from a great bunch of experienced developers from the UK computing industry. Working in the IPv6 platform independent team, developing C code that ran in the monolithic embedded real time network operating system that at that time, ran on the majority of routers and switches that Cisco sold. The team and I, were responsible for the entire core IPv6 infra stack code, including ICMPv6, Neighbor Discovery, the networking interfaces, the Routing Information Base, RIPng, and many other features. As I grew as a developer I took on the lead on many features, including the contentious issue of telling other teams that they were doing IPv6 wrong: ● Lead design of IPv6 operation and implementation for Cable networks (DOCSIS 3.0). ● Developed, inter-op tested IPv6 Mobile Home Agent; IETF drafts from 13 through 24; 1 patent. ● Refactored legacy IPv6 Address & Prefix with opaque Producer & Consumer API pattern. ● Forced redesign of Mobile IPv6 Router, and delivered core IPv6 infra for new design. ● Forced refactor of HSRP IPv6 design for address family independence. ● Designed and delivered IPv6 infra for all first hop redundancy protocols; HSRP, GLBP, VRRP. ● Ran IPv6 IOS beta program as [email protected], supporting over 50 customers. ● Ran Cisco's "6Bone" connection, allocating tunnels to early IPv6 adopters. ● Qualified Cisco IOS under the IPv6 Ready Logo Program. Championed improved development methodologies within Cisco: ● A framework for automated unit testing. ● Embedded API documentation (doxygen).