Software Developer Tools Engineer
San Jose, California
What do I do? I love writing tooling for software developers. For the last seven years, I have been supporting developers with static analysis tooling, build system infrastructure, and test tooling. I support build systems, and giant codebases of both web and mobile appliations.
What are my skills? I am versatile in writing server-side developer tooling, and do so in various modern programming languages. I am passionate about working with other developers, and supporting them with functionality that improves developer productivity.
Aug 2016 - current
Wrote a web application which previews automated nullability changes being applied to Dart code; functions similar to an IDE
Implemented new code-generating API for Dart mockito package for compatibility with Dart's upcoming non-nullable type system (PR #236)
Led type system upgrade for all internal code, to prepare for Dart 2.0; ran a "fixit", engaging 40 engineers to prepare their code bases, changing types and other code in 1600 Dart files.
Designed a siloed build system for projects that could not be upgraded to Dart 2.0; forked and programatically altered more than 2000 files to keep over 40 applications running indefinitely on Dart 1.
Lead developer of the Dart mockito (GitHub) package; designed new architecture to handle new Dart type system (initial implementation: PR #26, issue #83, PR #85, user documentation: PR #96.
Lead developer of the Dart markdown (GitHub) package; significant PRs: Markdown extension support (PR #44), extension sets (PR #55), GitHub-Flavored Markdown tables (PR #78), overhauling link reference definitions (PR #110), example web app (PR #120) live at dart-lang.github.io/markdown, overhauling emphasis and strong emphasis parsing (PR #193), overhauling links (PR #202).
Joined the "readability approvers" team for the Dart language in December 2018, shaping the style and idioms used for all code written at Google; reviewed > 180 changes in 12 months.
Recipient of the Dart organization and "Multiplatform" organization's Citizenship Award in Q1 2017, Q2 2019, Q3 2019, and Q4 2019.
Heavy contributor to the Sass-linting Rubygem, scss-lint; after contributing new linting rules and many bug fixes, am the largest contributor behind the project owner.
Feb 2013 - Aug 2016
Designed and implemented a web test runner for Dart, now used by hundreds of developers in Google; test runner builds and runs tests, manages browser windows, caching and selectively re-running tests on file writes.
Designed and implemented a new Network Emulation feature inside Chromedriver, exposing features from Chrome's DevTools to WebDriver testing (first CR, network presets CR, DELETE CR, offline CR).
Developers can use this feature to test their web applications under throttled network conditions (high latency, slow speed, offline), a test attribute that was previously incredibly difficult to control.
Designed and implemented Mobile Emulation support in ChromeDriver (main CR).
Dec 2010 - Jan 2013
Implemented and customized a new financial system and research administration system.
Understanding of Java web development, including Spring and Struts.
Understanding of general (Java) development, using Ant, Maven, Eclipse, Subversion, and Jira.
Oct 2006 - Dec 2010
Understanding of Windows and several Unix variants, software testing fundamentals, performance testing concepts and tools.
Designed performance evaluation automation suite in Ruby.
Graduation May 2004
Team communication - communicating with teammates both local and remote does not just mean email; I work efficiently to tighten communication loops within and across teams.
Code review - working together on teams requires competent and compassionate code reviews; I deliver thorough and pragmatic code reviews.
Test culture - from working for years as a Software Engineer in Test, I promote a culture of good testing practices, from unit testing to end-to-end testing, from testing one thing at a time, to testing public API, checking in regression tests for bug escapes to failing tests for open bugs, earning good test coverage (but not necessarily perfect), and more.
Agile methodologies - I have worked on Agile teams with scrum masters, Kanban boards, true stand-ups, and safe, effective retrospectives; I believe in the effectiveness of choosing work cycle methods per-team, per-project that best help the team get things done.