Image for post
Image for post

Why and how we’ve built 🍒Cherrypick

Hola, friends!
Lovely Valentine’s Day to all of you 😘 I hope you’ve already got plans for this evening, and if not — read on, Cherrypick will get you covered!

Okay, so in this post, I’d like to cover how and why did we come up with yet another “swiping app”, what we’ve learned while building it, challenges and guiding principles we followed.

Who are these guys?

Image for post
Image for post
It’s us! Raman, Vadim, Ilya

Cherrypick got started on our team retreat in Bali, Indonesia, while working out from the renowned co-working space Dojo Bali. All three of us are from 🇧🇾 Belarus (surprise!) and myself, residing in sunny 🇸🇬 Singapore.

Ideas?

So. We were going out to parties, brainstorming product ideas that could make events better, when we stumbled upon a typical geek problem — approaching ladies 🤓. There is obviously Tinder, but you can’t use it to break the ice with someone cute you just saw at a party. Neither you can find out who will be attending that party and whether you should too. So we thought it’d be cool to get matches with people that’ll be attending same events as you will.

Radical simplification

This time we wanted to get lazy, built product, as simple as possible and test how it goes. So we started removing things.

No 🚫 Chat

We did not want to build yet another chat app. And hey, it’s kinda hard to convey emotion over chat. We love emoji as much as you do, but still. In-person trumps everything. While video and audio communication is on a (distant) second. So yeah, we thought it’d be fun to just send cherries to each other (remember Facebook’s Poke feature?) and later added voice walkie talkie feature.

No 🚫 Avatars, Names, Age, “About me”… Nope!

In the spirit of removing things, we decided to remove everything but your face. When you see someone cute on an event — are immediately drown to that person, without knowing much about him or her. So we thought we’d leave users with 7 second looped video profiles. Yay! 🤗 Fun. Easy. Personal.

No 🚫 Database

One thing we learned while building our other product, RSVPD
(event discovery app)
, is that we hate managing & scaling databases 😬. No offence, PostgreSQL, Mongo and others are essential for most products, but we’ve did not feel like managing them this time, nor paying for PaaS solutions out there. Initially we thought of using a private Twitter account to store matches and and other user data (yes, it’s technically possible) and a few other crazy options. After evaluating them all, we settled on:

  • AWS S3 — storing user profiles and events in simple json files
  • AWS DynamoDb — storing matches and swipes
  • Google Firebase — storing user’s video profiles

Simple. Reliable. Auto-scalable. Cheap! (read: FREE)
* Later on, we realised we could have used only Firebase. It has great mobile SDKs and syncs data in realtime.

No 🚫 Monolith Backend

Yea, let’s push the limits! Fortunately there is this recent, hyped architecture idea called Serverless that runs on top of AWS Lambda. Seemed to go along well with our ascetic ambitions. What’s Lambda? Basically, Lambda runs your small functions in small containers. They react to external events (HTTP requests, queues, S3 hooks, CRON, etc) and are billed per 100ms or runtime. So it’s like, $0.000000208 per 100ms for 128Mb RAM environment. Also under free tier you get 400000Gb/s and 1000000 function calls. Sweet!

JavaScript is our language of choice so that’s what we wrote in 😎. You would not want to write a full fledged backend in Lambda, but it’s okay for simpler services. And again, it’s close to free 💸.

Here is a sample http request handler in JS (with some our own magic, if you’ll get confused):

exports.get_profile = (event, context, callback) => {
const dynamodb_helpers = require('./dynamodb_helpers')
const done = common_helpers.httpDoneFunc(callback)
var user_id = event.principalId || event.requestContext.authorizer.principalId
dynamodb_helpers.getProfile(user_id).then((user)=>{
var res = _.pick(user, ['id', 'picture', 'video_avatar', 'gender'])
res.cherries_received_total = res.cherries_received_total || 0
res.cherries_balance = res.cherries_balance || 0
done(null, res)
}).catch(err=>{
console.log(err)
done('not found')
})
}

