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 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.
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.