Dark Dungeon is a 2D stealth puzzler made for a Game Design course at the University of Portland along with Justice Nichols and Hailee Kenney. The game was written entirely in C# using the XNA framework over the course of two weeks. I served as team lead and head designer and did a large portion of the programming. I was responsible for implementing movement and collision detection, enemy line-of-sight, and the darkness mechanics. I also designed levels 1, 2, and 5.
In Dark Dungeon you must use stealth to reach a treasure chest without getting caught by patrolling guards.
Switch into Dark mode to more easily sneak past the guards, but watch out for deadly ghosts!
topiary! is a 2D side-scrolling hedge-'em-up created in 48 hours for Global Game Jam 2015. The title was developed in Unity using its native 2D tools, and all scripts were written in C#. The title was developed alongside Christian Scandariato, Erik Sundberg, and Kayli Edwards. I was a designer and one of the chief programmers. I was responsible for movement and jumping, the player's shooting and melee attacks, and switching between the alternate realities. I was also responsible for taking the art assets and sprite sheets and animating them in-game.
In topiary! you play as Gale, an old woman trimming hedges in her garden.
Trim hedges to score points, but be sure not to trim them too much!
And be careful, things may not be what they seem...
From 2014 to 2016, I worked as a Software Engineer at Puppet in Portland, OR. While there I worked primarily in Clojure on a number of projects, many of which were open-source.
trapperkeeper-webserver-jetty9 is a webserver service written with the trapperkeeper service framework. I was a core developer and added several new features to this service, as well as tests and documentation. I also helped handle code review and releases.
Puppet Server is a Clojure re-implementation of Puppet's server-side components for managing Puppet agents. Puppet Server is written in Clojure using the trapperkeeper service framework, and utilizes the trapperkeeper-webserver-jetty9 service mentioned above. It runs on the JVM, and has vastly improved performance over the original Ruby version of said components. I was a core developer, and contributed features to both the open source and enterprise versions of the product, in addition to writing tests and performing code reviews.
puppetlabs-hocon is a Puppet module to handle enforcing the configuration of HOCON configuration files, which, beginning with Puppet Server, we had standardized on as the configuration language for all Puppet products. As part of this, I was also involved with ruby-hocon, a reimplementation of Lightbend's HOCON library in Ruby. I was a core developer on these two projects as well, contributing features and tests, handling releases, and performing code reviews. As part of the requirements for these projects, I also wrote a new parser for the original Lightbend HOCON library to preserve formatting and ordering, which I did as an open source contributor. I worked closely with the library's maintainer to develop the design of this new parser, and also worked with him to have all my code and tests reviewed to ensure they met high standards of code quality.
At Puppet, I was also a core developer of file sync. File sync is a Puppet Enterprise-exclusive feature for Puppet Server that automatically syncs Puppet code across multiple Puppet Server instances by exercising Git. In addition to being a cool feature on its own, working on it gave me experience working with some more obscure features and internals of Git.
Day 2193 is a 2D survival/resource management game created in 48 hours for Global Game Jam 2016. The game was developed in Unity 5, and all scripts were written in C#. The title was developed alongside Brian Cain, Joseph Ritch, and Cory Buckley. I was a designer and one of the two programmers. I was responsible for much of the code including player movement, much of the resource management, and the AI of the enemies. I was also responsible for taking the art assets and sprite sheets and animating them in-game.
In Day 2193 you play as a robot engaging in its daily ritual of maintaing the ship on which it works.
Protect the ship's resources and crew from attacking aliens until the day ends!
From 2016 to 2018, I worked as a Game Mechanics Programmer at TT Games in the United Kingdom. At TT, I gained experience working with creative people from multiple disciplines in a long-standing C++ codebase. While there, I wrote or contributed to several important, high-visibility mechanics, including a selfie mode that was shown at E3 2017. I got the opportunity to make design decisions about mechanics I worked on, and gained experience in numerous systems like combat, networking, cameras, and physics. I was credited on Lego Star Wars: The Force Awakens, Lego Dimensions, Lego Worlds, and Lego Marvel Super Heroes 2.
One of my first mechanics at TT was the Creation mechanic, a major mechanic built for Lego Dimensions. This mechanic utilizes a physical toypad peripheral, and requires a player to place a toy on three colored spots on that peripheral in whatever order they choose. Depending on the order, one of six creatures is automatically created and spawned from LEGO Bricks, and interacts with something in the environment to allow the player to progress.
I was also given the opportunity to craft a selfie mechanic for Lego Marvel Super Heroes 2. This mechanic allows the player to take out a cell phone and take a live selfie in-game, which is then saved in local storage. This photo can then be placed on billboards in the game world. The selfie mode comes complete with snapchat-style filters, which I came up with myself.
I currently work at GitHub, where I am a Senior Software Engineer building infrastructure and platform services in Go.
I currently work on the Object Storage Team, where I am the technical lead of a new internal service providing a unified, abstracted API for streamlined, platform-agnostic object storage across multiple cloud providers like Amazon S3 and Azure Blob Storage. In addition to feature work, my current responsibilities include leading and providing technical guidance to a team of several engineers while guiding the project's architecture and working to build a roadmap for the future.
I am also the lead maintainer of Alambic, a functionally-overburdened distributed legacy Go service that provides proprietary on-disk object storage capabilities to handle uploads and downloads of various types of user content, such as avatars. My responsibilities include educating teammates about the service (most recently through a three-part video series packed with literature jokes), supporting other teams to integrate with and build on top of Alambic, and regularly working with support teams to address issues encountered by some of our largest enterprise customers.
Before my time on the Object Storage Team, I was on the Git Ecosystem Team. While on that team, I was the technical lead of GitHub's internal server-side implementation of Microsoft's VFS for Git project, a tool to allow Git to run efficiently when working with very large monorepos. In this role, I worked closely with our product team to develop onboarding and testing plans for customers who wanted to test VFS for Git in an alpha state. As VFS for Git is a Microsoft project, I regularly met with their internal VFS for Git team to discuss progress and exchange ideas, both before and after Microsoft's acquisition of GitHub.
During my time on the Git Ecosystem team, I was also a maintainer of Git LFS, an open-source tool that allows Git to work well with large files by storing them outside of repositories.
Cool Story Co-Bruh is a 2D stealth game created in 48 hours for Cartoon Network Game Jam in 2016. The jam itself involved creating games based on characters from OK K.O., which at the time had just been announced. Our game was based on Co-Bruh, a minor character from the series. The game itself was developed in Unity 5, and all scripts were written in C#. It was developed alongside Brian Cain, Cory Buckley, and Jory Bourgette. I was a designer and one of the two programmers.
In Cool Story Co-Bruh you play as Co-Bruh as he sneaks through a Boxmore facility to rescue K.O. Unfortunately, the facility is quite cold, and Co-Bruh only has one scarf to share between his snake arms!
Avoid enemy robots and try to keep your snake arms happy by switching the scarf between them!
Small Plate Panic is a fast-paced, food-based minigame collection. It was created in Unity 5 in 48 hours for Global Game Jam 2019, and all scripts were written in C#. It was developed alongside Brian Cain, Cory Buckley, and Casey Frantum. I was a designer and one of the two programmers.
In Small Plate Panic, you have a table at your favorite small-plate restaurant. Eat food to earn points!
Each type of food has its own special minigame. The higher the cost of the food, the harder the minigame!
When time is up, you're scored based on how much money you spent. Try to eat as much as you can!
Yugen is a 3D Horror exploration title developed as the final project for a Game Design course at the University of Portland along with Hailee Kenney, Sam Golloway, Stan Peck, and Janel Raab. It was developed in C# and Javascript using the Unity engine over the course of six weeks. I served as the team lead and the head designer, as well as a programmer. I designed and modeled the interiors of a number of the houses. I also implemented sanity effects, enemy AI behaviors, death, and the sprinting mechanics. I also served as the writer.
In Yugen, you explore an abandoned Japanese village in an attempt to discover what happened to it.
Collect clues about the fate of the village and its inhabitants, and then use logic to combine the clues and gain new information.
You must also avoid horrifying monsters wandering the houses in the village, against which you have no defense.
Make sure to maintain your sanity, or suffer the consequences!