Design

One thing I should have clarified earlier, is that we decided to rely on this popular source of events called Facebook. We believe Facebook Events is 💩, but that’s a topic for another post, so go ahead, follow @ksaitor to prevent your FOMO.

Anyway. When user opens the app, we let him/her select any upcoming event in his/her calendar and start swiping within it. Simple!

Now UI. In the best spirit of Tinder + Snapchat combination we decided to go with full screen video profiles — content is king and when you look at someone’s video full screen it feels really personal. Swipe-able navigation, that is easy to access with your thumb.

Unfortunately I could not find initial hand-drawn wireframes I came up in the first day. So here are fine screens from… well basically what we were working with on day 2:

Image for post
Image for post

Some principles we wanted to achieve here:

  • Smile! Smile everywhere! 🌈🦄 In images and in app’s logo.
  • Fun, game like mechanics — haptics feedback, fun sounds
  • As little text as possible

Did we accomplish any of these? What do you think?

Gathering Feedback

Being impatient as we are, we’ve coded up most of the app (on both iOS and Android) in about a month (mid October-November 2016). At that time I headed back to Singapore and started reaching our to my female friends and friends of my friends for feedback. It was important to get feedback from ladies first. As with all dating apps, it’s hardest to attract ladies than men. It’s important that environment is safe and welcoming. Typically men jump on every single dating app out there — so we did not worry much about them. Here are some notes I’ve took from more than a dozen of coffee meetings:

Image for post
Image for post

Initially, we were planning to limit communication to sending cherries (similar to Facebook’s Poke or like a real-life wink 😉) — which, we thought would be ambiguous, hence fun. Turned out that, all the ladies I interviewed, were shocked by the absence of communication methods. We still really really did not want to include chat feature, so I asked whether voice and video messaging (like in Instagram’s moments) would be fine. Most of them replied that they would be quite comfortable sending voice messaging or at least give it a try. Good learning! We corrected our course of action.

* Funny, around December, my friend Spencer Yang (of KeyReply) recommended me this book The Mom Test (by Rob Fitzpatrick). I’ve read it in a day and face-palmed myself about how many mistakes I’ve made this time and throughout many years while interviewing potential users! It’s one of the most practical books I’ve read in the past months and would highly recommend it to anyone who’s building products.

Getting users

Now the hard part. For this to be a success, we’ve got to have a high retention. To have high retention, we’ve got to ensure that users are doing key-action as often as possible, and are getting core-reward (matches) at a variable rate, yet, often enough not to loose interest… la la la

TL;DR: we should have a high user density within each event, to have at least some level of success.
Fortunately for us, we’ve partnered with a few venues in Singapore, such as Refuge and Canvas so we were able to target there events and offered complimentary entry to all boys and girls with matches.

Yay! Nope… not really. It’s still hard to get someone to download any app. We’ve got to about 20% penetration rate per event. Which is quite low. And it constantly required our engagement, instead of user’s.

One thing we learned is how important it is for a consumer app to think through how your users will help you acquire more friends. Downside for dating apps, is that there is not much content is being creating while using such apps, nor users would be very excited to share such content on their social media. (Well, maybe, one days there will be someone who’ll figure this out and overthrow Tinder’s dominance).

*If you are interested to see how great consumer apps do it in their early days, it’s worth paying attention to Justin Kan’s Whale. They are still in early days and you can see product evolve, how content sharing is implemented, how community is being organised and more.

Soooo…?

There is certainly much much more that I could have shared about our experience building Cherrypick, but my fingers are getting tired typing haha. Hit me up on Twitter or Product Hunt to get your questions answered.

Today, on this beautiful Valentine’s Day, we are excited to share this story and product with you and with Product Hunt community 😘

https://www.producthunt.com/posts/cherrypick

Upvote! Share! Love! Discuss!

Written by

CryptoJobsList.com - #1 job board to find and post blockchain & cryptocurrency jobs.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store