Jeff Kreeftmeijer

Rise of the Navvy

2010-05-24

It all started on a cold winter’s day in December of 2009 as I decided to start a personal project using MongoMapper, which needed to run background jobs.

Back then, @collectiveidea‘s delayed_job fork was still tightly mingled with ActiveRecord, so I couldn’t just pop that in as I normally would. After failing to find good alternatives I stumbled upon @zbelzer’s fork in which he did an “initial attempt at MongoDB support”. I decided to go with that.

I found a couple of problems with Zach’s fork — it was based on @tobi‘s original delayed_job to name one — , so I created a Mongo based fork based on Zach’s work myself.

While working on that, it didn’t take me long to realize that I was rewriting stuff I’d never really need to use. So, I decided to create a simple, database agnostic background job processor myself and I called it Navvy.





Navvy is a shorter form of navigator (UK) or navigational engineer (USA) and is particularly applied to describe the manual labourers working on major civil engineering projects.
Wikipedia

I initially built Navvy with MongoMapper and ActiveRecord adapters, but @antekpiechnik came out of nowhere and created an adapter for Sequel. In the spirit of the January 16 and 17 Bugmash, @matsimitsu and I jumped in to get the whole thing up to speed with Rails 3.

“Aren’t you the guy who built Navvy?”

After announcing it, it didn’t take long before Ruby5 picked it up and people started actually using it. It was great to hear that @jnunemaker decided to use Navvy in Harmony.

The Changelog did a post on Navvy, which meant it became a featured repo on Github Explore for about a week, John gave another hat tip on Episode 0.1.1 of the Changelog and more and more people started contributing.

Thanks to everyone who helped build, fix bugs and get the word out about the project. It was a crazy ride and I can never get enough of the “Aren’t you the guy who built Navvy?”-question. Feels good, thanks.

Future

delayed_job 2 got released a while back adding support for multiple backends. Although database agnosticism was the first and most important goal for Navvy, I think there’s still a place for both, since there are still some cool things in Navvy (You can use it in pure Ruby for example).

Today, Navvy has a DataMapper adapter, job priorities, the ability to retry failed jobs and it’s own daemon. It’s been a bit quiet around Navvy for the last couple of weeks, but I’ve been working on a Mongoid adapter with @TomK32, together with some other stuff that I hope to release soon.

I’m excited to continue working on Navvy. Stay tuned!