PorchStaff EngineerSeptember 2014 - present Scala / Slick / Java / Kubernetes / DropWizard / Kafka
Seattle, WA
Highlights
-
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
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.
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 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).
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.
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.
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.
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).
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 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.
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.
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 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.
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).
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 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.
Highlights
- 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.)
C++ / MFC / C
Lexington, KY
Highlights
- 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.
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.
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.