Professional History
PorchStaff EngineerSeptember 2014 - present
Scala / Slick / Java / Kubernetes / DropWizard / Kafka
Seattle, WA
  • Advancing core platform, especially Scala tooling
  • Mentoring, teaching, interviewing, code review
  • Multi-channel communication platform (web, SMS, phone, email)
  • API integration with acquisitions and partners
Cobalt (now called CDK Global)Senior Software EngineerDecember 2010 - August 2014
Java / Spring / Hibernate / AOP / REST / TDD / Maven
Seattle, WA
Senior Software Engineer on Cobalt's digital advertising platform, the world's largest online automotive advertising reseller. The system publishes advertisements to Google AdWords, Bing Ads, and other channels on behalf of thousands of car dealerships internationally.
  • Team Lead - Team Lead for a group of seven engineers (three in Seattle, four in India). Participated in senior dev sessions which directed the architecture and culture across teams. Collaborated with product owners to shape projects, and created technical designs which could be easily completed by the multi-national team in 1-week sprints. Mentored teammates via example, code reviews, and presentations.
  • Reliable components - Developed systems that can interact with fragile external APIs and databases with a high degree of reliability.
  • Flexible components - Designed, coded, and tested systems which can quickly evolve alongside external change (API upgrades and deprecation, new business features, etc). Refactored large and business-critical legacy modules to break them into single-focus components and decouple them from external dependencies.
  • Code quality - Established a team culture with a huge focus on clear and efficient code which can be easily maintained. My team was the first in our department to strive for 100% test coverage on new code.
QL2Senior Software EngineerJanuary 2009 - December 2010
Java / Hibernate / JSP / Velocity / SQL / JavaScript / DWR / HTML / CSS / SOAP / Bash
Seattle, WA
QL2 makes tools which harvest and analyze large amounts of data from the web (for example airfare pricing).
  • Monitoring - Developed a monitoring/auditing system to expose metrics about system behavior and health. Events could be generated from Java or HTTP, republished to JMS subscribers, and monitored by Nagios.
  • Scalability - Identified and fixed many issues related to the growth of customer data. Enhanced our archival file system to allow multiple kinds of compression. Created a framework which simplified distributed queues, without being coupled to JMS or ActiveMQ.
  • JavaScript - Consolidated large blocks of copy/paste JavaScript code into reusable components. Developed tools for DWR which eliminated most of our boilerplate code (on both the client and server) for handling errors, busy indicators, and authentication. Ensured compatibility across IE, Firefox, and WebKit/Chrome/Safari.
  • UI - Extensive visual polish on many elements of the web-based UI. Improved performance of pages that worked with large datasets by delegating work to the back-end, smarter pagination, stream-based processing, etc.
CirqeSenior Software EngineerSeptember 2007 - December 2008
Java / Hibernate / JavaScript / jQuery / DWR / Spring / AOP
Seattle, WA
Cirqe was an extremely small startup developing a web-based email application with integrated productivity tools (file sharing, photo galleries, calendars, etc.) The app was an early example of a single-page application where all UI was rendered using JavaScript in the client browser.
  • Email system Java server-side - Implemented back-end email synchronization with external customer accounts (retrieve/store/view mail, folder/message sync on IMAP, folder management, message previews, filters, send outgoing mail with attachments and inline images, etc.)
  • Template/widget system - Worked on the core template framework which allowed us to bundle components as widgets, each with their own HTML, CSS, and JavaScript.
  • JavaScript optimization and browser compatibility - Focused on profiling the JavaScript codebase and tuning it for optimal speed. Became very comfortable developing code which runs equally well in the Big Three browsers.
  • Ajax and Reverse Ajax - We used DWR to expose Java server APIs to the JavaScript client. We also used Reverse Ajax ("Comet") to push notifications from the server to the browser.
QL2Senior Software EngineerJanuary 2005 - September 2007
Java / JSP / SQL / SOAP / HTML
Seattle, WA
QL2 makes tools which harvest and analyze large amounts of data from the web (for example airfare pricing).
  • Scheduler - Lead developer on a scheduling system which allowed users from around the world to create ad-hoc & repeating jobs. Developed SOAP & REST APIs to augment the web-based UI. Implemented a system where jobs could be paused if they exceeded certain limits (bandwidth, input count, output count, times of day, etc.).
  • Database framework - Implemented a simple ORM framework that mapped database records to Java objects.
  • Customer support system - Developed an issue-tracking system which unified customer-facing support requests with internal triage and developer bug tracking.
