Code

I use Python, Flask, and Django for most of my side projects. I'm interested in automating things that people do every day; developing tools to make it easy to build reliable web services; and helping other engineers grow.

Projects

Cocktails with Landy

Find craft cocktails you can make from anywhere.

JoyGram

JoyGram lets you send beautiful, personalized vintage postcards to anyone.

Lineup

Lineup is a simple web app for creating or updating a Spotify playlist by just searching for artists. I use it to create lineups for music festivals or listen to songs from new bands. It was implemented by me, with design by my friend Adarsh Solanki.

Open Source

dogstatsd-collector

A library I wrote at Rover to enable StatsD metrics to be emitted at arbitrary granularity (instead of just the flush interval). Check out the READme for more info!

Professional

I currently work at Rover.com where I drive site reliability, observability and monitoring.

I also worked at Amazon where I developed complex distributed systems, managed operations for important systems including Amazon's search services, and worked up and down the stack from changing the look and feel of the search results page to designing new schemas as part of a large-scale migration off of legacy services.

Before that, I developed an automated UI testing framework at Microsoft (similar to Selenium).

Writing

Current Writing

My current writing can be found on my blog.

Previous Writing

2020-01-31:Reflecting on our Python 2 to 3 Project (Rover Engineering Blog)

A summary of our successful Python 3 rollout and things we learned about managing large projects.

2019-04-08: Moving Safely to Python 3 (Rover Engineering Blog)

A discussion about Rover's strategy for migrating to Python 3 (a project I led).

2018-09-17: Going Green: Hardening Django Against Third Party Service Outages with gevent (Rover Engineering Blog)

This post discusses an approach we took to prevent outages in our third party service dependencies from taking down our entire webapp.

2017-09-25: Query Performance Omniscience in Django (Rover Engineering Blog)

This post introduces a metrics-based approach to understanding your Django application's interaction with the underlying database, and how you can use those metrics to improve your application's performance and database utilization.

2017-08-21: The Needle in the Haystack: Wrangling Celery Workflows (Rover Engineering Blog)

This post discusses techniques for tracing and understanding complex Celery workflows.

2017-01-12: Why do we cache?

Why is caching important to developers? This article describes the basics of caching, and shows some real data demonstrating the value of caching to applications.

Speaking

Making Observability Frictionless

Dash 2020 (Virtual)

Speaker at Datadog's Dash 2020 conference about how we make observability frictionless at Rover. Talk Abstract

Building a Culture of Observability

PyCon 2019

Speaker at PyCon 2019 about Rover's particular take on observability and how we've built it into our engineering culture. Talk Abstract

Achieving Huge Performance Wins with DataDog

DataDog Summit Seattle 2019

Speaker at DataDog Summit Seattle 2019, talked about some of the ways Rover used DataDog to score some big performance wins. Also participated in a moderated panel.

Tips and Tricks for Building a Scalable Cloud Service

HackArizona 2015

I presented this tech talk to students, participants, and observers at the University of Arizona during the HackArizona hackathon. It follows a hypothetical service that struggles as it grows more popular, and describes some common techniques for keeping a service running as it scales.

Me

Picture of Me

I'm an engineer living in Seattle, WA. I graduated in 2013 from the University of Virginia where I worked with Wes Weimer's research group on genetic algorithms to automatically find and fix bugs in code. While at UVA I was also a teaching assistant and tutor, and wrote a compiler for a simple object-oriented language.

After graduating I worked at Microsoft and Amazon and lived for a year in sweltering Phoenix, AZ. While in Phoenix I co-taught a high school AP Computer Science course through the wonderful TEALS program. Now that I'm back in Seattle I volunteer as a TA and mentor for the Ada Developer's Academy.

Outside of software development I enjoy learning how to craft cocktails, playing violin in a metal band, going to music festivals, petting my cat, and studying movement. Currently I'm focused on boxing and weight lifting. In the past I practiced capoeira and gymnastics.

I currently work as a software engineer at Rover.com.

Elements

Text

This is bold and this is strong. This is italic and this is emphasized. This is superscript text and this is subscript text. This is underlined and this is code: for (;;) { ... }. Finally, this is a link.


Heading Level 2

Heading Level 3

Heading Level 4

Heading Level 5
Heading Level 6

Blockquote

Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.

Preformatted

i = 0;

while (!deck.isInOrder()) {
    print 'Iteration ' + i;
    deck.shuffle();
    i++;
}

print 'It took ' + i + ' iterations to sort the deck.';

Lists

Unordered

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Alternate

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Ordered

  1. Dolor pulvinar etiam.
  2. Etiam vel felis viverra.
  3. Felis enim feugiat.
  4. Dolor pulvinar etiam.
  5. Etiam vel felis lorem.
  6. Felis enim et feugiat.

Icons

Actions

Table

Default

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Alternate

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Buttons

  • Disabled
  • Disabled

Form