Professional Summary
I'm a software engineer with 20+ years of experience designing distributed
systems, developer platforms, and user-facing products. I specialize in
reducing complexity through thoughtful architecture, strong domain modeling,
and tools to help both end users and colleagues work more effectively.
Throughout my career I've repeatedly taken on ambiguous, cross-functional
problems spanning organizational boundaries: founding technical initiatives,
building platforms, mentoring engineers, and creating systems that continue
to provide leverage long after their initial implementation.
My experience spans startups, growth-stage companies, and large-scale
consumer platforms, with significant work in TypeScript, Scala, Rust, Ruby,
cloud infrastructure, data pipelines, and developer tooling.
An open-source
programming language and compiler designed to make advanced metaprogramming
and static analysis practical for everyday software development.
Please combines homoiconicity, extensive compile-time evaluation, powerful
type inference, and rich structure-aware analysis to enable deep correctness
guarantees without sacrificing expressiveness or ergonomics.
I've designed and implemented the language myself, including its parser,
typechecker, compiler, runtime, and supporting tooling.
No-code workflow automation and collaboration platform centered around a
reactive spreadsheet-like interface.
As the company's first hire, I helped shape the product from its earliest
stages while contributing across architecture, implementation, operations,
customer support, strategy, and product development. Working directly with
customers and founders, I helped transform an early concept into a
production system.
I designed and implemented major portions of the platform, including
third-party service integrations, workflow execution and rules engine
functionality, notifications, the sign up flow, and numerous other core
capabilities. The role required balancing long-term architectural decisions
with the fast iteration cycle of an early-stage startup.
A web server for content-centric sites that require some dynamic behavior
without the complexity of a full application framework.
Operator is designed to be flexible, making it easy to reuse existing
assets/scripts and avoid lock-in. It serves static files directly, but can
also serve dynamic content that is generated at request time by handlebars
templates or executables. Operator is written in Rust and uses the
Actix web framework.
So far I've done all design and implementation myself. The project is
open source.
A platform to empower product teams at Credit Karma to quickly build simple,
personalized, cross-platform user experiences.
I founded and later served as a technical lead on a cross-organizational
initiative to create a unified product platform shared across Credit Karma's
iOS, Android, and web surfaces. The platform addressed growing complexity
caused by duplicative platform-specific implementations, fragmented user
experiences, and increasingly-labyrinthine deployment workflows. I had a
central role in defining the architecture and aligning stakeholders across
teams, and I led the implementation of several major subsystems.
Key platform components included:
-
A cross-platform UI description language enabling teams to define
experiences once and render them natively across iOS, Android, and web.
-
A statically typed data access layer exposing user information through a
shared schema and abstraction model.
-
An orchestration layer supporting personalization, targeting, and dynamic
content generation.
As the platform matured, I spearheaded development of advanced capabilities
including machine-learning-driven layout and styling, WYSIWYG tooling for
non-technical content creators, and platform-wide analytics and performance
instrumentation.
The platform was ultimately adopted across dozens of teams and became a
foundational part of Credit Karma's product ecosystem, serving tens of
millions of users.
A bi-weekly class helping engineers become proficient Scala programmers.
I mentored more than 50 engineers over the course of this program. My
curriculum was a mix of theory and practice, with sessions usually
introducing a concept then showing how to apply it with examples from real
projects and live interactive coding sessions. I mostly covered
intermediate-to-advanced topics, but presented them in ways that would break
down mental roadblocks for beginners.
Topics included functional programming, concurrency/asynchronicity,
approaches to automated testing, type theory (including algebraic data types
and subtyping/variance), and basic category theory.
Infrastructure for Credit Karma to integrate with banks and debit accounts.
At Credit Karma there was a lot of discussion about how the product only
understood "half of the balance sheet" (debts and lines of credit—from
credit reports) and had little awareness of users' savings & cashflow.
This made many desirable product features impossible.
Shortly after joining the company I was selected to co-lead a
cross-departmental team to build a system for pulling user banking data and
making it available to product services.
I architected and led the implementation of a collection of services to
fetch/encrypt/persist bank account & transaction data, manage
credentials, receive webhooks, and publish notifications about certain
events. I also provided consultation for several product teams to help
deliver user-facing features leveraging this data.
A modern business intelligence pipeline leveraging Google Cloud Platform.
Kabam was a data-driven company and its business intelligence technology was
a critical tool for decision-making. KASQ encompassed Kabam's entire data
pipeline: streaming and batch-ingesting raw events,
validating/transforming/aggregating those events, calculating business
metrics, providing data to machine learning models, and pushing outputs to
visualization tools and third-party APIs. KASQ was composed of many
cooperating sub-components to handle these responsibilities; most were
written in Scala and made use of
Google Cloud
services such as BigQuery, Dataflow, and hosted
Kubernetes
clusters. By the end of 2016 KASQ was processing 10 million events per day,
with over 300TB of data stored in BigQuery.
I led development of major portions of KASQ, including data ingestion and
metrics to support user acquisition, enhancing concurrency across large
swaths of the pipeline to improve throughput, and a monitoring framework to
keep track of the system's health. I also contributed in smaller ways to
many other parts of the platform.
Automated infrastructure for a sharded MongoDB cluster on AWS.
I designed and built infrastructure-as-code for a MongoDB cluster with three
config servers, an administrative node running
mongos, and a configurable number of shards, each including a hidden secondary
responsible for taking snapshots.
The cluster was designed with a
"cattle, not pets"
mentality and was robust to failures. As long as each replica set had at
least one live member and there was at least one operable config server, the
rest of the cluster could go down without impacting consistency or
availability. All failover was completely automated, with replacement nodes
loading state from snapshots in order to prevent a costly full sync. Tools
used included Chef, AWS CloudFormation, and AWS CloudWatch.
A web-based platform for amateur & professional athletes to improve
their performance using video analysis and remote coaching.
I helped develop these projects from their beginnings as part of a very
small startup group. SkiClubZ.com was our proof-of-concept, focused on the
skiing and snowboarding markets. After a lot of iteration and user feedback
we had developed a solid set of tools and a way of packaging them into a
helpful, easy-to-use service. We refreshed the UI and simplified the feature
set to create
Sprongo, a
cross-sport solution based on the learnings from SkiClubZ.com.
The site's focal point was an HTML5-based video tool with variable rate
slow-motion, video overlays, split screen, frame-stepping, drawing, and
timestamped in-video comments. Because the HTML5 video API was still young
when we developed these features, there were lots of workarounds for browser
inconsistencies in order to deliver the best experience possible to each of
our users.
Since the company was so small I did a bit of everything, but focused on
development, project management, operations, interaction design, testing/QA,
and user research.