Intentional time offApril 2004 - January 2005
After 13 years of uninterrupted work, I took an extended leave so that I could devote more time to outside interests. I had saved up enough money to do this responsibly, notified my employer six months in advance, and left the company on good terms with a very stable product.
    • Finished a 60-minute documentary DVD about a Seattle band's northwest tour in 2002.
    • Rewrote my personal website and photo gallery from scratch.
    • On-stage/back-stage photographer for the Seattle Music Fest at Alki beach.
    • Product photography for a local reseller on
    • Devoted much more time to recording and mixing a full-length album for my band.
AdRelevance (Neilsen/Netratings)Senior Software EngineerJune 2000 - March 2004
Java / JSP / SQL / DOM / Crawlers / Advertising
Seattle, WA
Worked on the AdRelevance crawler, which detected advertisements in online web properties. AdRelevance was considered the most accurate and comprehensive service for measuring and reporting on online advertising. For the last two years of my tenure, I was the lead engineer on the system.
  • Distributed queues - Replaced a fragile messaging system (based on RMI) with an extremely reliable distributed queuing system. This was in 2000, before off-the-shelf messaging systems like ActiveMQ or Kafka were popular, so I wrote it from scratch. This scalable design provided the backbone for our distributed architecture with a cluster of about 30 Linux machines.
  • Browser emulation - Based on Rhino, I created a browser/DOM layer to emulate features expected by JavaScript ads (Document, Window, popups, dynamic HTML, cookies, referencing of other windows, etc.)
  • HTTP - Implemented enhancements and countless bug-fixes in our HTTP library dealing with cookies, compression, header management, proxies, and performance.
  • Testbed - Created a simple web-based UI to test the crawler against external websites and show its results. This was so informative that non-developers were easily able to diagnose most typical problems on their own.
MCI WorldcomSenior Software Systems Engineer INovember 1998 - June 2000
Java / Swing / JDBC
Colorado Springs, CO
Technical Team Lead for a large internal application. The team was migrating from Smalltalk to Java, and I was brought in to mentor them in that transition and write framework classes to ease that process.
  • Multi-tier - Developed a three-tier architecture, where client code invoked services on a middle tier that could optionally live on a remote machine.
  • Database framework - Developed a high-level database layer to decouple the application from the DB, providing a unified interface to three database flavors (Oracle, Informix, and DB2). The framework supported connection pooling and multiplexing (operating on multiple databases as if they were one).
The Maxim Group / MCI WorldcomSenior Systems AnalystNovember 1997 - November 1998
Java / AWT
Colorado Springs, CO
One of the primary GUI developers for a complicated contract-negotiation application. My role also involved the design and implementation of the core frameworks used by other members of the team.
  • Screen-builder - Worked on a visual editor that was used by the other developers to create fully-functional panels for the project without programming. Templates were stored in a database and individual fields were mapped to DB columns.
Software Implementation GroupProgrammerMay 1995 - November 1997
C++ / MFC / Windows
Houghton, MI
Consultant developing Windows applications in C++/MFC. With the exception of two brief trips on-site, I telecommuted for the entire duration of this job from my home in Michigan.
  • Graphing - Developed the graphing subsystem for Power Investor, a large desktop financial application.
  • Industrial Measurement - Worked on the user interface for MicroVu Inspec, an industrial microscopic measurement system.
Inner Circle Digital ArtsProgrammer/ownerSummer 1995
C++ / MFC
Houghton, MI
Moonlighting in the evenings, I developed a program for a local newspaper to capture and organize Associated Press newswire data from a satellite feed. (Prior to this, the AP news feed would stream to a dot-matrix printer and accumulate in large piles on the floor for manual transcription later.)
Lexmark InternationalAssociate ProgrammerJune 1994 - May 1995
C++ / MFC / C
Lexington, KY
  • MarkVision - Co-developer of the Windows 95 version of MarkVision, Lexmark's flagship bi-directional software.
  • Driver installer - Sole developer on the Windows driver installation tool, which shipped with most of their printers at that time. Created a Lisp-like scripting language to control the variety of installation steps.
The Dow Chemical CompanyAnalystJune 1991 - May 1994
C / Win16
Midland, MI
"Interface artist" and primary GUI programmer for the Camile TG process control system. This was developed in C for Windows 3.0, and used internally within Dow to help lab technicians automate complicated experiments using visual programming. The devision has seen been sold to another company and the software is still in use 25+ years later. Telecommuted from Fall 1992 until Spring 1994.
Michigan Technological University Graphics LaboratoryStudent ProgrammerApril 1990 - June 1991
C / SunView
Houghton, MI
Developed a GUI shell for ftp that made it easier for students to transfer files between their Sun workstations and an IBM mainframe. Produced and maintained utilities for printing CAD drawings on various plotters in the lab.
B.S., Computer Science, May 1991
Michigan Technological University Houghton, Michigan, USA
3.3 / 4.0 GPA Overall
3.5 / 4.0 GPA Computer Science