Senior Systems Engineer
Amazon Web Services
January 2015 - Present
Senior Site Reliability Engineer
July 2013 - December 2014
  • Server configuration management via Puppet
  • Advanced MySQL replication hierarchies
  • Hierarchical replication Postgresql deployment
  • Replication integrity testing via pt-table-checksum
  • Automatic backup validation infrastructure
  • System orchestration via Ansible
Senior DevOps Engineer/DBA
February 2010 - June 2013
  • Server configuration management via Puppet
  • Tomcat high availability via Keepalived
  • Wrote Java MySQL proxy with query cache support
  • Squid based reverse caching proxy for assets
  • Multi-master MySQL setup over 10 servers
  • Monitoring via Nagios (NRPE) and Diamond
  • Networking improvements targeting latency
  • Backup, archival, and validation procedures
  • Improved queries, indexes, and database schema
  • Setup and administered firewalls using Shorewall
  • MySQL replication integrity testing
  • Advanced OpenVPN deployment
  • Capacity planning, Bottleneck identification
  • Schema change timing and testing utility
  • Database query log processing in Python
  • PXE kickstarting of CentOS servers
  • Subversion server administration and replication
Senior Development Engineer
Adapp Solutions
June 2009 - February 2010
  • Integrated Jquery based front-end elements
  • Wrote object cache layer backed by Memcache
  • Developed schema upgrade and management tool
  • Developed database schema verification tool
  • Developed self contained deployment code
  • Enhanced error reporting code
  • Co-lead agile development team of 5 developers
  • Improved 'brand' creation time by a factor of 20x
  • Improved core CakePHP libraries
  • Developed peer code review process
  • Standardized development and staging environments
  • Added internationalization features
  • Audited and repaired production database schema
  • Improved developer debugging tools
  • Audited and tuned production MySQL servers
  • Improved Nagios health check scripts
Lead Developer
Name Intelligence
June 2008 - June 2009
  • Managed team of 5 developers
  • Development of staging process
  • Lead the design of a middle tier unified API layer
  • Reduced avg page time from 4.4 seconds to 1.5
  • Refactor to reduce memory footprint
  • Development of customized live auction system
  • Deployment scripts to standardize code roll outs
  • Designed an site resource limits system
  • Enhanced shared security framework
  • Implemented per user 'click stream' tracking
  • Refactor billing system to increase reliability
  • Utilized SEO improvements to increase placement
  • Increased ad revenue by following UX research
  • Wrote Memcache object cache layer
  • Integrated Jquery based front-end elements
Silicon Mechanics
March 2005 - June 2008
  • MySQL multi-master replication setup
  • Wrote core PHP web application libraries
  • Code architecture planning and implementation
  • Clarify existing code to reflect best practices
  • Convert existing procedural code by objectification
  • Added Web 2.0 functionality with PrototypeJS
  • Performance tuning in critical areas
  • Solved process inconsistencies
  • Architecture planning to satisfy growing needs
  • Addition of redundant servers for critical services
  • Off site backup coordination and restoration plans
  • Networking architecture implementation
  • Introduced the factory design pattern to the code
  • Managed help desk technician
  • Administrated CentOS PXE/Kickstart servers
  • Administrated Mitel VOIP system
  • Setup and administered firewalls using Shorewall
Application Developer
Reprint Management Services
Jan 2003 - March 2004
Tech Overview: PHP, MySQL, VB 6
December 2011 - Present

Diamond is a python daemon that collects system metrics and publishes them to Graphite (and others). It is capable of collecting CPU, memory, network, i/o, load and disk metrics. Additionally, it features an API for implementing custom collectors for gathering metrics from almost any source.

2013 - Present

Organizer for the Seattle GNU/Linux Conference at SCCC.

Java MySQL Proxy
Released June 2012

A high performance daemon that sits between your client and MySQL server(s) that can monitor, analyze or transform their communication. Written with a modular, threaded structure, you can write plugins to convert queries, update/modify result sets, redirect traffic, automatically shard, anything you want.

Released December 2011

An advanced, but easy to install, UI for pt-query-digest or mk-query-digest.

MythTV - Mythweb
February 2007 - February 2012

Mythweb provides a front-end for scheduling and managing recordings on your Myth-Box from a web browser located on another machine.

An intensive one-day workshop for MySQL database administrators and systems administrators that covers InnoDB and XtraDB, the most popular storage engines for MySQL.

  • Learn to be systematic about fixing performance problems
  • Optimize query performance
  • Understand the basic operation of InnoDB - including how data is stored on disk and in memory
  • Understand what InnoDB does internally when data is written, and how features like the transaction log files and undo space work
  • Understand how key features of InnoDB work, including the buffer pool, transaction logs, clustered indexes, insert buffer, adaptive hash, double write buffer
  • Learn to read diagnostic Information from InnoDB and make informed decisions while tuning configuration
  • Discover how XtraDB, and the Percona and Google patches will provide you better diagnostics and performance
MySQL 5.0 Performance Tuning
MySQL AB, March 2007
  • Develop a tuning strategy
  • Display knowledge of MySQL architecture
  • Display knowledge and ability to use diagnostic tools
  • Display knowledge and ability to use tuning tools
  • Write queries against the INFORMATION_SCHEMA database and be able to decipher the meta data obtained
  • Understand the relational database model and both the positive and negative implications on performance
  • Display, decipher and edit server configuration variables to improve performance of your applications
  • Display and analyze status variables to ensure that their applications are utilizing the settings in the most effective manner
  • Write queries that take advantage of the MySQL 5.0 performance enhancements dealing with queries and indexing
  • Decide which of the storage engines could be used in their specific application needs
  • Evaluate the application architecture for efficient design, structure, caching, number of connections and other factors affecting performance
  • Evaluate hardware and OS for effects on performance
  • Evaluate techniques for loading data into the database and effects on performance