I'm an accomplished software engineer and engineering manager with highly varied technical experience, previously employed at Facebook and GitHub. I've done a lot of open source and technical speaking as well.
As an engineering manager and a technical lead, I emphasize coaching and mentoring, and sharing mental models to help everyone level up. I care deeply about how companies and teams organize themselves and their work, and am personally familiar with the common growing pains.
I've done a little bit of everything, and if there's something I haven't done before, I'll learn it.
Chose to return to an IC role to go deeper technically. Co-started a project to simulate social media interactions on the Facebook platform: automated agents, using much of the real infrastructure (but isolated from production), are trained to exhibit particular user or community behaviors—for example, mimicking bad actors—to improve Facebook's ability to detect and prevent malicious activity. Check out our paper, WES: Agent-based User Interaction Simulation on Real Infrastructure, for more details!
In addition to technical leadership, I helped hire most of the team, regularly provided coaching and mentoring, and generally supported local team members on behalf of our remote manager.
Switched to management to grow the team further in London, and worked with counterparts in the SF Bay Area and Seattle to bring our reactive system from a functional proof-of-concept into production at scale.
Began supporting an additional team in Boston which was working in the same problem space, and encouraged collaboration between the two. Onboarded a local manager for the Boston team, and began supporting them directly. Together, built the team up to a healthy, self-sustaining size.
Helped design and implement an initial version of a C++ system for transforming normal backend queries into "live" or "reactive" queries, which implement "infinitely fast polling" by automatically re-evaluating themselves when the underlying data has changed. Exposed this functionality to Facebook's iOS and Android developers through GraphQL, as described by a team member in their talk, GraphQL Live: Reactive Queries at Facebook.
Consulted for Mac and iOS development teams, especially those interested in using Carthage, Mantle, or ReactiveCocoa open source projects. Provided both architectural guidance and direct code contributions in proprietary projects, helped integrate the open source libraries and tools where it made sense, and improved the open source projects as needed to benefit the proprietary works.
Added features to GitHub for Mac (now GitHub Desktop), fixed many reliability issues, significantly improved the app architecture. Implemented features on the GitHub website, in the GitHub API, and in the libgit2 C library to support the app. Co-wrote Squirrel.Mac, a highly reliable software update framework, to replace Sparkle. Architected most of the Cocoa projects open sourced by GitHub during this time, in both Objective-C and Swift.
Helped build a Mac app for iPhone wireframing (unreleased), and a Mac app for creating three- and nine-slice images. Created, architected, and implemented the majority of the Bitswift's Velvet framework, for using AppKit controls within TwUI.
Hired as an intern, rose to a technical leadership role within ten months. Introduced a means to reuse code across more than fifteen client projects—creating, architecting, and implementing ten iOS frameworks from scratch. Directly managed and mentored nine engineers (originally six), several of whom had little technical experience.
Software-intensive organizations rely on large numbers of software assets of different types, e.g., source-code files, tables in the data warehouse, and software configurations. Who is the most suitable owner of a given asset changes over time, e.g., due to reorganization and individual function changes. New forms of automation can help suggest more suitable owners for any given asset at a given point in time. By such efforts on ownership health, accountability of ownership is increased. The problem of finding the most suitable owners for an asset is essentially a program comprehension problem: how do we automatically determine who would be best placed to understand, maintain, evolve (and thereby assume ownership of) a given asset. This paper introduces the Facebook Ownesty system, which uses a combination of ultra large scale data mining and machine learning and has been deployed at Facebook as part of the company’s ownership management approach. Ownesty processes many millions of software assets (e.g., source-code files) and it takes into account workflow and organizational aspects. The paper sets out open problems and challenges on ownership for the research community with advances expected from the fields of software engineering, programming languages, and machine learning.
We introduce the Web-Enabled Simulation (WES) research agenda, and describe FACEBOOK’s WW system. We describe the application of WW to reliability, integrity and privacy at FACEBOOK, where it is used to simulate social media interactions on an infrastructure consisting of hundreds of millions of lines of code. The WES agenda draws on research from many areas of study, including Search Based Software Engineering, Machine Learning, Programming Languages, Multi Agent Systems, Graph Theory, Game AI, and AI Assisted Game Play. We conclude with a set of open problems and research challenges to motivate wider investigation.
We report on Facebook’s deployment of MIA (Metamorphic Interaction Automaton). MIA is used to test Facebook’s Web Enabled Simulation, built on a web infrastructure of hundreds of millions of lines of code. MIA tackles the twin problems of test flakiness and the unknowable oracle problem. It uses metamorphic testing to automate continuous integration and regression test execution. MIA also plays the role of a test bot, automatically commenting on all relevant changes submitted for code review. It currently uses a suite of over 40 metamorphic test cases. Even at this extreme scale, a non–trivial metamorphic test suite subset yields outcomes within 20 minutes (sufficient for continuous integration and review processes). Furthermore, our offline mode simulation reduces test flakiness from approximately 50% (of all online tests) to 0% (offline). Metamorphic testing has been widely-studied for 22 years. This paper is the first reported deployment into an industrial continuous integration system.