Owen Duncan Smith
Last updated: April 2019
I'm a senior software developer with broad experience in web and
server development, deployment and configuration management, project
leadership, technical presentation, and mentoring. I have particular
interest in back-end web services and technologies, domain-specific
programming languages, and functional programming.
Experience
Back End Engineering Lead,
Udacity, Mountain View, CA,
11/13–4/19.
I joined a small, elite team of engineers to help revolutionize
the world of online education, and over time helped grow the
Engineering organization to over sixty engineers. Much of my
work involved guiding and reviewing the work of team members,
at first across all back-end systems, later across several
core services and our PaaS infrastructure. Projects included:
- Complete backend support for paid course subscriptions.
- Build a processing pipeline for course video
archives and transcripts of course videos, as well as
additional documents that may be downloaded in the
classroom.
- Manage the systems that execute programming quizzes, and
completely overhaul the build and deployment pipeline.
- Build a prototype back-end service in Go for programming
quiz evaluation, including both REST and Kafka-based
interfaces.
- Develop and launch a back-end service for the Udacity
Connect mobile application.
- Operationalize a brand-new authentication service.
- Migrate and synchronize data from our legacy GAE
application to our new identity services.
- Write architecture proposals for converting authentication
from a custom JWT-based flow to OpenID Connect, and for
merging several authorization efforts into a cohesive,
multilayered authorization solution.
- Build a logging pipeline for our Cloudflare instance to our
Elasticsearch cluster, including log archival.
Work focused on core backend functions and PaaS infrastructure,
first using Python on the Google App Engine platform, then moving
to Go for back-end services and microservices.
Senior Member of Technical Staff,
PayPal, San Jose, CA,
10/03–06/13.
I started at PayPal as a nearly entry-level software engineer and
concluded as one of the leaders of the engineering and operations
organizations. Projects included:
- Implement an integrated EFT bank web flow into a brand-new
China product offering.
- Implement an email-based notification and approval system for
our emergency bug fix release process.
- Lead the development of the payment system for eBay Express.
- Redesign the payment platform for eBay Checkout.
- Jump over to the build team to help port the C++ codebase
to a new build management tool built around gmake.
- Design and execute large-scale code refactoring efforts.
- Migrate the development organization to a new operating system.
- Architect the overhaul and standardization of deployment tools
and process, first by introducing the use of
Puppet
for configuration management
Work has involved everything from front-end HTML templates to
back-end database layer design and implementation, from user-facing
applications to tools and infrastructure. Work on web applications
and refactoring done in C++, using largely proprietary libraries and
technologies. Work on internal tools done in Ruby, Puppet, Python,
bash, and Perl.
Independent Web and Computer Consultant, 2000–2003.
Design and implement a
web
site for a performing artist using HTML 4.01 and CSS1.
Developer Technical Support Manager, Be, Inc., Menlo
Park, CA, 2/00–8/00.
Director of a team of 3-4 engineers,
both on and off-site, in support of developers of the
first generation of media-savvy Internet appliances.
Investigate BeIA support for incoming hardware. Provide
development releases of BeIA, and development tools, to
customers. Interview and hire team members. Evaluate
team members' performance and recommend promotions/
raises.
Developer Technical Support Engineer, Be, Inc., Menlo
Park, CA, 6/98–2/00.
Focused effort upon support of
audio, MIDI, and application/interface technologies, in
C++. Answer technical queries about development in BeOS.
Develop sample code and newsletter articles. Design and
write code for third parties developing applications and
libraries on BeOS. Maintain and develop online developer
support database. Develop and present all-day sessions
for Be developer conferences.
Product manager,
Tanner Research, Inc.,
Pasadena, CA, 6/96–5/98.
Drive specification and development of a
Windows schematic entry tool for ASIC, MCM, and MEMS
design. Manage a team of up to 5 developers, and
coordinate integration with simulation tools. C++ and
MFC were used in the implementation, with Mainwin being
used for a port to UNIX.
Systems engineer,
Tanner Research, Inc.,
Pasadena, CA, 10/95–6/96.
Completed development of a DOS and UNIX
schematic entry tool for ASIC and MCM design, using
Watcom C and the GNU development system.
Education
BA Music (Music, Science, and Technology);
Stanford University,
Stanford, CA. Coursework included classes in
computer science, digital signal processing, audio
engineering, psychoacoustics, and computer music
composition.
Skills
Programming languages: Go, Python, C, C++, Ruby,
Javascript, Haskell, bash, Perl, Common LISP, Java, Matlab,
Emacs Lisp, Clojure, Scala, Elm, Objective C.
IaaS: AWS, GCP, Linode.
PaaS: DCOS (Apollo), GAE, Heroku, K8s.
AWS technologies: EC2, S3, IAM, Elastic Beanstalk, ELB,
Kinesis, CloudWatch.
Operating systems: Linux (RHEL, Ubuntu, Alpine), OS X,
BeOS, Windows.
Technical proficiencies: multi-tier web service design and
implementation; PaaS implementation; authentication and authorization
(including OAuth 2.0 and OpenID Connect, as well as various forms of
RBAC/ABAC/CBA and tokens); REST API design, container management
using Docker and Marathon/Mesos; TDD, BDD, CI, and CD; concurrency via
threads, processes, microthreads/greenlets/goroutines, and actors;
functional and OO programming; configuration/infrastructure management;
packaging and deployment; parsing; XML-based data design and
transformation; fonts and encodings; audio production software;
agile and waterfall project planning and execution.
Internet technologies: Go net/http, Google App Engine, Flask,
HTML5, CSS, AngularJS, Node.js, JSON, YAML, XML (incl. SAX and DOM
frameworks), XSLT, Django, WSGI, Apache, NGINX, Cloudflare, Okta,
ORY Hydra, HTTP 1.1/2.0, TLS, SSH.
Database technologies: PostgreSQL, Google App Engine, Redis,
Firebase, MongoDB, Riak, Oracle, and Datomic databases; SQL and Datalog;
Django and SQLAlchemy ORM.
Programming tools: VSCode, PyCharm, GNU Emacs; CircleCI, Jenkins,
GNU Make, gcc, Rake, Maven, and
Jam
build tools; Docker and docker-compose; Datadog/statsd metrics and New Relic APM;
Logentries, Datadog, and Fluentd/Elasticsearch/Kibana for log aggregation/search;
Elasticsearch and GAE Search for document indexing and search; Terraform, Packer,
Vagrant, Puppet and Ansible for configuration/infrastructure management; RPM and
FPM packaging; testing (Go), RSpec (Ruby), HSpec (Haskell), nose and nose2 (Python),
unittest (Python), Test::More (Perl), and Google Test (C++) frameworks; Git/GitHub,
Perforce, ClearCase, CVS, and RCS source control; Go pprof and
gprof;
doxygen and
similar documentation frameworks.