Resume
Summary
Developer with 9+ years of experience building flexible solutions in various industries. Diverse experience spanning enterprise backend services, embedded systems, frontend web dev, and engineering management. Strong analytical and interpersonal skills, with a penchant for statically typed functional programming.
Skills
- Languages: Haskell, Bash, and C++ are my strong suits. I have prior experience and general familiarity with C, TypeScript, Javascript, HTML5, CSS, Java, C#, Python, and PowerShell/Batch.
- Paradigms: Purely functional, declarative, stream processing, reactive, event-driven, imperative, and object-oriented.
- Databases: SQL (PostgreSQL, sqlite, MySQL), NoSQL (HBase, MongoDB, RethinkDB)
- DevOps: Generally familiar with Kubernetes, VMware vSphere, Jenkins, Travis CI, AWS, Azure, Puppet, and Vagrant.
- VCS: Proficient with git. Familiar with SVN, Mercurial, and Perforce.
- Environments: macOS, Ubuntu Linux, Windows 10, Windows Embedded Server 2009, Windows XP Embedded
- Methodologies: Kanban, scrum, pair/mob/extreme programming, waterfall
Experience
Lumi
Senior Software Engineer 2 (06/2022 to Present)
More information coming soon!
SimSpace
Senior Software Engineer 2 - Backend (11/2020 to Present)
By 2020, SimSpace had again grown to the point where we needed to reconsider our engineering team organization. Engineering was redivided into teams of about ten people each, but this time the team composition was cross-domain across backend, frontend, and UX. Each team had an overall lead who was supported by a technical lead for backend and a technical lead for frontend. In my new team, I took on the technical lead role for backend. This role let me focus in on honing my software architecture skills, where I collaboratively defined feature designs with UX/backend/frontend and empowered the team to execute on those designs. Some significant contributions our team made included building out a framework to unify various event models (i.e. live-action events, product-scoring events, etc), and an automated content import process.
As of early 2022, I joined a new team dedicated to software reusability. Our team focused on building libraries and components that enabled engineering as a whole to move faster. Some of our backend-specific work included externalizing feature flags to a SaaS product and refining a service intended to be the single service for all WebSocket messaging from the backend to the frontend.
Senior Software Engineer - Backend (09/2018 to 11/2020)
As of September of 2018, I had accrued more technical and non-technical responsibilities at SimSpace. As the product to deploy cyber ranges came to fruition, SimSpace began to acquire contracts with various customers. One of these customers was pivotal to SimSpace’s growth in the coming years, and at the end of 2018, I became the primary technical liaison between SimSpace engineering and this customer. I regularly attended planning sessions and demonstrated our latest software updates to this customer along with SimSpace’s CTO and Director of Engineering. I also helped define the release process for this customer, refined/executed on this process for over a year, and ensured their ops/testing teams were able to apply our releases smoothly.
By late 2018/early 2019, SimSpace engineering had grown to the point
where we needed to split into smaller teams. I began leading a team
of five other backend engineers, serving as both the technical lead
and manager for the team. During this time, our team implemented
multiple new web services, providing functionality such as a searchable
index of platform content backed by PostgreSQL full-text search and
hierarchical organizations of users backed by the ltree
PostgreSQL
extension. While working on new services, we developed and iterated on
an approach to package structure with a strong focus on modularity,
minimizing dependency footprints to keep build times short, and testing
as much surface area as possible via leveraging temporary databases. Our
approach eventually inspired the recommended architecture for greenfield
web service work at SimSpace.
Software Engineer - Backend (01/2018 to 09/2018)
In January of 2018, I started at SimSpace as an individual contributor on the Haskell backend. At this time, engineering was under twenty people, and our focus up through the summer was largely to enable users to deploy cyber ranges (large-scale realistic networks of virtual machines used to train/evaluate cybersecurity professionals) at the push of a button.
Considering engineering was so small during this period, all of us collaborated very closely with each other. This was instrumental to my development as a Haskeller, as I regularly worked with colleagues who already had years of production Haskell experience.
Catalina
Programmer/Analyst - Ad Platform (06/2016 to 12/2017)
In June of 2016, I transitioned from the In-Store team to Catalina’s ad platform team. The ad platform aimed to fundamentally redefine how Catalina operated with realtime execution via geographically-distributed cloud computing and highly flexible offer rendering. Along the way, the ad platform simplified offer setup and opened the door for omni-channel opportunities (i.e. in-store, mobile, web, home delivery, etc).
This team was structured like a startup and we each worked on all areas of the ad platform, from the backend Java codebase, the HTML5/Javascript/Less web interface, the Node.js rendering component that runs alongside the In-Store software, to the Puppet scripts that provision the infrastructure in AWS and Azure. We used scrum on a two-week release cycle and deployed all releases via Jenkins. The ad platform leaned heavily on open-source projects, in particular, the Apache ecosystem. We worked with Hbase, Solr, Kafka, Hadoop, and Hive every day.
Programmer/Analyst - In-Store System (08/2015 to 06/2016)
I continued working on the In-Store system at Catalina and became the lead developer for the In-Store production support team. In this time, I significantly improved Awards’ performance/debuggability, devised a branching model to better fit Awards development, held sessions for the team where I taught the fundamentals of git, wrote multiple utilities to enhance developer and tester productivity, established group code reviews, and was the main liaison for the team’s offshore developers.
Programmer - In-Store System (06/2014 to 08/2015)
I began at Catalina as a programmer for the embedded In-Store system. Catalina has over 30 years’ experience offering a personalized digital media network for retailers and the consumer packaged goods industry. The In-Store system, known as Awards, is a collection of over 100 C++ applications and Object REXX scripts that run unattended on Windows Embedded Server 2009 at roughly 47,000 stores around the world. Awards communicates with Catalina’s backend, the store’s POS terminals, and the store’s printers to deliver unique offers to consumers right as they check out.
As a developer on the Awards team, I primarily worked on new features via scrum. Awards has minimal system requirements, so this position once again reinforced in me the idea that performance matters. A solution to an Awards problem must work just as well in a 2-lane US convenience store as an 100-lane store in Japan.
In June of 2015, I visited Microsoft’s Redmond campus for a week-long hackathon to get Awards running on Windows 10 Embedded.
CAE USA Inc.
Software Engineer - Sensors (05/2013 to 05/2014)
At CAE, I worked in C and C++ on the radar and underwater acoustics subsystems for flight simulators and weapon systems trainers. Areas worked include target detection, landmass processing, line of sight, UDP/TCP messaging, acoustics state management, and entity prioritization schemes. I learned a great deal about performance here, much like my time at Applied Research Associates. More importantly, this job often had me interfacing directly with the US Navy to hash out requirements and demonstrate recent changes. This was critical for the development of my soft skills. Communicating, receiving feedback, and knowing when to be assertive versus adaptable are just as important in software development as writing code. I also learned the ins and outs of the waterfall methodology here.
University of Central Florida
Tutor (05/2012 to 05/2013)
While working on my undergraduate degree in Computer Science, I tutored for graduate- and undergraduate-level courses, such as Graphics Programming under Dr. Sumanta N. Pattanaik, Operating Systems under Dr. Mark Llewellyn, and Web-based Information Technology also under Dr. Mark Llewellyn. Additional responsibilities included evaluating exams and assignments.
Applied Research Associates
CS Intern (03/2011 to 01/2012)
This was my first professional dev position and taught me why performance matters, how abstraction reduces cognitive load, and that supporting multiple platforms is challenging. I wrote C++ for ARA’s SHADE product, the Shared Architecture for Dynamic Environment. The US Army uses SHADE to provide extensible dynamic environment modeling in training simulations.
Open Source
context
https://github.com/jship/context
context
is a Haskell library providing thread-indexed storage around
arbitrary context values. The interface supports nesting context values
per thread, and at any point, the calling thread may ask for their
current context. I gave a talk on this library at the 2020 Haskell Love
conference, viewable here: https://www.youtube.com/watch?v=Ujx4a8xVOSM
s3k
s3k
is a bash
script that sits between the Haskell developer and
stack
, aiming to improve productivity when working in monorepos. It
provides concise package/target selections via extended regular
expressions and aliasing invocations.
ld-wrapper-macos
https://github.com/Simspace/ld-wrapper-macos
ld-wrapper-macos
is a bash
wrapper script around the system
ld
linker for macOS Haskellers to work around Mach-O header size
limitations imposed by macOS Sierra and later. The header size
limitations were a significant blocker for engineering at SimSpace while
we were on GHC 8.2 and this issue plagued other Haskell shops as well.
rosebud
https://github.com/Simspace/rosebud
rosebud
is a Haskell library capturing functions and patterns often
reached for when working with Data.Tree
from the containers
package.
CpperoMQ
https://github.com/jship/CpperoMQ
CpperoMQ
is a C++11 binding for the 0MQ (libzmq) C library. It was
one of the first C++ libraries to offer type-safe, highly-composable
multipart messaging and provides a flexible, mixin-based means of
defining socket types.
Education
University of Central Florida (08/2009 to 04/2013)
- Degree: Bachelor of Science in Computer Science
- Minor: Mathematics
- Societies: Upsilon Pi Epsilon, Burnett Honors College, Golden Key International Honour Society