I open to opportunities that are in Portland, Oregon or opportunities
that allow me to work remotely.
Areas where I excel:
- Processes and Reproducability - I am very process oriented. If I think I am doing something that I will do again, I will write a program or perhaps make an ansible playbook. While I am able to fight fires, I would prefer to reduce the fires and have plans to deal with exceptional situations efficiently.
- Integration Expert - I learn new things efficiently and have used a lot of technologies. I will learn the source code of the applications developed in-house and will research the documentation and source code of technologies being used. Generally I am not too attached to a specific solution, but I will have strong opinions if I think a plan is likely to lead to problems.
- Systems Debugging - While I am able to develop applications, mostly my career has centered around helping others figure out what is wrong with their applications and systems. I can develop mental models of problems and efficiently isolate causes. This started during my days as a teaching assistant and is a place I naturally tend to take on work.
SKILLS
PROGRAMMING LANGUAGES
- Java - 15+ years experience going back to my college days of being a teaching assistant for a Java course to recent RESTful API development using the non-blocking webservers.
- Python - 10 years experience, including recent projects using Pyramid, Django, & Flask.
- Javascript - 5+ years experience developing APIs and UIs using modern frameworks.
- Scala - Spark streaming development to process Kafka streams of thousands of messages per second.
- C/C++ - Low level development of device drivers and device connectivity libraries.
- PHP - Facebook application development and maintenance.
- Objective C & C# - UIs for OSX and Windows respectively.
CONFIGURATION MANAGEMENT
- Ansible - Entire environments of Mesos, Kafka, Cassandra, Consul, and Zookeeper in OpenStack and AWS.
- Terraform and Packer - Packed images using kickstart files and then terraformed onto hundreds of servers.
- Saltstack - Custom formulas, reactor eventing, master & masterless, and full server deployment configurations for production and development.
- Puppet - Basic development environment configuration for vagrant VMs.
DATASTORES
- Cassandra - Multi-datacenter deployments.
- Redis, PostgreSQL, Mongodb - Development and operational experience across a variety of use-cases.
- MySQL - Development experience as well as experience managing a redundant production environment.
OTHER TECHNOLOGY
- Mesos - Deployed Mesos clusters and containerized applications for cluster deployment. Developed recipes to provide health checking and discovery through Apache Aurora and Consul.
- Kafka - Provisioned and managed multiple kafka clusters with replication. Developed applications that consumed topics of tens of thousands of messages per second.
- Spark - Streaming consumers in Java and Scala.
- RabbitMQ, ZeroMQ - For different projects that needed messaging.
- Websockets - Realtime websites backed by Java(vertx) or Python(gevent).
WORK HISTORY
Principal DevOps Engineer - Zynga (2.5 Years)
All aspects of stability and infrastructure to keep a highly profitable game running. This work spans the creation and refactoring of infrastructure, tuning systems for high availability and minimal downtime, detecting bad releases, debugging programming issues in releases, responding and fixing live issues, and generally being trusted to make high-pressure decisions to maintain the revenue stream.
- Detecting and debugging issues in the Java and PHP backends, sometimes quickly making decisions to recover the backend from failure as uptime is extremely important.
- Successfully tuning systems to avoid cascading failures such that most errors, including database failures, would auto-recover without intervention.
- Tuning systems to get more throughput from fewer resources, resulting in significant savings and increased stability.
- Using terraform to manage all AWS resources for a complex backend.
- Creating server images and containers for the game and services. Most containers were deployed using ECS with some exploratory kubernetes deployment using EKS.
- Managing the alerting and playbooks needed for SRE to respond to live issues in order to minimize the escalations to the game team.
- Developing Jenkins pipelines and managing Jenkins infrastructure to run needed deployment and maintenance jobs.
Senior Software and DevOps Engineer - Comcast (through Populus) (1.5 Years)
My work centers around automation, fault-tolerance, and scaling. I am currently working to provide highly available solutions in OpenStack and AWS environments where server and application failures efficiently recover. These solutions encompass both mechanisms to efficiently rebuild failed systems as well as mechanisms that allow applications to deploy on other servers as failures occur.
- Wrapped applications in containers to deploy using Mesos and Aurora. These technologies allow for health checking, recovery, and failover. The Mesos cluster was provisioned using Ansible on Openstack and AWS.
- Developed a means for applications to register with Consul. Through Consul, applications then provided DNS, discovery, as well as mechanisms to allow services like load-balancers to automatically update their configuration when an application deploys, scales instances, or fails. Consul was used along with Vault to distribute configuration and secrets to applications running in the Mesos cluster.
- Scaling work to improve throughput of applications. In some cases this required development and in other cases it required tuning services. Application refactoring included adding threading and asynchronous handling as well as caching to reduce bottlenecks.
- Jenkins pipeline development to provide CI/CD mechanisms to efficiently build containers and deploy. Jenkins also ran on the Mesos clusters and used GlusterFS to allow for a highly-available master that didn't have data tied to just one server.
- Monitoring work related to both auto-healing and notification. Consul was used to provide a highly available framework for managing nagios style alerting and notifications to systems such as Slack channels.
Independent Consultant and Developer (4 Years)
I worked for a handful of companies over the years and in some cases produced entire products. In other cases I enhanced and maintained large infrastructures to help companies meet performance needs as well as cost efficiency.
- Developed multiple Javascript applications that leveraged an API to a backend that I also developed.
- Developed APIs and backends for mobile application developers in Java and Python.
- Full website implementations for custom web applications.
- Managed large, multi-server infrastructures. Reduced costs by restructuring to more efficient configurations and in some cases rewriting the software to be more efficient.
- Developed a consumer application in OSX and Windows that would update the firmware on a USB device.
- Reworked the development workflow of multiple organizations to use configuration management for deployment with a variety of software requirements.
Senior Software Engineer - hi5 Networks (1 Year+)
I worked on games and API team, using Java. This required making a scalable API system for external developers to be able to release their games on hi5. Some of the issues I specifically took the lead on were related to providing a cross domain Javascript API library, analytics of game usage, and refactoring of code to increase stability and scalability.
Senior Software Engineer - Glu Games (3 Years)
My initial work at Glu was focused on efficiently porting applications and video games to the large amount of J2ME and Java phones on the market. Over that time period I produced significant improvements to the process by creating libraries and tools to offload manual work. Once Glu started to experiment with social gaming, my job duties switched to Actionscript, Javascript, and PHP development.
Technical Consultant - EPIUSE America (3.5 Years)
Originally I did development work for EPI-USE while I was getting my master's degree in Computer Science. This development focused on J2EE and specifically the JBoss application server. After I graduated, I became a technical consultant mostly developing customized applications for SAP based systems. I developed on SAP's Java web application server and SAP's ABAP based backend systems.
Intern for the iPAQ Engineering Team - Compaq (2 Summers)
My duties included the basic testing and debugging of source code, driver development, debugging tool creation, troubleshooting engineering/design issues, and research into ubiquitous computing issues. Most of my development was done in Embedded Visual C++.
Teaching Assistant - Georgia Institute of Technology (3.5 Years)
I TAed for two classes. CS1322 - Object Oriented Programming and CS2130 - Languages and Translation. CS1322 is taught in Java and CS2130 is taught in C. As well as my responsibilities that required teaching and giving feedback, I did significant course development. My duties required the development of instant feedback mechanisms that allowed students to submit their code online and get a report of the problems with their code.
EDUCATION
Georgia Tech - Masters in Computer Science
Specializations:
- Intelligent Systems
- Programming Languages
Georgia Tech - Bachelors in Computer Science
Specialization:
- Major: Systems
- Minor: Intelligent Systems, Theory