Hi I’m Neil, a Ruby engineer at GroupMe, and this is a guest post.
One weekend last October my friends Cam and Joey and I hacked together an app for collecting money from a group. We started Friday at 6:30pm and by 9pm Sunday night, we processed our first end to end transaction via the app and website. Then we high fived harder than I have ever high fived anyone in my life.
Yesterday we introduced it as a fully integrated feature of GroupMe. We got a bunch of press from Gizmodo, Techcrunch, The Verge, Wired, Cult of Mac, and Ashton Kutcher
I’m pretty proud of how it has come together, and the experience of challenging ourselves to go rogue and leapfrog the company roadmap left such an impression on me that I felt it merited this blog post.
Here’s how we built a useful service in a weekend. tl;dr is: Challenge yourself to do what you want with your work, and use Balanced if you have to put money in people’s bank accounts.
1. Already be good at something.
I’m good at web programming. Cam’s good at iOS. Joey’s good at design.
If we couldn’t do the basics in our sleep, we would have spent the better part of those three nights struggling with our tools.
Because we’ve put in the reps in our day jobs, we had all the generic groundwork crap — an https server in the cloud and form views syncing with it on our iPhones — done the first night, giving us two full days to focus on the fun stuff.
Not a programmer? It’s cool. Be good at something. If you’re awesome at making pitch decks for your boss, spend a weekend making a killer pitch deck about your own idea.
2. Work with people you love.
3. Promote yourself.
You’ll have to play a lot of roles that you may not be used to: Product Design, Copywriting, Logo Design, CTO, CEO. If you’re waiting for someone to notice that you could be good at these things, why not just take a weekend and prove it.
4. Steal other people’s time.
You can’t build something of value in 48 hours from scratch, unless you’re one of the best in the world at what you do or you’re freakishly lucky. The trick is: You can assemble something in 48 hours that took thousands of hours to build.
There are tons of interesting companies out there that have spent years creating web services that do interesting things and solve hard problems. Use one or more of these APIs in a novel way and you leverage thousands and thousands of hours of precious time and effort.
Sure, GroupMe’s prototype was built in a hackathon over a weekend, but it would have been an inoperative pipe dream had it not been for the thousands of hours the engineers at Twilio put in to create their service. The same goes for us and Balanced. More on that in the implementation details…
5. Cut half of your spec. Twice.
Every good project starts with a good planning phase. To us, “good” means brief, sparse, and directed. It should result in the dumbest thing that you would actually use.
You want to figure out what’s different about what you want to make, and cut everything else. Limiting yourself to a weekend certainly sharpens Occam’s razor and lends itself to the Pareto principle. It’s still up to you to have the courage to shoot down most of your own ideas.
Our only planning session for the weekend took place over about an hour at Revival after work on Friday.
5. Treat yo’ self
Whatever your body wants, give it that. Maybe your body likes to wake up at 8:30am, eat a healthy breakfast, go for a run by a lake, have a nice latte and head in.
We on the other hand maintained a Ballmer peak like Edmund Hillary. We ordered in pizza and barbecue. We stayed up until 4:00 in the morning the first two nights and woke up without alarms.
When your body is free, your mind is free. Indulging ourselves physically meant that A) We were free to focus exclusively on the app and B) We looked forward to “coming in to work” each day.
6. Years are just a series of weekends
Building something from scratch in a few days is immensely rewarding. You’ll return to your day job with a fresh outlook and more confidence. Plus a sweet service you get to use that you built in a flurry of pure personal expression.
And hey guess what: All of these principles apply all the time. Working the way you want to work makes you realize you never have to work in a way you don’t.
The biggest challenge for us was going to be getting money into people’s accounts. For this product to be useful and get traction, the collector would need to see the money in their account as fast as possible.
We looked into a few options.
Stripe: Stripe is the startup industry standard for payment processing. We already knew how to use it and how painless it would be to integrate for accepting cards. However, Stripe does not support ACH credits to arbitrary bank accounts — payouts from Stripe would only go to our bank account and would take up to seven days.
Dwolla: Dwolla is a really well designed and easy to integrate platform as well, and they have ACH capabilities. Their fees are also much lower than other payment processing companies. The tradeoff is they only work with debit cards and do not offer a white labeled solution — the user explicitly signs up for a dwolla account.
Venmo: Venmo is great for settling up debts with friends, and is the platform that we personally used IRL for a lot of the use cases we thought of for Split. The drawback is that, like Dwolla, it requires people to have a Venmo account, and we were pretty adamant about the buyers only needing to enter a credit card and not needing to sign up for a new account.
Paypal: Most people have paypal, and it does let people withdraw to their bank account, and does allow us to send people money via their email address. The issue is we couldn’t do this programmatically — we would have to have someone signing in to paypal and sending arbitrary sums of money to unverified email addresses.
Setting up direct deposits as an employer for each user: Crazy expensive manual process aaaand probably illegal.
Mailing people checks: lol.
The day before we started, our plan was to use Dwolla for ACH to the creators and Stripe to accept credit cards for the members. That’s when Tanuj, the BD guy that helped make this hack a reality in the GroupMe app, told us about Balanced.
It seemed too good to be true: Just collect bank information in the browser, Balanced tokenizes it like Stripe or Braintree do for credit cards, and you can credit that bank account via a single API call.
Balanced also handles card payments with a similar tokenization mechanism. So all the card debits go into an escrow marketplace, and all the bank credits come out of that marketplace.
Perfect. Instead of spending three days trying to stitch together a solution ourselves, implementing our secret sauce was as easy for us as it is for McDonald’s. (It’s just ketchup and mayonnaise, people.)
The real icing on the cake was their support via IRC. I have never had a better support experience with a vendor. Every time I ran into something that I couldn’t find in the documentation, I jumped in the IRC room via their website and had my question answered instantly. It was as if I had their CTO on iChat, and it sped up the integration process immensely.
Here are the server side implementation details, with failure cases and extraneous details removed for digestibility:
View the Gist
We’ve done months of work since that hack weekend to get our hack ready for GroupMe scale and polished for our daily users. As a result the implementation sketched out above has become more complicated. But, the basic mechanisms of debiting and crediting are still just this easy.
I’m really excited to have released this in our app, and I hope you guys find it as useful as we do.
Thanks for reading!