I'm a full-stack software engineer who builds and contributes to microservices, websites, and platforms,
I enjoy making things run smoothly,
and I'm happiest when the tools I build facilitate my team's best work.
I graduated from BYU with a Computer Science degree, and along the way earned a minor in music and spent 4 years in the BYU Men's Chorus, the largest men's chorus in the nation.
I'm a software engineer at Instructure, working on services and underlying platforms that helps Canvas run a little bit smoother and a little more secure. The services that I take responsibility for deliver millions of events a day to internal and external customers.
My wife and I traveled to Seattle for a summer, where I worked on Microsoft's Whiteboard app. This app aims to redefine remote collaboration by presenting a refined digital canvas, and I am proud that the improvements I made are now live on every Surface Hub at every Microsoft store, and thousands of other devices.
In 2018, I worked on the ops team at Lingotek, where I built a tool to make container orchestration a little easier and to allow developers to deploy their own code.
Over two summers, I worked for Instructure as a software engineer intern. My team and I rolled out two new services to our users built on AWS's Kinesis and S3. I loved the exposure to new technology, and felt privileged to start the groundwork on a service and then be part of releasing it the year after.
I've discovered that helping my team do their best work is what fulfills me. This usually takes the form of good documentation and proper tooling. I've had the opportunity to build multiple deployment tools that have saved so much time and made the process so much easier. I fully subscribe to the attitude of "leave it better than you found it"!
When I'm not coding or in class, I'm usually reading whatever I can get my hands on. I'll read any genre, though I love sci-fi, fantasy, and adventure fiction. I love absolutely everything about Star Wars and could spend hours raving about the story, the drama, the music, the movies, the shows, the books, and everything else.
I spent a semester abroad with my wife, as volunteers teaching English in Russia. It was an amazing adventure and we loved getting to know the kids we taught and exploring the history and sights of Russia and Europe!
Instructure's main SaaS offering has been around for a long time and has a pretty slick deployment story. However, many of the other services and smaller apps are more unwieldy to easily deploy. This is an opinionated deploy manager that has an easy process for deploying from master to beta to production, and keeping track of what's deployed. This has turned my team's deploy process from parsing READMEs and running many commands into the same simple process, no matter the specifics.
Golang
Internal - Instructure
Changing table schema is a problem I've had to solve a few times over the past few years, so I finally made a small utility script that does it for me. On-demand throughput provisioning was a game-changer for this process, making it a lot easier to modify all items in a Dynamo table. We've already used it multiple times on my team's projects at Instructure, and I'm proud of how much time this has saved us.
Typescript
DynamoDB
Built for the BYU choirs, this sheet automates the work of organizing choir members by height and section, calculating section sizes and seats, and putting it all together. It generates a seating chart configured to the user's liking, the same chart in list format, and an alternate chart to mix it up.
Google Sheets
Google App Script
Typescript
Keeping customers in the loop is very important at Instructure. Canvas generates "live events" for many actions that are taken by users in the system, and sends them to interested subscribers for their own use. I kept this system from being overwhelmed by the volume of events, and re-wrote key pieces to run much faster.
Lambda
Kinesis
SQS
Javascript
Internal - Instructure
Terraform
Instructure has excellent internal deployment tools, but these tools lack proper support for deploying AWS Lambda functions. Instead of treating Lambda functions as only infrastructure that needs provisioning, Elysium treats the function code as releases that can easily be deployed, changed, and rolled back. Elysium can be added to a project with a simple config file, and has removed a significant amount of friction from deploying the Lambdas associated with Canvas Live Events.
Ruby
AWS SDK
Terraform
Internal - Instructure
This whiteboard started as a simple canvas for drawing, but has transformed into a powerful collaboration tool that is bundled with every Microsoft Teams meetings. I contributed to easy object organization and alignment by snapping object rotation to the cardinal directions and snapping an object to other nearby objects, which made it easier to resize objects without unwanted rotation and neatly organize groups of objects.
C#
UWP
Intentional Platform
I enjoy using the Pomodoro technique to manage my time, but wasn't satisfied with the existing timers out there. So, I built my own. This was a hackweek project and took less than a week of work to get running, thanks to Nuxt and the beauty of static sites.
Vue
Bulma
Nuxt
Terraform
Github Pages
A fundamental change to the way Canvas and other Instructure handles files from users. I introduced a Kinesis -> Lambda batch processing stream, migrated a massive Dynamo database, and provisioned and deployed it to multiple AWS regions. This service consolidated several disparate and insecure code paths for file uploading into one, removing a huge chunk of dead code.
Node
S3
Dynamo
Kinesis
Lambda
Internal - Instructure
Terraform
A bare-bones text parser that looks for keywords and regular expressions and plucks them out of the text. Inspired by Todoist's Quick Add functionality, which uses Natural Language Processing (NLP) to understand what you type. This is a very simple version (<100loc!), but was an interesting exercise in using regular expressions.
JS
Regex
Jest
Lingotek depends on Mesos and Marathon for container management, but the Web UI had been marked as deprecated and was lacking needed features. I built this from the ground up as a wrapper around Marathon API calls. It replicates the existing Web UI and provides extended features that reduced a 5-step deployment process (editing JSON!) to 1 click.
Node
Vue
Bulma
Docker
Marathon
The GPA calculator is my version of a "Hello World" for a language - easy logic, actually does something, and is just complex enough to get a sense for the language and tools. I've been curious about Elm for a while, so I did something about it and built this.
Elm
Skeleton CSS
My team of 3 built this website from the database up to help serve the BYU community by giving them a Quizlet-like website that integrated with BYU's LMS. In addition to scoping and building both the API and front-end, one of my responsibilities was collaborating with designers on features that students would appreciate and use.
Backbone
Material Design
Handlebars
SCSS
Laravel
This site is a simple one, built in (mostly) plain HTML and Sass. Originally started in React before realizing that was too complicated. Learned some interesting lessons with my first attempt at a small React app, but development was much easier on a more simple scale.
Jekyll
Sass
Github Pages
Javascript + Node
AWS Lambda
AWS DynamoDB
AWS Kinesis
Docker + Docker Compose
Terraform
React
Ruby
Git CLI
Vue
Go
Typescript
AWS S3
LTI Tools
Python
C#
HTML + CSS
Command-line apps
Elm
Postgres
Laravel
Backbone
React Native
Jekyll
Swift