Heavy Hitters in Redis

When running a public-facing website like Eventbrite, there are a number of reasons to keep track of your most active IP Addresses, API Keys or User IDs. Unfortunately, if you have a site that sees significant traffic, the volume of data you need to store and process to generate these “Heavy Hitter” statistics can become daunting.

To illustrate some of the issues with trying to generate these counts, let’s simulate a naive counting algorithm with some Python like this:

Continue reading

Seat Designer (part 2): Design patterns

What’s it take to be a frontend engineer? It isn’t jQuery or a bad ass library that has promised to change your life. It also isn’t the ability to write “pure” javascript. What it really takes is understanding all the design patterns at your disposal, and how they fit together to power a munitions depo of frontend weapons. You’re about to enter a war zone, and you need heavy artillery.

While developing seat designer we used a lot of patterns and tactics to keep our code base clean and happy. We learned a lot from Addy Osmani’s book on design patterns useful for frontend.

Here are 3 of the most powerful patterns we used during the creation of seat designer:

Continue reading

In Depth PDB

Python includes a powerful debugger, but using it well requires practice. Setting a break point and inspecting local variables is easy, but what else can you do? What if you need to set the breakpoint in one of your dependencies, or only fire it conditionally? How do you navigate calls, or change them? Nathan covers how you can better use PDB to debug and understand programs.

Building a Scalable Reserved Seating Ticketing Solution with Redis and Lua

After working in online ticketing for many years, I’ve seen how speed is everything especially during large on-sales where the general public swarms on a site as if it were a DoS attack.  Since the items being sold are unique inventory, the system has to be much more fluid than found in your typical retail store.  Tickets must be locked, reserved or released back into the pool when users reject their seat choice or simply walk away from their browser.  This may seem straightforward but the concurrent nature of ticketing where you have multiple users competing for the same inventory is what can make the system behavior very unpredictable.  Too much latency from the added bloat of things like message buses and ORM libraries will sink a ticketing system quickly which means it must be extremely lean and efficient in order to survive.  Teamed up with a small group of ticketing veterans, our goal was to build Eventbrite’s first reserved seating system to demonstrate the value of keeping things simple for the sake of performance and long term maintainability.

Continue reading

Technical on-boarding, training, and mentoring

Software engineer and Hackbright graduate Nicole Zuckerman took the stage with Kate Heddleston at PyCon this year to talk about how to make junior and new engineers into independent and productive members of your engineering team as quickly as possible. They focused on python specific resources and libraries that will help you create a simple but effective on boarding program, and talk about case studies of companies that have had success using these techniques.

Eventbrite has been onboarding junior engineers out of Hackbright Academy in the past year and has some new techniques we’ve learned to get engineers up to speed quickly.

  1. You don’t need to be an expert in order to help a new engineer out with something – having other relatively new engineers helping your new one get started takes load off the more senior engineers and helps both teacher and student. Student feels like they’re not SO behind, and teachers get a better grasp of the material they’re teaching. This is particularly useful when setting up the dev environment; have the most recent addition to the team assist in dev env setup.
  2. Buddy system – unrelated to teaching, but bringing new engineers on board culturally
  3. Code labs – a hour set aside for new engineers to ask questions about code, and usually lead into topics like Django’s ORM
  4. An environment where it’s OK to ask questions
  5. Short, medium, long term goals – explicit ones- i.e. tracing a web request in Django (short term goal).

Styleguide-Driven Development at Eventbrite: Introduction

We use a living frontend styleguide to document our brand’s visual style and commonly used HTML, CSS, and JavaScript components. This styleguide includes functional examples and sample markup, and acts as an entry point for both product prototyping and development.

This is the first of a series of posts that will explore the evolution of the styleguide since its inception in March 2013, and the ways it has changed our approach to development.

Continue reading

Open Sourcing Dorsal

Dorsal on GitHub

TL;DR, a client-side JavaScript boilerplate automation system.

Dorsal allows you to register your bespoke, artisanal, hand crafted plugins. It will then scour the DOM in search of your plugins and instantiate them. We were inspired by the directives system in Angular and wanted to bring something similar to our frontend stack. Dorsal, is platform agnostic, has no dependencies and is designed to work IE8+.

Seat Designer (part 1): Raphael + Backbone Integration

Fully interactive applications on the web have been a dream for years. A few hundred minor changes and some engineering talent focusing on frontend web in the past 3 years has made the bar much lower for creating these immersive experiences. Here at Eventbrite we pulled out more than a handful of tricks to get seat designer launched. This series of blog posts is our official run down!

Continue reading

Python packaging simplified, for end users & app developers


Asheesh covers the practical use of Python packaging tools. You’ll see how to keep your system clean as an end user excited about installing a Python module from the web, the purpose of setup.py, how virtualenv makes life easier (and sometimes harder), what Ubuntu/Debian tools can offer, and how to make a complex app easier for new contributors to run. It is heavy on stories and recommendations.