Adam Perry

Email: [email protected] | GitHub: anp | Blog: blog.anp.lol | Resume: blog.anp.lol/cv

Work Highlights

Google

Fuchsia: Software Engineer -- Nov '18 - present

Logging

The primary owner of Fuchsia's userspace logging facilities from mid 2019 until early 2021, inheriting it secondhand from the external contractor who had prototyped it. Most work was on the logging service, responsible for draining in-flight logs from all processes on the system and holding them in memory for query by crash reports and developer tools. Implemented in multithreaded asynchronous Rust.

  • Unblocked Fuchsia's first product launch by eliminating kernel out-of-memory conditions caused by lack of flow control in the the logging service's listener protocol. Defined safe variant of protocol, adapted synchronous code to use async/await, added tests, deflaked existing tests.
  • Unblocked Fuchsia's first product launch by exposing logs over a new endpoint with redaction of user data. Refactored diagnostics streaming endpoint to be generic over a Rust stream of serde-compatible values, allowing future extension to other data types.
  • Designed a structured log binary encoding, implemented encoding in Rust, implemented a Rust logging frontend, implemented a fuzzer-style cross-language conformance test for the encoding.
  • Exposed producer identity to the logging service (novel feature for Fuchsia), allowing separate ingestion and storage of log messages and unblocking future logspam-aware retention policies. Used this data to expose metrics about sources of logspam.
  • Organized a logging quality-of-life working group during a quarters-long feature freeze. Scoped and socialized tasks, held weekly meetings to track progress and offer support, and reviewed changes for 12 engineers. Organized a "docs fixit" with the Diagnostics and Tech Writers teams, resulting in over a dozen new docs pages.
  • Scoped and reviewed C++ and Dart structured log encoding libraries, integrating the structured log parser with the logging service, a new fuzzer for that integration, better kernel log metadata, clearer init of the existing C++ library, an isolated embedding of the logging/metrics service in all test environments, support for DEBUG/TRACE severities.
  • Consulted on an accepted RFC to forward the stdout/stderr of some processes to the system log. Consulted on plan to forward critical userspace logs to serial, reviewed the implementation.
  • Wrote the first documentation on Fuchsia's logging, with all pages in the top 20% of fuchsia.dev traffic at end of 2020. Later wrote documentation on the strategy for identifying log producers, and on the JSON-encoded log endpoint.

Time

Briefly the owner of Fuchsia's system time. Tasked with making it possible to remove UTC from the kernel's syscall interface.

  • Co-designed a new kernel clock object that conveys timelines between processes.
  • Designed and implemented an API to allow the runtime environment to delay execution until UTC was accurate.
  • Added functionality to assert that the device's clock never goes before its build time.
  • Drafted the migration roadmap to remove UTC from the kernel by using clock objects passed between processes.

Rust & Open Source

  • An OWNER of Fuchsia's external Rust crates.
  • Member of the Rust Toolchain Rotation, which updates Fuchsia's rustc. Contributed extensively to the playbook and wrote a Python script for bisecting upstream commits against the Fuchsia build.
  • Member of the Rust on Fuchsia Working Group.
  • Member of Fuchsia's Open Source Review Board.

Expo

Software Developer -- Nov '16 - Jul '17, Jan '18 - Sep '18

  • Authored Create React Native App and spoke at ReactConf 2017 to promote it. User growth increased dramatically (from ~2% WoW to >5% WoW, >10x YoY). Managed relationship with Facebook.
  • Prototyped multiversioning strategy for Android NDK libraries by generating namespaced stubs which performed runtime symbol lookup to avoid loading the versioned libraries into the process' symbol table. Oversaw implementation after moving to management.
  • Exposed in-progress customer build logs from Go daemon on MacStadium builders for later presentation. Added new job lifecycle model to RethinkDB and Redis, including storage for in-progress build logs. Built secret scrubber to avoid ever transmitting customer key material.
  • Replaced custom Buildkite CI system consisting of 10k's of lines of our own Javascript and millions of lines of vendored node_modules with less than 3,000 lines of bash, YAML, and HCL using CircleCI and Terraform. This empowered individual engineers to unblock CI.
  • Improved developer velocity and infrastructure reliability by migrating off of Vault and using GCS buckets and GCP KMS for secret and configuration management.
  • Consolidated multiple alpha-versioned manually administered Kubernetes clusters into one stable-versioned GKE cluster, improving reliability and reducing maintenance overhead.

Engineering Manager -- Jul '17 - Dec '17

  • Hired an SRE Lead to oversee infrastructure health, our first specialist.
  • Doubled our engineering team in 6 months to >15 FTEs, >10 contractors.
  • Planned and led our first company-wide targeted product push.
  • Established strong norms around mentorship, self-care, and engineering rigor.

I'm quite proud of the work I did as Expo's first Engineering Manager, but I'm even more grateful to have learned how much I value hands-on engineering to stay motivated and happy at work.

Northern Arizona University

Application System Analyst -- Aug '15 - Oct '16

Staff programmer for a new research department.

  • Built the first version of a high-performance metagenomic binning pipeline designed for rapid detection of rare variants of pathogens in genetic samples. Heavily multithreaded Rust code, production runs used 10+ machines in the HPC cluster, each with 1-1.5TB of heap.
  • Worked on several Django/Postgres web applications to support research efforts.

End-User Computing Specialist -- Jul '14 - Aug '15

Worked on the school's help desk for the Bb Learn LMS and developed software including an offline course export integrity static analysis tool and an online database query tool for identifying common course quality issues.


Open Source

Rust's #[track_caller] feature

Radically improves many Rust error messages. I implemented it in the compiler and standard library, wrote developer documentation, and wrote the initial reference documentation. The feature has been stable since Rust 1.46.0.

moxie

Incremental declarative UI runtime for Rust. Primary author.

rfcbot

GitHub bot which coordinates Rust's asynchronous consensus gathering process. All Rust teams use it for RFC decisions. Developed to reduce bottlenecking in the RFC process, Niko Matsakis called it "transformative". Status of in-progress decisions is visibile at rfcbot.rs.

I originally wrote this service as a response to a call for help tracking important project metrics. Based on feedback, I evolved it into a decision-making lynchpin for the project. It is now managed by Rust's infrastructure team.