Professional History
Porch Senior Software Engineer September 2014 - present
Java / Hibernate / REST / JSON / DropWizard / Handlebars
Seattle, WA
Implemented back-end JSON APIs for Porch's mobile applications, including new business logic and database entities.
Cobalt (now called CDK Global) Senior Software Engineer December 2010 - August 2014
Java / Spring / JPA & Hibernate / AOP / REST / SOAP / TDD / JUnit / Mockito / Maven / Wicket
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.
Highlights:
  • 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 occasional interactive 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.
QL2 Senior Software Engineer January 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).
Highlights:
  • 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.
Cirqe.com Senior Software Engineer September 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.
Highlights:
  • 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.
QL2 Senior Software Engineer January 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).
Highlights:
  • 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 off April 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.
Highlights:
    • 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 Amazon.com.
    • Devoted much more time to recording and mixing a full-length album for my band.
AdRelevance (Neilsen/Netratings) Senior Software Engineer June 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.
Highlights:
  • Distributed queues - Replaced a fragile messaging system (based on RMI) with an extremely reliable distributed queuing system. This was in 2000 before JMS systems like ActiveMQ were popular, so I wrote it from scratch. This scalable design provided the backbone for our distributed architecture with a pool of about 30 Linux machines.
  • Browser emulation - Starting with 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 independently.
MCI Worldcom Senior Software Systems Engineer I November 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.
Highlights:
  • 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 Worldcom Senior Systems Analyst November 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.
Highlights:
  • 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 Group Programmer May 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.
Highlights:
  • Graphing - Developed the graphing subsystem for Power Investor, a large desktop financial application.
  • Industrial measurement - Worked on the user interface for MicroVu InSpec software, an industrial microscopic measurement system.
Inner Circle Digital Arts Programmer/owner Summer 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 International, Inc. Associate Programmer June 1994 - May 1995
C++ / MFC / C
Lexington, KY
Co-developer of the Windows 95 version of MarkVision, Lexmark's flagship bi-directional printer software (written in C++/MFC). Developed a Windows-based driver-installation utility in C, which was shipped with most of Lexmark's printers at that time.
The Dow Chemical Company Analyst June 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 division has since been sold to another company and the software is still in use 23 years later. Telecommuted from Fall 1992 until Spring 1994.
Michigan Technological University Graphics Laboratory Student Programmer April 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.
Other Web Development
Java / JSP / JSTL / Javascript / jQuery / AppEngine / Photoshop
Highlights:
  • App Engine - The site is hosted on Google App Engine, and is a true "mashup" where most of the dynamic content is pulled from other services. It makes extensive use of JSP tag files.
  • Integration with Blogger.com - I use Blogger.com to post blog articles and for storage, but wrote my own code for displaying them seamlessly within my site. I use the Google Data APIs to fetch the articles on-demand, and Memcache to make them available to all server instances for the next few hours.
  • Integration with Picasa - I use the same pattern for photos - I use Picasa to post and store photos, but display them seamlessly in my site with my own custom gallery. Like the blog posts, this feature uses the Google Data APIs and Memcache.
  • Integration with Twitter - Same pattern again for status updates - I use Twitter to post and store tweets, but display them with my own custom UI in my site. I am using Twitter4J to fetch the content with OAuth authentication, and cache results using Memcache.
  • Integration with Delicious - My Links page shows my most recent bookmarks from Delicious. Unlike the other mashups above, I implemented this purely in JavaScript and it has no server-side component.
The McCabe Group January 2010 - present
Java / JSP / JSTL / AppEngine / Photoshop
Completely redesigned and reimplemented my father's corporate homepage. The site is hosted on Google App Engine, written in Java using many custom JSP tag files. I used this project as an opportunity to learn the 960 Grid System.
Education
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