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

Rust on Fuchsia Team -- Mar '21 - present

Member of the team and the toolchain rotation, responsible for improving engineering quality and productivity:

  • Scrubbed hundreds of open bugs, closing dozens, and created a planning backlog.
  • Wrote proposals on supporting Rust on Fuchsia for non-Google developers, including the technical and process dependencies of publishing support libraries to crates.io and running Fuchsia-based tests in the CI of projects in the OSS ecosystem.
  • Led early design work to remove Rust's "UNIX dependency" for its Fuchsia standard library.
  • Contributed Fuchsia's unique use cases to Rust's language evolution process.
  • Added tooling and documentation for using rust-bindgen to consume C/C++ libraries. Contributed upstream support for integrating with Fuchsia's build system.

Owner of core Rust libraries such as kernel bindings and the async task scheduler:

  • Added tools for debugging hung tasks in the async executor. Coordinated with Build and System Assembly teams to prevent production code bloat.
  • Improved error messages and prevented classes of runtime errors by refactoring the async executor's public interface, unblocking future performance optimizations.
  • Removed runtime panics from high level bindings to the kernel.

Main point of contact for vendored external crates used by Fuchsia:

  • Designed, implemented, and rolled out a tool for automatically delegating ownership of vendored external crates to the team(s) actually using them.
  • Designed and implemented a tool for auto-rolling vendored crates from crates.io.
  • Fixed correctness and performance bugs in the tool used to vendor a new or updated dependency. Updated directory layout to ease navigation, added documentation for all forks. Mitigated risks to future IP rights with guardrails around public domain dependencies. Deleted unused or problematic dependencies.

Logging -- Jun '19 - Mar '21

The primary owner of Fuchsia's userspace logging facilities, inheriting it secondhand from the prototype. All production crash reports and development tools go through my overhauled code. 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. 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 and by exposing logs over a new endpoint with redaction of user data approved by the Privacy team.
  • Organized a logging 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.
  • Wrote the first documentation on Fuchsia's logging, with all pages in the top 20% of fuchsia.dev traffic at end of 2020.
  • Designed a structured log binary encoding to replace unstructured text, implemented encoding and frontend in Rust and a fuzzer-style cross-language conformance test. Migrated core system components to use Rust structured logging. Scoped and reviewed C++ and Dart structured log libraries and oversaw migrations.
  • Exposed producer identity (novel feature for Fuchsia), allowing separate ingestion and storage of log messages. Used this data to expose metrics about sources of logspam.
  • 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.

Time -- Feb '19 - Jun '19

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.

Misc.

  • Member of Google's "Unsafe Rust Crabal" which provides review and consultation on subtle Rust abstractions.
  • Member of Fuchsia's Open Source Review Board which reviews external dependencies for license compliance.

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

Experimental 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 linchpin for the project. It is now managed by Rust's infrastructure team.