Résumé
------
*Helping you do the amazing work you already do, but do it better,
faster, more safely, and with more joy.*
Software Craftsman & Developer Experience Professional
======================================================
.. role:: raw-html(raw)
:format: html
..
.. figure:: ../images/headshot.png
:height: 200px
:align: right
jason.m.gates@pm.me :raw-html:`
`
`LinkedIn Profile `_
.. image:: https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/LinkedIn_icon.svg/960px-LinkedIn_icon.svg.png
:align: right
:alt: LinkedIn Profile
:height: 20px
:target: https://www.linkedin.com/in/jason-gates-96196726a
.. image:: https://cdn-icons-png.flaticon.com/256/25/25231.png
:align: right
:alt: GitHub Profile
:height: 20px
:target: https://github.com/jmgate
My career has taken me from being an engineering physicist to a
computational mathematician and ultimately to a professional software
engineer, as I chased the problems I encountered from magnetically
confined high-temperature plasmas, to the numerical algorithms under the
hood, to their implementation in the software. At that point I realized
it's less about the implementation details and more about the team
culture you have and how that contributes to the overall success of the
project, and thus the switch to Developer Experience (DevEx), which is a
specialized field, blending deep expertise in both `software
craftsmanship`_ and `human interaction`_, aiming to improve the
cumulative feeling of happiness, productivity, and ease that developers
experience while interacting with a platform, tool set, processes,
documentation, and team culture.\ [#f1]_ It spans the entire developer
journey, from onboarding and environment setup to daily coding, testing,
deployment, and long term maintenance. Studies show developers lose
more than 8 hours per week on inefficiencies,\ [#f2]_ and poor DevEx
often contributes to turnover, resulting in loss of institutional
knowledge and recruitment cost.\ [#f3]_ Fast delivery, high confidence,
and low defect rates are what most teams desire, and all are correlated
with improved DevEx. A strategic investment in continuous improvement
in this arena is the only realistic way to turn these hidden costs into
measurable gains, while preserving the flexibility teams need to respond
to change in the future.\ [#f4]_
With `8+ years of experience`_ in this field, I specialize in getting
plugged into a team, determining what its various pain points are that
prevent it from being as successful as it can be, prioritizing which of
those need to be addressed first, and then iterating with the team to
make incremental improvements to help them move in the right direction,
while `tracking both qualitative and quantitative metrics`_. Engagement
with your team can look like any combination of the following:
Building Shared Understanding
Often the foundation for culture transformation must first be laid by
building a shared understanding of why any proposed changes are both
beneficial and necessary to achieve a team's goals. This is often
best achieved by facilitating a weekly lunch & learn series focused
on a particular topic. This could look like, for instance, a team
book club, or a video discussion lunch & learn series. If attendees
are only a subset of the team, the goal is to motivate and empower
them as early adopters to gently advocate for the better way of doing
things they're learning.
Training
Often teams do things the way they do things, because they don't yet
realize there's a better way to do things. This is where continuous
improvement in the skills required to be a professional software
developer comes in. Training engagements could be one-off sessions
to give participants a feel for what's possible and point them to
additional resources for further learning (e.g., introduction to
GitLab). They could also be longer-term courses designed to teach
certain skills or practices over the course of a number of sessions
(e.g., intermediate git: 12 hours over 8 sessions).
Consultation
Often teams need assistance assessing their current state,
identifying sources of friction, prioritizing which to address, and
then developing action plans to execute to work toward solutions.
Such a consultation could be a one-time event (e.g., ~20 hours of
interviews and team discussions, followed by preparing a report of
prioritized recommendations). They may also be recurring, as it's
beneficial to periodically re-assess and pivot to whatever the
largest pain point at the time is, and outside facilitation of those
assessments is often valuable.
Embedded Support
Often teams desire not just an initial consultation, but to have
someone embedded into the team long-term to implement solutions in
the prioritized areas. Such support can be part- or full-time,
depending on other commitments.
Throughout my career, I've enjoyed the opportunities afforded for
continual learning and improvement, whether that's developing my skills
as a leader, or honing my competencies with an ever-evolving tech stack.
I excel in self-directed study, come up-to-speed with new technologies
quickly, and then often find myself the most proficient person around in
whatever language, library, or tool is in question. I pride myself in
being not just a developer, but a software *engineer*, who is able to
assess a project's needs, determine the optimal technologies to address
them, and then design, build, deliver, and maintain solutions with their
long-term sustainability and resiliency to the ever-shifting landscape
in mind.
I function best as a generalist, leading or interfacing with a team of
specialists. I excel at keeping the high-level and long-term plan in
mind, breaking it down into manageable pieces, and finding the right
people to work those tasks. When needed, I have the experience and
attention to detail to dig down into the weeds with the specialists to
ensure the solutions we're designing and building will meet the overall
project needs. I do all this best through asynchronous communication
via project management and team collaboration tools, with synchronous
meetings scheduled only as needed.
.. _software craftsmanship: https://manifesto.softwarecraftsmanship.org/
.. _human interaction: https://newmexicoforensicsclub.readthedocs.io/
.. _8+ years of experience: https://www.youtube.com/watch?v=4pTLW3oT-Tg
.. _tracking both qualitative and quantitative metrics: https://bssw-psip.github.io/practice-guides/pages/how_to_create_ptc.html
Education
=========
| **Colorado School of Mines**, Golden, Colorado
| Ph.D. in Mathematical and Computer Sciences
| GPA: 4.0; Qualifying Exams: Passed
| *Left incomplete due to family responsibilities*
| **University of Tulsa**, Tulsa, Oklahoma
| M.S. in Applied Mathematics
| Graduation: May, 2011; GPA: 3.917
| **University of Tulsa**, Tulsa, Oklahoma
| B.S. in Engineering Physics, concentration in Robotics
| B.S. in Applied Mathematics
| B.A. in German
| Graduation: May, 2009; GPA: 3.916
Experience
==========
**Sandia National Laboratories**, Albuquerque, New Mexico
:raw-html:`
`
December, 2022 -- Present
:raw-html:`
`
*Senior Member of the Technical Staff*
:raw-html:`
`
Automating adherence to software engineering best practices; assisting
teams in improving their project management practices; streamlining a
process for open-sourcing Python infrastructure; establishing
coding/testing standards for Python package development; forking,
modifying, and deploying open-source tools for corporate-internal use.
**Sandia National Laboratories**, Albuquerque, New Mexico
:raw-html:`
`
September, 2017 -- December, 2022
:raw-html:`
`
*Member of the Technical Staff*
:raw-html:`
`
Leading an initiative to automate manual integration and release
testing; encouraging fuller adoption of GitLab as an all-in-one DevOps
and project management platform to improve developer productivity and
overall team success; developing continuous integration/deployment
workflows and infrastructure; leading teams to design and develop tools
to improve sustainability and reproducibility; introducing software
engineering best practices into team workflows; developing code
integration workflows and infrastructure.
.. dropdown:: Additional Prior Experience
:animate: fade-in-slide-down
**Sandia National Laboratories**, Albuquerque, New Mexico
:raw-html:`
`
June, 2016 -- September, 2017
:raw-html:`
`
*Limited Term Employee*
:raw-html:`
`
Software engineering, development, maintenance, testing; version
control instruction.
**Northrop Grumman Corporation**, Aurora, Colorado
:raw-html:`
`
June, 2014 -- June, 2016
:raw-html:`
`
*Engineer Systems II*
:raw-html:`
`
Extending software capabilities; developing and testing algorithms;
addressing data quality.
**Colorado School of Mines**, Golden, Colorado
:raw-html:`
`
August, 2012 -- May, 2014
:raw-html:`
`
*Graduate Teaching Fellow*
:raw-html:`
`
Advanced Engineering Mathematics and Calculus 3; "Problem Solving
with Matlab" tutorial series.
**Front Range Community College**, Westminster, Colorado
:raw-html:`
`
May, 2013 -- August, 2013
:raw-html:`
`
*Math Instructor*
:raw-html:`
`
College Algebra; online education certified.
**Sandia National Laboratories**, Albuquerque, New Mexico
:raw-html:`
`
May, 2012 -- July, 2012
:raw-html:`
`
*SIP Graduate Professional Technical Summer Intern*
:raw-html:`
`
Code validation via manufactured solutions to partial differential equations.
**Colorado School of Mines**, Golden, Colorado
:raw-html:`
`
August, 2011 -- May, 2012
:raw-html:`
`
*Graduate Teaching Assistant*
:raw-html:`
`
Recitation sections of Calculus 3.
**University of Tulsa**, Tulsa, Oklahoma
:raw-html:`
`
August, 2009 -- May, 2011
:raw-html:`
`
*Graduate Teaching Assistant*
:raw-html:`
`
Quiz sections of Calculus 1 & 2.
**University of Tulsa**, Tulsa, Oklahoma
:raw-html:`
`
May, 2007 -- May, 2009
:raw-html:`
`
*Plasma Physics Research Assistant*
:raw-html:`
`
Computationally solved nonlinear magnetohydrodynamic (MHD) equations.
Skills
======
**Software Engineering:**
* DevOps: Well-versed in the *three ways* and *five ideals*. Extensive
experience serving as DevOps lead on computational science teams.
* git: Extensive experience developing, using, and teaching simple to
sophisticated workflows, along with managing GitLab/GitHub projects.
Prefer GitLab for an all-in-one DevOps solution.
* GitLab CI/CD: Extensive experience establishing GitLab CI/CD
pipelines, along with coupling them to Jenkins for more complex
workflows when needed.
* GitHub Actions: Significant experience standing up GitHub Actions
workflows and interfacing external services with GitHub for additional
CI testing.
* Jenkins Pipelines: Extensive experience crafting complex pipelines
and maintaining hundreds of jobs via Pipeline scripts. Modest
experience administering Jenkins instances.
* Cloud: Experience with OpenStack (similar to AWS, GCP, Azure),
Kubernetes, and Helm managing and deploying applications containerized
with Docker/Podman to an internal cloud.
* Automation: Extensive experience writing custom scripting to ensure
all users, developers, and CI services interact with a codebase in the
same, replicable way. Basic experience with Ansible and Terraform.
* Quality: Experience with SonarQube, Fortify, BlackDuck, etc.
* Agile: Extensive experience with Scrum, Kanban, and the Scaled Agile
Framework (SAFe). Specialize in tailoring methodologies to the team
to get the most out of them.
* Project Management: Experience with requirements elicitation, design,
execution, monitoring, and stakeholder interaction. Flexible within
the plan, but will work hard to protect scope and team from external
interference.
**Programming:**
* Python: Extensive experience writing tools to unify build processes.
Substantial experience with Sphinx/MkDocs, pytest, and building
modular ecosystems of reusable packages. Some experience with Django
and the SciPy stack. Referred to as the "Python ninja". Current
language of choice.
* Groovy: Extensive experience using advanced features to build complex
Jenkins Pipeline suites. A close second in language of choice.
* C++: Extensive experience developing and maintaining large
object-oriented codes. Experience creating and utilizing templated
classes, including template metaprogramming. Proficient with the
Standard Template Library and RogueWave containers. Some experience
with Boost libraries.
* bash/tcsh: Extensive scripting experience.
* Fortran 77/95/2003: Experience developing large, parallel,
object-oriented codes.
* OpenMPI: Experience parallelizing Fortran FEM codes.
* OpenMP: Some experience parallelizing Fortran FEM codes. Prefer
OpenMPI.
* Basic experience with Perl, Julia, Java, JavaScript, TypeScript, Ruby
on Rails, Golang.
**Mathematical Tools:**
* LaTeX: Extensive experience typesetting a variety of works. Prefer
to use ``tikZ``, ``pgfplots``, and ``pgfplotstable`` to automate the
generation of papers from code-generated data using only LaTeX.
* Mathematica: Certified by Wolfram Research. Extensive experience
with symbolic manipulations, visualizations, creating dynamic user
interfaces to codes, etc.
* MATLAB: Extensive experience implementing numerical methods and
visualizing results. Developed "Problem Solving with Matlab" tutorial
series. Some experience with computer vision packages.
* Trilinos: Panzer, Teuchos, Thyra, Phalanx, E/Tpetra, NOX, LOCA, Piro,
Teko.
* PETSc/LAPACK: Experience implementing parallel FEM codes.
**Other:**
* German: Once fluent in conversational and some technical.
* SketchUp: Extensive experience utilizing for woodworking and
carpentry design.
* Blackboard/Desire2Learn/MyMathLab: Experience managing courses;
online education certified.
Open-Source Work
================
**staged-script**
:raw-html:`
`
*Lead Architect / Lead Developer / User / Maintainer*
:raw-html:`
`
`GitHub `__
| `PyPI `__
| `ReadTheDocs `__
:raw-html:`
`
See :ref:`Transforming Hacky Scripts into a Modular Infrastructure
` below.
**reverse-argparse**
:raw-html:`
`
*Lead Architect / Lead Developer / User / Maintainer*
:raw-html:`
`
`GitHub `__
| `PyPI `__
| `ReadTheDocs `__
:raw-html:`
`
See :ref:`Transforming Hacky Scripts into a Modular Infrastructure
` below.
**SetProgramOptions**
:raw-html:`
`
*Requirements Developer / Code Reviewer / User / Maintainer*
:raw-html:`
`
`GitHub `__
| `PyPI `__
| `ReadTheDocs `__
:raw-html:`
`
See :ref:`Unifying the DevOps Infrastructure Within Trilinos
` below.
**ConfigParserEnhanced**
:raw-html:`
`
*Requirements Developer / Code Reviewer / User / Maintainer*
:raw-html:`
`
`GitHub `__
| `PyPI `__
| `ReadTheDocs `__
:raw-html:`
`
See :ref:`Unifying the DevOps Infrastructure Within Trilinos
` below.
**shell-logger**
:raw-html:`
`
*Project Lead / Developer / User / Maintainer*
:raw-html:`
`
`GitHub `__
| `PyPI `__
| `ReadTheDocs `__
:raw-html:`
`
See :ref:`One Script to Rule Them All: Unifying Build Processes Across
Platforms ` below.
**SPiFI**
:raw-html:`
`
*Requirements Developer / Code Reviewer / User / Maintainer*
:raw-html:`
`
`GitHub `__
:raw-html:`
`
See :ref:`Developing the SPiFI Library and Associated Jenkins Pipelines
` below.
Projects
========
**NLS³C Community of Practice**
:raw-html:`
`
*Sandia National Laboratories*, Fall, 2025 -- Present
:raw-html:`
`
Recently tapped to lead the development for a Community of Practice for
the `National Laboratories Sustainable Scientific Software Conference`_.
.. _National Laboratories Sustainable Scientific Software Conference: https://s3c.sandia.gov/
**Clean Code Lunch & Learn Series**
:raw-html:`
`
*Sandia National Laboratories*, Fall, 2025 -- Present
:raw-html:`
`
Leading a 16-month long lunch & learn series on `Uncle Bob`_'s
`Clean Code`_ series of videos, to develop a group of early adopters to
take software quality principles back to their teams.
.. _Uncle Bob: https://en.wikipedia.org/wiki/Robert_C._Martin
.. _Clean Code: https://cleancoders.com/
**Software Security Champion**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2025 -- Fall, 2025
:raw-html:`
`
Served as a liaison between our software security department and various
projects and teams across the labs. Implemented security best
practices, gave talks on various security-related subjects, and attended
`Black Hat`_ and `DEFCON`_, bringing back immediately actionable
insights.
.. _Black Hat: https://blackhat.com/
.. _DEFCON: https://defcon.org/
**Internal OpenSSF Tools**
:raw-html:`
`
*Sandia National Laboratories*, Winter, 2024 -- Spring, 2025
:raw-html:`
`
The `Open Source Security Foundation`_ provides the
`Best Practices Badge App`_ and `Scorecard`_, such that open-source
projects can manually and automatically assess the quality of their
software engineering practices, particularly with respect to security.
I led a small team to fork, modify, and deploy internal instances of
these tools, so internal software projects can take advantage of all the
same benefits, without us having to release any data to the open
internet. The project required coming up-to-speed quickly on Ruby on
Rails, Golang, and `Nuxt`_.
.. _Open Source Security Foundation: https://openssf.org/
.. _Best Practices Badge App: https://www.bestpractices.dev/en
.. _Scorecard: https://scorecard.dev/
.. _Nuxt: https://nuxt.com/
**Software Quality for a MATLAB Simulation Suite**
:raw-html:`
`
*Sandia National Laboratories*, Fall, 2024 -- Present
:raw-html:`
`
RaMSeS is a MATLAB tool suite for modeling and simulation of radars.
Initially a collection of tools written by various radar engineers, it
has grown to be the one-stop shop for all things radar mod-sim. With
the growing user base, we've focused in recent years on improving the
overall project quality. We've stood up a user and developer
documentation site via Sphinx, have given developers more and faster
feedback in CI, and have begun integrating AI into the development
workflow to help scientific subject matter experts write more and better
unit tests.
.. dropdown:: Additional Prior Projects
:animate: fade-in-slide-down
**Open-Sourcing Sandia-Developed Software Packages**
:raw-html:`
`
*Sandia National Laboratories*, Fall, 2022 -- Fall, 2024
:raw-html:`
`
In order to build Sandia's reputation in the broader software engineering
and scientific computing communities, and increase the likelihood we can
attract and retain top talent, I lead an effort to define and streamline our
process for open-sourcing internally-developed software. We hope to
encourage the design and development of general-purpose, reusable
components, and establish a workflow for active co-development of both
internal and external repositories by Sandians. This work resulted in an
estimated 4,000 hours or $1M of labor savings per year going forward.
**Bringing Python Best Practices to a Radar Simulation Code**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2023 -- Fall, 2024
:raw-html:`
`
Python was used as a wrapper language to tie together a MATLAB radar
simulation suite and a C++ visualization library for the sake of exploring
the possibilities of planning radar collections. I was brought on to the
project to initially help with packaging and distribution, and then to start
applying Python development best practices to the code. In the midst of the
latter, I brought the team up-to-speed with modern software project
management practices using GitLab. This led to an effusively positive
review from an internal software quality audit, and the auditors recommended
some of our practices as worthy of imitation for software projects across
the labs. Refactoring the application with a focus on modularity enabled
the team to quickly respond to customer requests for a variety of new
features.
**Code Generation Webapp**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2023 -- Summer, 2023
:raw-html:`
`
Sandia's radar software group uses a Django-based webapp to store
programmatic representations of the interface control documents (ICDs) for
the radars under development. The app can translate the ICDs to CSV, HTML,
and JSON, and can automatically generate the C++ or Java code needed to
interface with the devices. I extended the webapp to allow a secondary C++
generator for a specialized use case, and refactored the code to start
bringing it into alignment with Python best practices.
.. _gms-project:
**Transforming Hacky Scripts into a Modular Infrastructure**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2022 -- Spring, 2023
:raw-html:`
`
Many view scripting as something that just needs to be done to enable the
real work to take place. With such a view, there's a strong tendency to
think there's no need to apply software engineering best practices to the
development of your scripts, which, over time, leads to an ever-growing
mountain of technical debt. Over the course of a year, I refactored a
collection of hacked-together Python scripts into a modular infrastructure,
the components of which are focused on doing only one thing and doing it
well, and are reusable in multiple contexts. They are fully documented with
Google-style docstrings, and fully unit tested with ``pytest``. The project
concluded with a series of tech talks (6+ hours of recorded content) to give
the high-level overview of how the various pieces interact, and the design
considerations that went into building them. The talks highlight that the
infrastructure now serves as a case study for adhering to the SOLID
principles of object-oriented design, and should set the stage for further
infrastructure extensions in the future after their operations and
maintenance was handed over to other individuals on the team.
**DevOps Book Club**
:raw-html:`
`
*Sandia National Laboratories*, Fall, 2021 -- Spring, 2023
:raw-html:`
`
Since building shared understanding is the basis for cultural
transformation, I established a book club to help my team build their
understanding of the fundamental principles that underpin the DevOps
paradigm shift. This is accomplished through reading and discussing books
on DevOps proper, on collaboration and leadership, and on software
engineering best practices. This effort has been called out in multiple
retrospectives as having significantly impacted the competencies of team
members and overall effectiveness of the team.
**From Fragility to Flexibility**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2023
:raw-html:`
`
Everyone has experience with a piece of code that's absolutely critical, but
everyone's afraid to touch. The original developers have moved on, if you
touch it, you might break it, and it's "working" now. One such example was
the Python script used to orchestrate a series of ``helm`` and ``kubectl``
commands in the shell to deploy containerized services to internal
Kubernetes clusters. Over time, though, infrastructure feature requests
continued to pile up to which the response was always, "We could do that,
but that would require modifying the code we're not supposed to touch." I
took the initiative to completely rewrite the script, breaking it up into a
series of modules for reusability elsewhere. The unit test coverage level
was maintained at 94%, and no existing behavior was broken. We tested the
new system alongside the old one for a number of weeks to prove feature
parity before merging. After the reimplementation was merged, the various
feature requests were able to be addressed with only a few lines each, and
the new flexible architecture will allow the module to continue to grow to
meet evolving stakeholder needs in the future.
**Automated Testing Improvement Initiative**
:raw-html:`
`
*Sandia National Laboratories*, Summer, 2021 -- Fall, 2022
:raw-html:`
`
The `Geophysical Monitoring System
`_ is a Kubernetes-based
application suite developed in Java and TypeScript that historically has a
substantial set of manual acceptance tests that take days to complete for
each quarterly release. I led an initiative to establish the infrastructure
and associated team policies and best practices to automate component-,
integration-, and system-level tests in the GitLab CI pipelines. After the
initial phase was completed, the prototype infrastructure was matured to
production-ready, the pipelines were optimized, and the robustness of the
applications was improved. Work to automate existing manual tests continues
as we slowly but surely move toward continuous delivery. It's worth noting
that I had no prior experience with GitLab CI pipelines, but learned the new
technology in a matter of weeks and quickly earned the nickname of "pipeline
guru".
.. _trilinos-devops-project:
**Unifying the DevOps Infrastructure Within Trilinos**
:raw-html:`
`
*Sandia National Laboratories*, Summer, 2020 -- Spring, 2021
:raw-html:`
`
Over the past few years, two distinct DevOps infrastructures have grown up
within the `Trilinos `_ project. Understanding
that both solutions had their pros and cons, both were less flexible than
desirable, and ultimately the prospect of maintaining two separate solutions
long term would be fraught with error, it was determined a year-long effort
would be made to replace them with a single solution incorporating the
lessons learned from the past. I conducted an initial investigation of the
existing solutions over a two-month period, and then followed that with a
time of gathering stakeholder requirements. I then drafted a plan to cover
two general-purpose components for consistently loading environments across
machines, and consistently configuring a `CMake `_-based
code, and then led the all-remote team, spread across four states in two
time zones, in the design and execution. Modularity, flexibility, unit
testing, code coverage, and documentation were all hallmarks of the way we
tackled the problem. The intent was to not only provide Trilinos with what
it needed, but to provide those in the greater scientific software community
with general tools they can use to improve the sustainability and
replicability of the codes they develop.
**DevOps Infrastructure Consultant**
:raw-html:`
`
*Sandia National Laboratories*, Summer, 2020
:raw-html:`
`
The `Dakota `_ project provides a software suite
for optimization and uncertainty quantification. Their build and test
infrastructure had grown organically over more than two decades to the point
of being both fragile and brittle. They sought my services to determine
what they would need to do to get from where there were to where they wanted
to be. I conducted a number of interviews with team members, and interfaced
closely with their newly hired DevOps engineer, to determine both their
needs and what they could realistically accomplish. I then developed a
15-month plan to rebuild their infrastructure from the ground up such that
it would be easy to maintain and extend for years into the future. I
presented the plan to a wide audience largely via an extended metaphor, so
the various pieces would be easy to grasp by non-experts, and a secretary's
reaction was, "I hardly ever know what you all are talking about, but this
presentation I understood!"
**Developing JOG-CI: Connecting Jenkins, OpenStack, and GitLab CI/CD**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2020 -- Summer, 2020
:raw-html:`
`
`OpenStack `_ is a collection of components that
allows you to maintain your own private cloud infrastructure. The ability
to rapidly stand up cloud tenants, running on corporate hardware behind the
scenes, was desirable for lowering the barrier to entry for teams to get up
and running with continuous integration. A lightweight tool for standing up
such tenants and connecting them to either Jenkins or GitLab (or both) was
developed under my direction by our department's year-round intern, and that
tool has been used by a handful of teams to stand up and tear down instances
as needed, depending on changing testing needs. We both came up to speed
with OpenStack and the ins and outs of private cloud administration in a
matter of weeks.
**Faster Turnaround Improves Developer Productivity**
:raw-html:`
`
*Sandia National Laboratories*, Winter, 2019 -- Summer, 2020
:raw-html:`
`
A complete run of EMPIRE's pipelines used to take about 20 hours. Running
only once per day, it was hard to determine where new bugs were introduced
in a codebase that would see dozens of requests merged daily. As such, a
merge from develop to master would happen every few weeks, if we were lucky.
I led a major refactor of our pipelines, restructuring them with modularity
in mind, such that they could fail and get actionable feedback to the team
as soon as possible. We additionally achieved parallelizing the testing
across a collection of machines, again decreasing our time to notification
of success or failure. The dozens of Jenkins jobs used by each top-level
pipeline are governed by a single Groovy Pipeline script, making
maintainability and extensibility a breeze. The end result was a reduction
down to about five hours, such that the pipeline suite now runs multiple
times a day. With more frequent feedback, we're kept clean more often, and
developers spend less time debugging and more time doing science.
.. _one-script:
**One Script to Rule Them All: Unifying Build Processes Across Platforms**
:raw-html:`
`
*Sandia National Laboratories*, Summer, 2019 -- Spring, 2020
:raw-html:`
`
The BuildScripts repository for the EMPIRE codebase had grown organically
over time, with bash scripts for running on different platforms, with
different configurations, etc. Developers also had their own scripts for
setting up their environment and configuring the code. I led an effort to
unify our build process across platforms and create a "one build script to
rule them all," so to speak, to be used by users, developers, and automation
services. Python was used for the sake of documentation (`Sphinx
`_), testing (`pytest
`_), and unified style guides.
Replicability was enhanced by building in both a comprehensive logging
utility and the ability to replay prior runs of the script. The tool was
designed with modularity and flexibility in mind, such that it's easy extend
existing pieces or plug in new ones when future needs arise. Investing the
time, money, and energy in developing such an infrastructure paid dividends
in productivity, both for the scientific developers and the DevOps
engineers.
.. _spifi-project:
**Developing the SPiFI Library and Associated Jenkins Pipelines**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2018 -- Spring, 2019
:raw-html:`
`
In order to adequately test the git workflow mentioned directly below, a
flexible pipeline was needed, and the `Jenkins pipeline plugin suite
`_ with the `Apache Groovy
`_ language under the hood provided the power
necessary. The plugin suite has a high barrier to entry, so a colleague and
I worked closely together to develop the SEMS Pipeline Framework
Infrastructure (`SPiFI `_) library, I
developing the pipeline itself and driving the requirements for the library,
and he developing the library to ease and automate routine pipeline tasks.
The library has since been rolled out to half a dozen teams or so, and is
used to drive hundreds of jobs on a daily basis.
**Stability with Respect to the Tip of Develop**
:raw-html:`
`
*Sandia National Laboratories*, Fall, 2017 -- Fall, 2018
:raw-html:`
`
`Trilinos `_ is a collection of math libraries
for large-scale, complex multi-physics problems on next generation
high-performance computing architectures. Its development is largely driven
by a handful of physics application codes that are tightly coupled with it.
Because the applications drive the algorithm development, they would like to
be able to use the latest commit on the develop branch, but at the same time
they would like to make sure commits to Trilinos never break them and stall
application development. I developed a git workflow involving a fork of
Trilinos and a secondary approved version of the develop branch, which is
updated automatically via nightly testing. In the event testing fails, the
branch isn't updated, and the application team can continue development
unhindered. They can file an issue against Trilinos that will be resolved
through Trilinos' usual process. Flexibility is also afforded for the rare
instances where simultaneous changes must be made to both the application
and Trilinos codebases. This approach has been used successfully by two
separate application teams for the last few years.
**Defining Policies to Turn a Team and Project Around**
:raw-html:`
`
*Sandia National Laboratories*, Summer, 2017 -- Fall, 2018
:raw-html:`
`
EMPIRE is a collection of next generation
electromagnetic/electrostatic/fluid dynamic codes. Prior to the summer of
2017, there was confusion as to who was on the team, what people were
working on, what needed to be done, how one could get started, etc. Pushes
happened directly to the master branch, and there was minimal testing, code
review, documentation, etc. I played a large part in driving the adoption
of the following: *GitLab issues*, description templates, and Kanban boards
were used to track work and capture design discussions. *GitLab merge
requests*, complete with code review and approval, were required to get
changes into the develop branch. *Style guides* for both the code and
documentation were developed to move toward a common look and feel. A *git
workflow* was developed to ensure no direct pushes to master or develop, and
master would be updated via nightly testing. *Automated testing* was
established to test multiple machines and nfigurations to improve stability.
A *monthly retrospective* was established to regularly check in on how well
our policies were working for us and allow us to tweak them as needed.
**Git Instruction**
:raw-html:`
`
*Sandia National Laboratories*, Spring, 2017 -- Fall, 2019
:raw-html:`
`
I led the Center for Computing Research University (CCR-U) group in teaching
courses introducing participants to version control via git, utilizing the
`Software Carpentry `_ instruction style. We
developed both introductory and intermediate courses, which were very
popular and received excellent feedback, and helped hundreds of Sandians to
level up their software engineering competency over the course of a few
short years. It's worth noting that I went from having never used git to
teaching courses in it in under a year, quickly earning the tongue-in-cheek
moniker of "git fu master".
**Panzer Memory Usage Refactor**
:raw-html:`
`
*Sandia National Laboratories*, September, 2016 -- July, 2017
:raw-html:`
`
Local to global communication in parallel finite element simulations occurs
through the use of *owned* vectors, containing all the information owned by
a given process, and *ghosted* vectors, containing the information from
neighboring processes. The original implementation duplicated all the data
in the owned vector in the midst of the ghosting process, meaning more data
was being stored in memory than was necessary. I refactored classes such
that ghosted vectors contain only the ghosted information, and any time a
user wants to grab an element of a vector given a local ID, the logic of
whether it lives in the owned or ghosted vector is hidden from the user.
Avoiding the data duplication significantly reduces the run-time memory
usage.
**Generalized Current Constraint Boundary Conditions in Charon**
:raw-html:`
`
*Sandia National Laboratories*, October, 2016 -- June, 2017
:raw-html:`
`
The Charon semiconductor device physics simulation code previously had the
ability to attach a constant current constraint to a terminal of a device
(diode, transistor, etc.). I generalized this capability such that any
number of constraints can be added to a device (at most one per terminal).
A resistor contact constraint type was added, corresponding to hooking up a
resistor with a voltage source on its far side. A block LDU preconditioner
was generalized to work for any of these constraint scenarios. This
capability helps users more readily simulate real-world configurations.
**LOCA and Charon Integration**
:raw-html:`
`
*Sandia National Laboratories*, July -- September, 2017
:raw-html:`
`
Previously if a Charon user wanted to sweep a voltage contact boundary
condition on a device, they would use a rather brute-force Python script to
get the job done. I integrated the Library of Continuation Algorithms
(LOCA) with Charon to provide this capability natively, and with more
flexibility. LOCA is able to intelligently ramp up the parameter step size,
and, in the case of a solver failure, backtrack, cut the step size, and
proceed with the continuation run. This also provides the capability to
track bifurcations in the future, should we need to.
**Algorithm Development**
:raw-html:`
`
*Northrop Grumman Corporation*, September, 2014 -- June, 2016
:raw-html:`
`
Given real-time input data from multiple sources, how do we clean and
manipulate the data to yield the answer we seek? Details of the algorithm
and its application are classified. A colleague and I reviewed relevant
literature, determined most information was no longer applicable to our new
geometric configuration, and developed an elegant iterative algorithm to
walk its way intelligently through the solution space to the correct answer.
I also developed a Matlab tool to read in pieces of data from in the midst
of the algorithm to generate a multi-page PDF detailing just how the
algorithm is working its way to the solution, which aids tremendously in
discovering scenarios for which the algorithm needs improvement.
**Automating Large-Scale Distributed Software Installation**
:raw-html:`
`
*Northrop Grumman Corporation*, Summer, 2014
:raw-html:`
`
An installation and configuration of HP's Network Node Manager software
suite across multiple virtual machines (VMs) took an operator four days
using a series of manuals to guide them through the process. Having no
experience with VMs or Linux sysadmin activities, I came up to speed in
weeks. I then developed a series of scripts to be deployed and run on the
VMs to update various packages in Red Hat Enterprise Linux (RHEL) to the
appropriate versions, patch some of HP's Perl scripts used in the
installation, and install and configure the software suite. Automating the
process reduced the time needed to about two hours with minimal human
interaction.
**Adaptive Local-Global Multiscale Finite Element Methods**
:raw-html:`
`
*Colorado School of Mines*, August, 2012 -- May, 2014
:raw-html:`
`
When solving the classical uniformly elliptic boundary value problem in a
medium that is either highly oscillatory or has high contrast the standard
Galerkin finite element method (FEM) is insufficient and :math:`h`-,
:math:`p`-, and :math:`r`-refinement become prohibitively expensive for
large problems. Multiscale FEMs consist of solving local homogeneous
problems on the course mesh elements to create multiscale basis functions
that already have some knowledge of the medium. Determining the appropriate
boundary conditions for these local solves is an area of active research.
The adaptive local-global multiscale FEM projects an initial global solve
onto extended course mesh elements, makes that projection nodal on the
coarse mesh elements, and then averages across the edges of the course mesh.
The resulting local solves yield nodal basis functions with expanded support
that satisfy the partition of unity. In theory there exist ideal basis
functions that can reconstruct the exact solution exactly---iterating this
method allows us to work toward those ideal basis functions. This
computational effort can be done ahead of time such that the near-ideal
basis functions can be used for any source terms and time-evolution
scenarios. Effective parallelism was achieved through the use of OpenMPI
and PETSc.
**Automated Generation of Homework Assignments and Solution Procedures**
:raw-html:`
`
*Colorado School of Mines*, August, 2013 -- May, 2014
:raw-html:`
`
Problems in Advanced Engineering Mathematics are highly formulaic---given a
problem of a certain type, there are certain steps to follow to the
solution. As such the generation of such problems, *and their full solution
procedures*, is simply a matter of programming. *Mathematica* was utilized
to randomly generate problem sets and solutions for the class.
**Manufacturing Solutions to Fluid Flow Problems**
:raw-html:`
`
*Sandia National Laboratories*, Summer, 2012
:raw-html:`
`
Assuming solutions of a certain form and working them through systems of
nonlinear coupled partial differential equations (PDEs) allows one to
determine the source terms necessary for the equations to be satisfied. I
developed a *Mathematica* suite for manufacturing such solutions to
incompressible Navier Stokes, some of its turbulent extensions, and to MHD.
Solutions and source terms were exportable to C for interfacing with a code
being validated, and all details were exportable to LaTeX for paper
generation.
**Boundary Integral Equation Methods for Solutions to Laplace's Equation**
:raw-html:`
`
*University of Tulsa*, Fall, 2010
:raw-html:`
`
This general solution method consists of transferring all the computation
from the domain to its boundary. Both inner and outer Dirichlet, Neumann,
and Robin problems were considered. Solvability was proven, and uniqueness
was shown for all but the inner Neumann problem, whose solutions differ only
by a constant. Solutions were determined in terms of harmonic potentials
from Green's representation formulas.
**Boundary Element Method and Visualization Tool**
:raw-html:`
`
*University of Tulsa*, Fall, 2010
:raw-html:`
`
The numerical equivalent to the project above, when attempting to solve a
PDE on a given domain, one can instead subdivide the boundary into a number
of boundary elements and do all the necessary integration there.
Determining the solution somewhere in the domain is then just a matter of
evaluating a function at that point. I developed an interactive
*Mathematica* suite for solving various PDEs. Users have the ability to
specify the boundary, various PDE and boundary condition terms, where to
evaluate the solution, etc.
**Nonlinear Evolution of Unstable MHD Equilibria**
:raw-html:`
`
*University of Tulsa*, May, 2007 -- May, 2009
:raw-html:`
`
I created a user interface between an eigenvalue code, an equilibrium code
(SCOTS), and a nonlinear MHD evolution code (NIMROD) allowing for an
exploration of parameter space to determine where modes were stable or
resistive- or ideal-unstable. We then ran nonlinearly from a starting point
near the stability boundary and observed how the plasma evolved.
Clearance
=========
**DOE Q:** July, 2018 -- Present
| **DOD TS/SCI:** May, 2014 -- June, 2016\
| *Deactivated after leaving Northrop Grumman Corporation*
Certifications
==============
.. figure:: ../images/lfd121-developing-secure-software.png
:align: right
:target: https://ti-user-certificates.s3.amazonaws.com/e0df7fbf-a057-42af-8a1f-590912be5460/e2ed501a-70a9-4f81-b839-1138e7b5d7a1-jason-gates-8f5fb502-c893-4eb5-831f-158f69419699-certificate.pdf
* `The Linux Foundation's Devloping Secure Software Certification Course `_
* `GitKraken Foundations of Git---Certification Course `_
* `Carpentries Instructor `_
* `CompTIA Security+ `_ (June 2014 -- May 2017)
* Mathematica---Advanced Foundations
Continuing Education
====================
**Kubernetes:**
* Docker & Kubernetes Internals Workshop (internal)
* `Kubernetes Hands-On---Deploy Microservices to the AWS Cloud `_
* `Certified Kubernetes Administrator (CKA) with Practice Tests `_
**Python:**
* `Python for Scientists and Engineers `_
* `Pandas Mastery Workshop `_
* `Machine Learning Mastery Workshop `_
**Project Management:**
* `Project Management Overview `_
* `Managing a Project from Start to Finish `_
**Leadership:**
* The Art of Being an Effective Mentor (internal)
* Preparing for Management (internal)
* `Crucial Conversations `_
* Five Conflict Styles and How to Use Them (internal)
* `Social Styles `_
**Miscellaneous:**
* `The Software Engineering Body of Knowledge `_
* Basic Instructor Training (internal)
* System Administrator Policies (internal)
* `Clean Code `_
Presentations
=============
#. Jeremy Castile and Jason M. Gates. `"What Great Teams Do
Differently: Standardizing Developer Workflows"
`_. *Interview*.
GitKraken. January 2026.
#. Jason M. Gates. `"Collaborative Storytelling in Code: Enhancing Team
Synergy"
`_.
*Presentation.* GitKon. December 2024.
#. Jason M. Gates and Joseph Valeriano. "Best Practices for Remote Work."
*Interview.* GitLab Government User Group. November 2023.
#. Jason M. Gates and Jonathan Silva. `"When Workflows Don’t Feel Like Work:
A Lesson in Simplifying Pull Requests"
`_.
*Interview.* GitKon. October 2023.
#. Jason M. Gates. `"The Complexities of Replicability."
`_ *Presentation.* The Department of
Applied Mathematics @ CU Boulder. April 2023.
#. Jason M. Gates, David Collins, and Josh Braun. "ShellLogger: Keeping Track
of Python's Interactions with the Shell." *Presentation.* Tri-lab Advanced
Simulation & Computing Sustainable Scientific Software Conference. May
2022.
#. Jason M. Gates and William McLendon. "Enhancing Python's ConfigParser."
*Lightning talk.* US Research Software Engineering Association Community
Call. April 2022.
#. David Collins, Josh Braun, and Jason M. Gates. `"Logger: A Tool for
Keeping Track of Python's Interactions with the Shell."
`_ *Presentation.*
US Research Software Engineering Conference. May 2021.
#. Jason M. Gates, William Mclendon, Josh Braun, and Evan Harvey. `"LoadEnv:
Consistently Loading Supported Environments Across Machines."
`_ *Presentation.*
US Research Software Engineering Conference. May 2021.
#. Jason M. Gates, David Collins, and Josh Braun. `"CI Tools as Lego Blocks:
Build Your Ideal Custom Solution."
`_
*Presentation.* Society of Industrial & Applied Mathematics Computational
Science & Engineering Conference. March 2021.
#. Vivek Sarkar, Jason Gates, Charles Ferenbaugh, Vadim Dyadechko, Anshu Dubey,
Hartwig Anzt, and Pat Quillen. `"Technical Approaches to Improve Developer
Productivity for Scientific Software."
`_ *Panel discussion.*
Collegeville Workshop on Scientific Software. July 2020.
#. Jim Willenbring, Ross Bartlett, and Jason Gates. `"Git Solutions."
`_ *Interview.* Collegeville
Workshop on Scientific Software. July 2020.
#. Jason M. Gates. "Training Best Practices." *Tea time discussion.*
Collegeville Workshop on Scientific Software. July 2020.
#. Jason M. Gates. "Introduction to GitDist." *Presentation.* Trilinos
User-Developer Group Meeting. October 2019.
#. Jason M. Gates. "Intro to SPiFI." *Presentation.* Trilinos User-Developer
Group Meeting. October 2019.
#. Jason M. Gates. "Stability w.r.t. the Tip of develop: An Experience
Report from Two Years In." *Presentation.* Trilinos User-Developer Group
Meeting. October 2019.
#. Jason M. Gates. `"Training in Version Control and Project Management."
`_ *Lightning talk.* Collaborations
Workshop. March 2019.
#. Jason M. Gates. "Stability w.r.t. the Tip of Develop." *Presentation.*
Trilinos User-Developer Group Meeting. October 2017.
#. Jason Matthew Gates, Roger P. Pawlowski, and Eric Christopher Cyr.
`"Panzer: A Finite Element Assembly Engine within the Trilinos Framework."
`_ *Presentation.* Society of
Industrial & Applied Mathematics Computational Science & Engineering
Conference. March 2017.
Publications
============
#. Jason Gates. `"From Beginner to Pro: The Three Stages of Git Adoption."
`_ *Blog post.*
Git Blog. December 2023.
#. Miranda Mundt, Jon Bisila, Reed Milewicz, Joshua Teves, Michael Buche,
Jonathan Compton, Jason Gates, Kirk Landin, and Jay Lofstead. `"Challenges
and Strategies for Testing Automation Practices at Sandia National
Laboratories." `_ *Paper.* US
Research Software Engineering Conference. October 2023.
#. Jason M. Gates. `"Using GitLab Issues for Iterative, Asynchronous Software
Design." `_ *Whitepaper.* Collegeville
Workshop on Scientific Software. July 2023.
#. Reed Milewicz, Jonathan Bisila, Miranda Mundt, Sylvain Bernard, Michael
Buche, Jason M. Gates, Samuel Andrew Grayson, Evan Harvey, Alexander Jaeger,
Kirk Timothy Landin, Mitchell Negus, and Bethany L. Nicholson. `"DevOps
Pragmatic Practices and Potential Pitfalls in Scientific Software
Development." `_ *Paper.*
International Congress on Information and Communication Technology.
February 2023.
#. Jason M. Gates, Josh Braun, and David Collins. `"One Script to Rule Them
All: Unifying Build Processes Across Platforms."
`_ *Whitepaper.* Collegeville Workshop
on Scientific Software. July 2020.
#. Jason M. Gates, Joe Frye, Brent Perschbacher, and Dena Vigil. `"Git
Productive!" `_ *Whitepaper.*
Collegeville Workshop on Scientific Software. July 2020.
#. Jason M. Gates. `"Faster Turnaround Improves Developer Productivity."
`_ *Poster.* Collegeville Workshop on
Scientific Software. July 2020.
#. Patrick McCann, Rachael Ainsworth, Jason M. Gates, Jakob S. Jørgensen,
Diego Alonso-Álvarez, and Cerys Lewis. `"How do you motivate researchers
to adopt better software practices?"
`_
*Speed blog.* Collaborations Workshop. July 2019.
#. Jason M. Gates. `"Defining Policies to Turn a Team and Project Around."
`_ *Poster.* Third Conference of
Research Software Engineers. September 2018.
#. D P Brennan, P K Browning, J Gates, and R A M Van der Linden.
`"Helicity-injected current drive and open flux instabilities in spherical
tokamaks." `_
*Plasma Physics and Controlled Fusion* 51.4 (2009):045004.
Favorite Work-Related Books
===========================
**DevOps:**
* `The DevOps Handbook
`_:
How to Create World-Class Agility, Reliability, and Security in Technology
Organizations, by Gene Kim, Jez Humble, Patrick DeBois, and John Willis
* `The Phoenix Project
`_:
A Novel About IT, DevOps, and Helping Your Business Win, by Gene Kim
* `The Unicorn Project
`_,
by Gene Kim
**Teaming & Leadership:**
* `1501 Ways to Reward Employees
`_,
by Bob Nelson
* `Dare to Lead
`_:
Brave Work, Tough Conversations, Whole Hearts, by Brené Brown
* `Team Topologies `_:
Organizing Business and Technology Teams for Fast Flow, by Matthew Skelton
and Manuel Pais
* `The Five Dysfunctions of a Team
`_:
A Leadership Fable, by Patrick Lencioni
* `The Manager's Path
`_:
A Guide for Tech Leaders Navigating Growth and Change, by Camille Fournier
**Software Crafstmanship:**
* `Clean Code
`__:
A Handbook of Agile Software Craftsmanship, and `Clean Architecture
`_:
A Craftsman's Guide to Software Structure and Design, by Robert C. Martin
* `Code Is For Humans
`_:
A Guide to Human-Centric Software Engineering, by Zohar Jackson
* `Design Patterns
`_:
Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard
Helm, Ralph Johnson, and John Vlissides (the "gang of four")
* `Technical Debt in Practice
`_:
How to Find It and Fix It, by Neil Ernst, Rick Kazman, and Julien
Delange
* `The Mythical Man-Month
`_:
Essays on Software Engineering, by Frederick P. Brooks, Jr
* `The Pragmatic Programmer
`_:
Your Journey to Mastery, by David Thomas and Andrew Hunt
Honors & Awards
===============
* Team Employee Recognition Award for EMPIRE
* Team Employee Recognition Award Nomination for Advanced Simulation and
Computing DevOps Visionaries
* Spot Award for Git Training
* Department of Applied Mathematics and Statistics Graduate Student Teaching
Award
* Graduate Teaching Fellowship and Assistantships
* Outstanding Senior in German
* Academic Excellence Award
* Member of ΦΒΚ, ΦΣΙ, ΤΒΠ, ΣΠΣ
* University of Tulsa Presidential Scholarship
* Byrd Scholarship
* Oklahoma Academic All-State Scholarship
* ACT Perfect Score
.. rubric:: Footnotes
.. [#f1] https://virtuslab.com/blog/backend/what-is-developer-experience/
.. [#f2] https://www.atlassian.com/developer-experience
.. [#f3] https://digital.ai/glossary/what-is-developer-experience/
.. [#f4] https://www.gitkraken.com/state-of-developer-workflows