skip navigation

Here you will find ideas and code straight from the Software Development Team at SportsEngine. Our focus is on building great software products for the world of youth and amateur sports. We are fortunate to be able to combine our love of sports with our passion for writing code.

The SportsEngine application originated in 2006 as a single Ruby on Rails 1.2 application. Today the SportsEngine Platform is composed of more than 20 applications built on Rails and Node.js, forming a service oriented architecture that is poised to scale for the future.

About Us


Importing 50,000 users in a zero-downtime environment

03/15/2017, 2:30pm CDT
By AJ Stuyvenberg

How we swapped OAuth Providers without downtime.

Migrating users from one platform to another while still allowing those people to use the platform's applications was no small task. Here's how we did it with no downtime.

How we upgraded our largest Rails application to Ruby 2 with lots of small changes and no downtime. It wasn't easy, but it was definitely worth it.


Hubstats: A New Way to Gather GitHub Statistics

08/21/2015, 2:47pm CDT
By Emma Sax

Why and how we made an open source RoR project to supplement and integrate with GitHub.

Data is useful; there’s no denying that. However, if there’s no way to measure it, is the data still valuable? Hubstats gives Sport Ngin’s Development team an easy way to measure, view, and record GitHub data.

Getting Started with Elasticsearch on Rails

08/13/2014, 3:15pm CDT
By Ian Ehlert

How to get up and running with Elasticsearch in a Rails project.

This guide aims to reduce some of the confusion around implementing Elasticsearch indexing within a rails project.


Universal Principals of (Software) Design

02/21/2014, 11:30am CST
By Doug Rohde

A talk by Doug Rohde. Concepts from the world of design and how they can inform decisions we make as software developers to reduce complexity and increase maintainability.

Using Git in Your Gemspec

02/17/2014, 4:00pm CST
By Chris Arcand

Know the side effects of using git in your gemspec files.

You should consider the minor consequences of using shell commands with git to list the files of your project in Ruby gemspecs. Considering these small details is important when trying to architect something well.


AWS C3 Servers Deliver Outstanding Performance

01/10/2014, 8:45am CST
By Luke Ludwig

Twice the throughput, 33% reduction in app response times, same cost.

We are seeing a 33% application response time improvement and the ability to serve twice as much traffic when comparing a new generation c3.2xlarge AWS server directly to the c1.xlarge on real production traffic.

Shadowing Gotchas

11/07/2013, 9:00am CST
By Travis Dahlke

Little known facts about Ruby variable scoping

Recently, while working on one of those "WHY ISN'T THIS WORKING?!" bugs, I stumbled on what I believe is a little understood fact about Ruby variable scoping.

The code went something like this:

def foo; "foo"; end

foo = "bar" if foo.nil?
foo # => nil

How is this possible you ask? It turns out that in Ruby, local variables are determined to be in scope at parse time, not at runtime.

OK Computer: Application Health Monitoring with No Surprises

06/28/2013, 9:15am CDT
By Patrick Byrne

We built OK Computer for configurable application health checks. We've been using it in production for a while now and think you'll find it useful.

In the past, we've used fitter_happier for this purpose. Then, we added MongoDB to one of our applications. To check the connection to that database, we had to monkey-patch fitter_happier, which didn't sit well with us. We also wanted to check that our Resque queues weren't backed up, which necessitated further monkey-patching.


Skipping ActiveRecord While Keeping ActiveRelation

09/27/2012, 12:17pm CDT
By Patrick Byrne

When working with large amounts of records, it's sometimes a good idea to avoid creating ActiveRecord objects altogether.

I think that we can all agree that Active Record is pretty great. Working with ActiveRecord objects, though, comes at a cost. It has to fetch data from the database and then work with it a bit to give you the easy-to-use object with lots of bells and whistles.