Thumbnail image

Friendlier: Letting a Startup Fail Fast

Table of contents

Timeline:2014-2015
Languages Used:Java (Android)
School:Colorado College
Role:CEO, Mobile Developer, Big Idea Finalist

In our sophomore year at Colorado College, my best friend Anubrat and I set out to solve a problem we both felt deeply: how do you keep the connections you’ve made, when life and social media make it so easy to forget? The result was Friendlier—a mobile app that nudged you to reach out to friends you might otherwise lose touch with, using data, context, and a bit of gamification.

The Big Idea (and the Big Pitch)

We poured our hearts into Friendlier, and it paid off—at least at first. We were named finalists in a startup pitch competition at our college, and even secured a verbal commitment from an angel investor. The pitch was simple: Friendlier helps you maintain your most important relationships by suggesting 3–5 friends to reach out to each day, crafting personalized messages, and rewarding you for keeping in touch. It was inspired by Dunbar’s Number, Seth Godin’s Tribes, and our own struggles to stay connected.

How Friendlier Worked

The app analyzed your contacts, social media, and calendar to figure out who you hadn’t talked to in a while, then suggested timely, context-aware messages. It stored data securely on-device, assigned an “importance” score to each friend, and sent push notifications at the best moments. The more you reached out, the more points you earned—leveling up your social life, one nudge at a time.

Tech stack: Java (Android), Facebook Graph API, SMS, Google Calendar, and more.

Here’s a taste of the code that powered our daily friend selection:

1// Pseudocode for daily friend selection
2for (Contact friend : allContacts) {
3    int score = calculateImportance(friend);
4    if (score > threshold) {
5        todaysList.add(friend);
6    }
7}

Friendlier’s contact analysis was pretty deep. Here’s a real snippet from the ContactAnalyzer class, which synced and enriched contacts with phone, email, and event data:

 1public void syncAllPotentialContacts() {
 2    Thread thread = new Thread() {
 3        @Override
 4        public void run() {
 5            ContentResolver contentResolver = mContext.getContentResolver();
 6            Cursor cursor = contentResolver.query(
 7                PHONE_CONTENT_URI,
 8                new String[]{PHONE_CONTACT_ID, CONTACT_DISPLAY_NAME, RAWCONTACT_VERSION,
 9                    CONTACT_STARRED, CONTACT_LAST_TIME_CONTACTED, PHONE_NUMBER, PHONE_TYPE},
10                CONTACT_HAS_PHONE_NUMBER + " = ? AND (" + PHONE_TYPE + " = ? OR " + PHONE_TYPE + " = ? )",
11                new String[]{String.valueOf(1), String.valueOf(PHONE_TYPE_MAIN), String.valueOf(PHONE_TYPE_MOBILE)},
12                null);
13            // Loop through every contact (excluding those without phone numbers) in the phone.
14            if (cursor.getCount() > 0) {
15                while (cursor.moveToNext()) {
16                    // ... get contact info, validate, enrich, and sync ...
17                }
18            }
19            cursor.close();
20        }
21    };
22    thread.start();
23}

And here’s how Friendlier enriched a contact with birthdays and other events:

 1Cursor eventCursor = contentResolver.query(
 2    DATA_CONTENT_URI,
 3    new String[] { EVENT_START_DATE, EVENT_TYPE, EVENT_LABEL },
 4    DATA_MIMETYPE + " = ? AND " + EVENT_CONTACT_ID + " = ? ",
 5    new String[] { EVENT_CONTENT_ITEM_TYPE, friend.getContactId() },
 6    null);
 7while (eventCursor.moveToNext()) {
 8    int eventType = eventCursor.getInt(eventCursor.getColumnIndex(EVENT_TYPE));
 9    String dateNum = eventCursor.getString(eventCursor.getColumnIndex(EVENT_START_DATE));
10    // ... parse date, assign to friend ...
11}
12eventCursor.close();

The Fatal Flaw: API Dependency

We were on top of the world—until we weren’t. Just a week after our investor agreed to fund us, Facebook deprecated the very API we depended on to fetch friends’ data. Overnight, Friendlier was dead in the water. There was no workaround, no pivot, no second chance. We learned the hard way: never build your business on a single API you don’t control. Or, as I like to say now: either don’t be dependent on a single API, or be the API!

Here’s the API call that gave us everything, before it got taken away:

 1String url = "https://graph.facebook.com/me/friends?fields=id,name";
 2String response = Util.openUrl(url, "GET", parameters);
 3JSONObject obj = Util.parseJson(response);
 4JSONArray array = obj.optJSONArray("data");
 5if (array != null) {
 6    for (int i = 0; i < array.length(); i++) {
 7        String name = array.getJSONObject(i).getString("name");
 8        String id = array.getJSONObject(i).getString("id");
 9        // ...
10    }
11}

Business & Financials

We had ambitious plans: a free app for everyone, with a premium tier for power users and businesspeople (think LinkedIn integration, Google for Work, advanced analytics). Our financial projections modeled three rounds of investment ($14k, $30k, $50k) and a slow burn rate, with losses of ~$2k/month as we built toward growth. We believed that with time, Friendlier could become the next social media phenomenon. The spreadsheet said we’d need to keep raising or start earning fast.

Lessons Learned

  • Don’t build on quicksand: If your product depends on a third-party API, have a backup plan—or better yet, own the platform.
  • Validate dependencies early: We could have built a prototype that didn’t rely on Facebook, or at least diversified our integrations.
  • Pitching is just the start: Winning a competition or getting investor interest is exciting, but it’s not the same as product-market fit (or technical resilience).
  • Failure is a feature: Friendlier’s demise was painful at the time, but it taught me more about business, tech, and resilience than any class ever could.

Reflections

Looking back, I’m grateful for the experience. Friendlier was a crash course in entrepreneurship, teamwork, and humility. It’s a story I tell often—especially to anyone tempted to build on someone else’s platform. If you take one thing from our journey, let it be this: don’t just use the API—be the API.


Have valuable startup lessons you want to share? Please drop the knowledge bombs in the comments below!

Related Posts

Comments