Sam Rawlins
Software Engineer
Phone » (602) 348-2450
Email » sam.rawlins@gmail.com
2018 Nov - current
Senior Software Engineer
Google Inc
-
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
-
"20% contributor" to Dart static analysis team; work includes a "strict
inference" mode, new static analysis checks, improved "unused" elements
analysis
-
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
Aug 2016 - Nov 2018
Software Engineer
Google Inc
-
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
-
Lead developer of the Dart markdown package; significant PRs: Markdown
extension support, extension sets, GitHub-Flavored Markdown tables,
overhauling link reference definitions, overhauling emphasis and strong
emphasis parsing, overhauling links
-
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, according to git stats
Feb 2013 - Aug 2016
Software Engineer in Test
Google Inc
-
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
Dec 2010 - Jan 2013
Principal Systems Analyst/Developer
University of Arizona
-
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
-
Develop tests, scripts, and tools in web-oriented languages (Ruby,
JavaScript, CoffeeScript), implementing various tools (Selenium, Sinatra,
Subversion, Git, Jira)
Oct 2006 - Dec 2010
System Test and Performance Engineer
IBM
-
Understanding of Windows and several Unix variants, software testing
fundamentals, performance testing concepts and tools
-
Designed performance evaluation automation suite in Ruby
-
Develop tests, scripts, and tools in multiple languages including: C, Java,
Perl, Ruby, Python, HTML/JavaScript/CSS
May 2008
Bachelor of Science - Mathematics and Computer Science
University of Arizona, Tucson, AZ - 3.1 GPA
Software development - developer tools
Software development - build systems / large codebases
Software development - front end
Dart language
Java language
Ruby language
Bazel build system
Python language
AngularDart / Angular
HTML/CSS languages
Unix shell
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.