PROFESSIONAL EXPERIENCE

Software Architect - Futurewei Technologies, Fargo, North Dakota (July 2017 - Present)

I work with a tight-knit team of engineers and architects dedicated to contributing to open-source initiatives. Our group maintains communication with departments building products and services leveraging open-source software. I mainly focus on working with public and private cloud identity management teams whose requirements can span multiple communities. The majority of my work consists of contributing across OpenStack services to improve or deliver specific initiatives.

Software Developer - Rackspace, San Antonio, Texas (July 2014 - April 2017)

My experience with OpenStack Identity projects opened up an opportunity for me to work with OpenStack in a public cloud setting. At Rackspace, I joined the Cloud Identity team, who was responsible for identity management of Rackspace's public cloud offering. My primary responsibilities were to foster a constructive learning environment that enabled other team members to contribute upstream and to aid in integrating Rackspace's public cloud identity system with OpenStack. After doing so, I moved to Rackspace Private Cloud where I continued to focus heavily on identity management. Here, I started building relationships with teams developing deployment tools for private cloud customers. Those relationships brought me closer to users, making it easier to take requirements upstream. My work in this area increased the performance and scalability of OpenStack Identity for public, private, and hybrid clouds. My experience made me a candidate as a mentor for the OpenStack Innovation Center (OSIC), which was a partnership between Rackspace and Intel. In addition to my daily responsibilities to maintain contributions upstream, I mentored several new OpenStack developers.

Software Engineer - IBM, Rochester, Minnesota (June 2012 - June 2014)

In May 2012, I graduated from North Dakota State University with a degree in Computer Science. The following month, I joined a team dedicated to developing and maintaining an OpenStack distribution used to build various IBM cloud products. The primary focus of this new department was to enable OpenStack on IBM Power system architectures. I found the opportunity unique because I was one of the first members of a new department and I had some OpenStack experience before joining. As a result, I helped train other engineers as our team grew in addition to daily development work and code reviews. Our department also contributed directly upstream to OpenStack, which provided a new learning experience for me since the majority of my involvement with open-source was as a downstream consumer. The more opportunities I had to interface with upstream contributors the more I enjoyed open-source software. It was at this point where I started contributing on my own time and getting involved in other OpenStack projects, mainly OpenStack Identity.

OPEN SOURCE EXPERIENCE

OpenStack Technical Committee Member (TC) September 2018 - present

Towards the middle of 2018, I submitted my candidacy for a seat as a member of the OpenStack Technical Committee, and my peers elected me. As a member of the TC, I focus on enabling impact across OpenStack projects, which was the foundation of my candidacy. I believe that providing consistency across components of a distributed system benefits users and developers through a unified experience and familiarity. It also provides a way to reuse implementations, making the software we write more maintainable. I use my time to help facilitate discussions about what cross-project work we want to accomplish so the TC can make an informed decision about community-wide goals. Once we know what goals we're going to focus on in a release, I jump in and assist some of the projects that might need a little extra help.

OpenStack Keystone Project Team Lead (PTL) February 2017 - March 2019

Leading up to the election dates for the Pike release, I openly shared my vision for keystone's future (you can read my candidacies for the Pike, Queens, Rocky, and Stein releases). I was elected by the members of the community to serve as the technical team lead for all OpenStack Identity projects. I've coordinated and communicated all identity related topics and sessions for OpenStack Summits and Project Team Gatherings. In this role, I continued to mentor new OpenStack developers while driving solutions towards better policy enforcement and quota tracking across OpenStack. I served for the Pike, Queens, Rocky, and Stein releases.

OpenStack Keystone Core Reviewer July 2014 - present

After contributing to OpenStack for several releases, my peers nominated me to be a keystone core maintainer in July of 2014. During this time, I continued learning about the project's historical context and plans for the future from other core maintainers. After co-developing a feature that significantly improved scalability, I found a niche for refactoring code to be more maintainable and easier to understand. I also started paying more attention to the performance of the software I worked on and tried to find ways to test the performance of a patch before merging it. Over time, I developed a strong preference for finding the balance between managing technical debt and delivering new functionality.

TECHNICAL EXPERIENCE

The majority of my open-source contributions are to the OpenStack project. You can get an idea of how I review code using OpenStack’s Gerrit system. If you’re curious about how I approach writing code, you can browse some of my upstream contributions, including how I approach implementing new features [0][1], refactor code to be simpler and easier to maintain [2][3], or introduce consistency across projects and large code bases [4][5].

[0] The service I was working on needed a new way to distinguish users into different types. This feature gave us the necessary underlying infrastructure to expose more REST APIs to more users in a safe and secure way.
[1] At the time, the service I was working on was crippled by replication lag talking to a database, specifically in global deployments. This side-effect made it nearly impossible to scale the application. I co-developed a solution that reduced database replication and write traffic to zero by implementing a form of authenticated encryption for the application’s most used APIs. This made the application more robust and less susceptible to database bloat that slowed the system down. This work also led us to develop improvements that increased overall application performance.
[2][3] The project I worked was highly configurable, allowing users the flexibility to run the application how they saw fit. At the time, we had a large amount of technical debt surrounding a pluggable piece of the application, making it expensive to maintain and fragile. Users would be susceptible to breaking the API based on backend configuration options. I helped drive an effort to simplify the problem by reorganizing the responsibilities of the different pieces of software, mostly following known programming patterns. This gave us a higher confidence in the software, made it easier to understand, and allowed us to test it thoroughly.
[4][5] Many people and organizations running OpenStack deployments experienced the pain and expense of maintaining custom policy files, essential to OpenStack approach to RBAC. I led an initiative during the Queens release to move policy and documentation in code. Having this part of the system in code allowed for more intuitive tooling for operators. We were able to ease the maintenance burden and introduce a standard deprecation process that operators could consume easily. Additionally, we were able to simplify the upgrade process. The effort spanned more than 50 OpenStack repositories and lasted several months. I openly published tooling to share progress with the entire OpenStack community.

I maintain a concise version of this document on my Github account.