David Bushong
Career Goal:
To work with smart people leveraging awesome tools to get Important Work
done delightfully well.
Expertise:
- Software Development Python, Ruby, TypeScript, JavaScript, and Shell
most recently, but a variety of things (C, Perl, Java, PHP,
Haskell, CoffeeScript and more) in the past. I have extensive experience providing
and consuming Web, REST, and GraphQL API services over HTTPS, as well as
building CLI tools for automation and deployment of services and libraries.
I am proficient with a very wide range of command line utilities,
revision control systems (legacy and distributed), shells, compilers, and
editors.
- Server Architecture Creating, modularizing, managing, and
iterating on designs for horizontally scalable, high-traffic,
high-availability infrastructure, operating across heterogeneous
language environments.
- Web Development (HTML, TypeScript, JavaScript, CoffeeScript,
(S)CSS, AJAX, CGI, Perl, Ruby, PHP, Python, (P)React, and back-end integration
using Oracle, MySQL, SQLite, PostgreSQL, Memcached, Redis, ElasticSearch,
and MongoDB through Embperl, EPerl, and Mason with mod_perl,
eRuby with mod_ruby, Rails 0.x - 6.x, Express with NodeJS, DropWizard,
and Plone with Zope). I also have some image editing experience using
The Gimp, and have additionally developed various back-end image generation
tools (dynamic custom web-based chart/graphic creation and complex image
creation and processing using ImageMagick).
- Release Management (CVS, Subversion, git, Mercurial,
GitHub, Vagrant, Docker, Kubernetes, Helm) I have
written release scripts using rsync and other tools to efficiently
distribute trees of web data and code, as well as provided for
near-zero-downtime rollback where possible. I variously designed
or adopted numerous branching and tagging schemes for releases,
development, and maintenance work. I have managed code releases to
custom host, EC2 cluster, Heroku, and Kubernetes application servers
and asset releases to various CDN services. I have built CI-based
deployment pipelines from the ground up on Jenkins, and managed
deployment of docker containers as Kubernetes pods on AWS. I have
optimized existing Docker build stacks to reduce images sizes by 85%.
- Systems Administration
I have an extensive background in systems administration of various
Unix-like systems (Multiple Linux distributions, FreeBSD, Solaris,
NetBSD, Digital Unix, and Ultrix). I'm comfortable with package
managers, shared library management, Docker containers, and other
basic systems-management tasks.
- Desktop Consulting working knowledge of MacOS, Windows, and
Unity/Gnome Desktop environment on modern Linux distributions.
Work Experience:
- 10/2022 - Present
Software Engineer on the Synchronizer Team at
NexHealth.
I'm working to increase developer velocity and help NexHealth realize its goal
of providing world-class health record interoperability services. I have
built custom developer tooling, both web and CLI, architected synchronization
schemes and APIs, proposed coding and framework standards, and implemented
and evangelized various best-in-class third-party tooling and practices,
all with the end goal of unblocking NexHealth Developers to produce reliable
products as quickly as possible.
- 1/2016 - 6/2020, 8/2021 - 10/2022
Senior, Staff, and Senior Staff Engineer for
Groupon, on the Interaction Tier
(customer-facing web architecture) team. I variously architected,
implemented, and maintained tooling and code frameworks that power
virtually all public-facing Groupon web traffic around the world.
I built and maintained tooling and lead a small team to manage 200+ GitHub
repositories, more than 100 NPM packages (public & private), and
deployment automation for 70+ different internal microservices running
on NodeJS, ultimately targeting Kubernetes on AWS.
- 6/2020 - 8/2021
Senior Staff Engineer at Transposit.
I worked across the stack to ensure an amazing developer experience.
I architected and contributed to development on a number of their recent
features, including a developer-focused CLI, customer-facing realtime
aggregated metrics, and a schema-driven parameterized attribute storage
system. Outside of project work, I proposed, designed, and implemented
internal automation to streamline developer environments and tooling.
- 12/2014 - 12/2015
Team Lead and Engineering Manager for Groupon,
on the Redemption Engineering team. I have served as a
full-stack engineer, systems architect, team lead, and engineering
manager. Our charter is to make the redemption process seamless,
painless, and wonderful.
- 2/2013 - 12/2014
Senior Development Engineer for Groupon, working on improving their deal redemption rate.
I have contributed to Groupon's novel NodeJS front-end web architecture,
as well as architected and implemented portions of a next-generation
caching API aggregation proxy. I rewrote and took over development of
Groupon's primary web tier deployment tool for NodeJS applications,
developing it into a promises-based, modular, multi-thousand-line
CoffeeScript server management toolset.
- 11/2011 - 2/2013
Engineering Team Lead for Britely,
a service focused on providing beautiful ways to read, learn, and
remember. I scoped, managed, and implemented fast-turnaround
prototypes with scalable architecture considerations, using
CoffeeScript, SCSS, HTML, MongoDB, Rails, NodeJS, Express, and numerous
cloud services.
- 3/2008 - 11/2011
Senior Web Developer for MashLogic,
a Silicon Valley startup focusing on enhancing the end-user
browsing experience. I worked with every aspect of the service,
from browser add-on JavaScript to front-end JavaScript, CSS, HTML,
and image-editing through backend C++, Perl, Rails, and Java web
services, through EC2 systems administration.
- 3/2005 - 3/2008
Senior Web Applications Engineer
for AvantGo, the service
for mobile content distribution owned and operated by
iAnywhere, Inc., a
subsidiary of Sybase, Inc.
I worked with a small team designing new applications and backend support
infrastructure for AvantGo's 7 million user advertising-supported
service.
- 11/2002 - 3/2005
Senior Systems Administrator / Web Developer
for Media Net Link, Inc., a
consulting firm in San Ramon providing "web services for business".
I worked in network architecture, server security, and
web applications development.
- 4/2002 - 11/2002
Independent Consultant providing systems administration and
software development services to a range of clients.
- 11/1998 - 4/2002
Systems Administrator/Web Applications Developer for
Euphorion (formerly DataMain), Inc. (No longer in business), an
e-business solutions provider based out of Milpitas, CA. I handled
planning, consultation, and implementation of security and high
availability networked solutions and did part-time programming of
fast turnaround, resource efficient, web-based applications.
Additionally, I managed much of the internal IT infrastructure
necessary to provide transparent, secure access to intra and extranet
data.
Projects:
- esfixup
- A command-line utility to perform multiple automated code transforms
for JavaScript or similar languages:
- CoffeeScript → JavaScript: starting with decaffeinate & adding advanced cleanups
- Modern JS features: convert legacy code to use modern syntax or library features
- Lodash removal: converts unnecessary lodash code to modern JS equivalents
-
phy conversion: ports JSX & legacy h() calls to use the
phy library
- JavaScript → TypeScript: converts JSDoc-contained type hints into their TS equivalents
- ...and more
Used: JavaScript, NPM
- GitHub CLI Extensions: bulk-pr
and grep
- Extensions for the official GitHub CLI
to support opening automated PRs against multiple repositories and performing
shell `grep`-style searching. These started their lives as part of a
multi-command `gh` CLI internal to Groupon, and were Open Sourced
to be compatible with the new official `gh` CLI.
Used: TypeScript
- Git Workflow CLI
- A git plugin (git wf) for managing a scalable branch/release
workflow and automating common GitHub-related flows (creating feature
branch from existing branch, opening PRs against proper parent branch,
cleaning up afterwards.
Used: JavaScript, NPM
- Automated Workflow Provisioner
- A system for automating various onboarding tasks to move between
deployment platforms at Groupon. Included a number of novel features:
- Modeled steps using flowchart metaphors in code
- Graphed the derived flowchart using Graphviz
- Automated steps using local CLI tools and remote APIs
- Tracked progress inside a master JIRA ticket for easy non-developer visibility
- All progress idempotent, making execution simple
- Created sub-tickets & PRs as necessary for non-automatable tasks
Used: JavaScript, NPM
- Napistrano
- A JavaScript/Promises-based deployment toolset used by most
web-tier applications at Groupon. I inherited and rewrote the project
from the ground up to be modular and handle a variety of error
conditions gracefully and safely.
Used: JavaScript, CoffeeScript, Mocha
- BetterLinks Server Backend
- A high-performance REST service which aggregated requests to multiple
backend data sources, including a C++ term extractor, Java semantic
relevance engine, third party advertising APIs, Squid HTTP proxies,
PostgreSQL database, Memcache, and more. I architected the basic backend
structure, specified and contracted out some of the early technical
components, and integrated all the pieces, including 2 iterations of
an extremely high-volume stats-management framework, monitoring, reporting, and release management.
Used: PHP, PostgreSQL, C++, Memcache, Redis, Java, JSON, Squid, Varnish, nginx, CRUSH tools, Hive, Tokyo Cabinet, EC2, Apache, rrdtool, Munin, Nagios, SVN, Haskell, Perl, Bourne Shell, Avro
- SmartLinks/BetterLinks Browser Add-on
- A streamlined version of the MashLogic add-on, the BetterLinks add-on
did only link injection, but supported Chrome, Firefox, and MSIE 7+.
The SmartLinks variant had to be a resuable, injectable codebase that
could be included in other Firefox or Chrome add-ons, manage robust
stats collection, and fail gracefully. I worked on all versions, and
architected the message bus system needed to do secure communication
between the various privilege layers of the Chrome extension.
Used: JavaScript, JSON, CSS
- MashLogic Browser Add-on
- Once described as a "swiss-army knife for the web", I worked on the
architecture for this multi-purpose browser add-on. The final version
had an installable sub-module architecture which interfaced with custom
web-pages via backchannel messaging, and supported a number of modules,
including currency convertion, unit conversion, Wikipedia linking,
ad-removal, and more. Used: JavaScript, CSS
- Mason Components for AJAX
- I gave a 45-minute presentation at OSCON 2006 on how to
use Mason components to
build AJAX applications through good design and effective code reuse.
Used: HTML::Mason, JavaScript, S5
- AvantGo for RSS
- This feature allows RSS feeds to be synchronized to a handheld device for
offline viewing. Challenges included the need for extensive, multi-level
caching for performance and to avoid overfetching feeds from sensitive
RSS providers, parsing of often poorly formatted data, and finding ways
to provide easy implementation of the feature in the existing server
framework.
Used: Perl, HTML::Mason, JavaScript, MySQL, Memcache, RSS
- AvantGo Travel Tab
- The AvantGo Travel Tab feature allows PDA users to pull down an offline
cached copy of their travel itineraries, as well as weather, maps, and
city guide information (restaurants, attractions, etc.) pertinent to their
travel destinations. Challenges included retrieving and normalizing
data feeds from various Travel Providers, as well as integrating numerous
other data types into an efficiently downloadable and navigable UI.
Used: Perl, HTML::Mason, JavaScript, MySQL, Memcache, XML, SOAP
- Wordsy
- Wordsy is a playalike to the Yahoo! "TextTwist" game, but implemented
entirely using AJAX, DHTML, and a simple Perl backend, integrating a
third-party Java applet for optional sound support.
Used: Perl, JavaScript
- Dogtivities
- I originally wrote the PHP Event Calendar backend for this for use with
Danville.com. For Dogtivities (with
permission from Media Net Link), I
rewrote the code to be more modular and to cater to the specific needs of
the site.
Used: PHP, MySQL
- Baagle Desktop Search
- Built in a weekend on a dare, this is a workalike to Google Desktop
Search that works on UN*X systems. It uses existing Open Source indexing
and conversion software, but provides an easy-to-use web frontend to access
the results, without the need for a separate webserver.
Used: Perl
- Floating Sheep
Wishlist
- I designed the backend database schema and core logic for this generic
wishlist system. Interesting features include: heuristic page scraping,
hidden automatic "learning" customization of some interface features to
the individual user, a simple generic PHP PearDB abstraction layer-based
database session storage layer, a HTML::Mason-like args() functionality
to provide register_globals-like simple access to variables in a secure
fashion, and a reuse of my styled-font image generation and caching system.
Used: PHP, MySQL
- AthenaRMS
- I worked on the 5.0 Open Source release of the Athena Request
Management System software, performing a complete security audit. I wrote
the installation system and wrote the release management scripts. I
implemented some of the advanced configurability features for the 5.1
release, and worked on an upgrade/XML data transport
import/export utility.
Used: PHP
- XML::Aggregator
- This system allows you to extract content from any unstructured
data source (e.g. a website) and publish it to any XML DTD you specify in
an automated manner. Great for extracting real estate listings, job
listings, RSS news feeds, or just about any sort of repetitive data whose
format you can't control.
The core module is Perl, the web interface
uses HTML::Mason
- Euphorion Performance Tester
- Fully configurable custom load tester. Uses multiprocess communication,
locking, and database files efficiently to achieve and sustain a high
number of parallel connections to a webserver, simulating any sort of
user session desirable. Targeted towards evaluating application server
page (Java, Perl, ASP, etc) performance.
Used: straight perl
- Euphorion Client Extranet
- Working with the UI design team, built a complete extranet interface for
Euphorion's clients to securely access files, project member information,
and mailing lists. Features included: Windows filesharing access for
Euphorion staff, web upload capability for client, complete administrative
control via the web, no back-end database needed, all information
encapsulated in client directories, full per-client authentication and
external anonymity (no one client can see what the others are).
Used: HTML::Mason
- Mason Gallery
- My own take on automatic thumbnail generation: simply create a directory
and toss images to it under the /pics tree and they are automatically
accessible (no index.html or anything needed). Pages are cached
efficiently and only regenerated when necessary. Other features include
JPEG Exif data and thumbnail extraction, RSS feed, and simple search.
Used: HTML::Mason
- Comics Page
- A configurable, databased-backed, multi-user comics page system for
my private use. Contact me for a demonstration. Does many interesting
things with caching and failure management. Also provides an RSS
feed for use with rich aggregators.
Used: HTML::Mason
- Temperature Page
- This application combines a back-end cron job to gather temperature data
with a simple front-end graphing page.
Used: Ruby, Rails, RRDtool
Education:
UC Berkeley, Berkeley, CA.
Bachelor of Science Degree in Electrical Engineering and Computer Science
(EECS), Computer Science Emphasis, received 12/1998
Course-work included:
- Data Structures: emphasis on C++ data structures
- Machine Structures: emphasis on C and MIPS R3000 assembler
- Operating Systems: emphasis on threads and concurrency in C++
- Database Management Systems: emphasis on RDBMS
- Programming Languages and Compilers: emphasis on OO language design
- Foundations of Computer Graphics: emphasis on 3-D modeling.
Also see the project home page
- Components and Design Techniques for Digital Systems:
emphasis on efficiency in logic design
- Engineering Economics: emphasis of practical aspects of
engineering cost structures
- Software Engineering: emphasis on group dynamics and modular
design. Also see project
home page.
- Efficient Algorithms and Intractable Problems: emphasis on sound computer
theory