Saturday, November 22, 2008

The Most Rockin' Carpool Site on the Web


This blog post marks the second launch party for, a ride sharing site so easy to use your 80 year old grandma could figure it out, and so awesome it’s going to be the talk of every college and work party.

Why ride sharing is awesome

For the past several months I’ve been actively pursuing ride sharing. My reasons are more economic than environmental (interestingly enough the two intersect here). Here’s why I think ride-sharing is awesome:

  • We (my wife and I) continue saving an extra car payment, and get along just fine with our vehicle which we’ve completely paid off
  • Save wear and tear on said vehicle
  • Lower monthly payment for auto insurance
  • Less gas money
  • The ability to be productive during my commute time (I’ve got a stomach of steel when it comes to getting car sick, my stomach is awesome!)
  • Opportunities to socialize with car-pool partners.
  • Helping to shrink government by being less dependent on government to make my transportation more cost effective. (OK, this will not be a political post)

Why I created a ride sharing site

Months ago when I was searching for a carpooling website to organize carpools in my church and community, and I found myself in Goldie Locks’ shoes, except the baby cub spit in his porridge and wet his bed. I couldn’t find a carpooling site that was “just right” – one I could recommend without any reservations. They were either difficult to figure out, or it was difficult to modify your commute once you’ve recorded it, or protect your privacy without listing your house as 5 miles away, or required WAY TOO MUCH information to sign up.

I don’t pretend to be so smart that I can create the perfect carpooling site, but I decided I was certainly going to try. I started out with these objectives in mind:

  • Any user must be able to INSTANTLY understand the tool
  • The sign up form should be as short and quick as possible (no email verifications!)
  • It should be fun
  • It should use be very visual (IE – if you can convey the information visually on a map, or control input visually without using a drop down box, do it)

How I built

I used the following libraries / gems

  • open_id_authentication (with ruby-openid) – providing services to authenticate against open id servers. This plug-in is FANTASTIC.
  • restful_authentication – very great plugin by technoweenie to handle user authentication.
  • gravatar – Does the job to display user gravatars on your site.
  • indicator – indicator helper methods and javascript.
  • recaptcha – Put recaptcha’s on your website. Worked great!
  • rspec and rspec story runner to test.
  • uber-builder – A fine form builder library. Render the same form partial as a static form and get your view for free. Supports various layout styles like tables, ul / li, etc. and does not get in your way.


  • To host, I got a Linode slice. They’ve been really great so far.
  • Bought the domain from
  • I made heavy use of rails ActiveRecord named_scopes. Man they are awesome.
  • As for Google maps, I coded straight against their JavaScript API. I wrote a resizable rectangle control for Google Maps even (contact me if you’re interested in it). Google Maps’ API is very awesome and does not need any Ruby on Rails helpers to work with maps.

Lessons Learned (so far)

User case studies are KING

I can’t tell you how important this is: after you implement any idea, find somebody who has never seen what you’ve been working on, and preferably is not well acquainted with what you have been doing. Watch them try to go through the site, take notes on what confused them, and try to see things from their point of view as they are stumbling through it. Resist the urge to help them, unless they get totally frustrated. Just sit back and quietly observe. Then, take feedback by the shovel-full.

After EXCRUCIATING user testing from my good friends and family (thanks, you guys so rock), I was able to iron out some pretty serious road blocks that would not have even been aware of otherwise.

Don’t fall in love with your own ideas

Your love affair with your ideas will almost inevitably lead to failure. Why? Because we all have blind spots, and it often takes the collaboration of several minds to get a clear picture.

When you get feedback from your user case studies, don’t be afraid to throw away code, or completely rearrange or restructure things.

For example: at first, the sign up process consisted of two parts: “search for matches” and “register your commute”. I really liked it that way – it provided flexibility. I even had the search address being stored in a session and auto-populating in the commute registration form.

When my tester got very confused, and couldn’t understand why she was being asked for her address twice, I was tempted to explain to her why it was so awesome that way. Instead, I sought to understand her point of view. Her view was more enlightened than mine, and I saw that the flexibility I as in love with was ultimately wasn’t adding value but detracting from it by complicating things. The refactoring was painful, but was also one of the greatest improvements I’d made since the first prototype of the site.

Be an information elitist

Don’t be afraid to scrap things – put every piece of information on trial, especially when you are asking your user for information: are you needed to get the job done, is your existence warranted? Persecute without mercy.

Make a clear path for the user that involves sign up.

I believe you’ve got to guide a user down a path that leads them to sign up. In my first launch attempt, I just showed a search form and let them search. Not wanting to force people to register, people got on the site, searched, and said “oh, that’s cool”. Then they missed the tiny “add your commute now!” link and closed their browser. Gone, probably never to return again.


Building has been a fun and rewarding. I hope it gets to live up to its potential and create widespread value in my community wherever it finds itself getting heavy use.

Feedback and criticism in the spirit of peer review is most welcome.


Anonymous said...

Thanks for making this Tim. I was planning on making one myself but you had more desire :) I guess the DNS hasn't propagated yet. I'll have to wait on it.

Tim Harper said...

Hey spig,

Seriously? I've had a test site up at the domain for 2 months now, it's nothing new. I can access it from a few locations. What happens when you try to pull it up?

Roger Pack said...

wow that site rox! The only ajaxy annoyances were:
the dropdown for openid got in the way somewhat [it obscured the buttons for submit]
and it was a little unclear how to scroll up on the map so as to be able to edit the 'uppermost' box [which had corners off the map]. A little experimentation showed that dragging worked :)
How many total man hours for this thing? It looks polished, and all developed by one person. Nice job.

Tim Harper said...


I fixed an issue where reCaptcha was conflicting with lightview, and causing a horrible, horrible issue with internet explorer ("operation aborted" then "unable to load site") on the signup page. Have I told you I entirely loathe internet explorer? I hate it. I wish it would die. Anyways... the work around was to not include lightview on the same page reCaptcha was on.


Thanks! I've spent quite a bit of time on it, haven't logged the hours but I'm sure its around 30 or 40 over the last few months.

I think openid is supposed to get in your way :) It disappears when you press enter. I'll look into possibly changing that though.

Not sure what you meant by the map issue

Roger Pack said...

the openid thing wasn't a big deal, just jarring

by the map issue I meant that by default the 'choose your boundaries' boxes don't fit in the original map screen, and it was unclear to me how to scroll up to adjust the 'upper left most point'

Unknown said...

The Google Maps integration looks especially interesting. Can you shed some light on how you've managed it?

Roger Pack said...

any chance you can open the source? Just in case I need to do something google maps related and your code would be a good example :)