Facebook Shutting Off Graph 1.0 APIs: A Blessing in Disguise

We designed the initial home screen for Horizon well over a year ago (end of 2013), with the expectation that we could provide a single user utility of organizing all your own Facebook friends by location. That’s the reason we included current location on the home screen even though the primary use case is searching for a different city with the goal of finding a place to stay within your trusted network on your next trip — because surfacing your Facebook friends (& friends of friends) who live nearby in a clean interface is a fairly compelling user scenario that would entice many people to download the app simply for convenience.

Several months later, in April of 2014, we found out we only had a year to develop and grow with the ability to import all of a given person’s friends and geo-locate them.

Why?

Facebook announced they were severely limiting the data other developers can pull from their graph API in one year (see their announcement here). What did this mean? Version 2 of the graph API only returns a users friends who have authenticated with the same app. That makes it virtually impossible to use Facebook to provide a compelling single user social experience without a substantial number of your friends already using the app, or even to invite your existing friends to your app. There are several stackoverflow threads talking about this issue, such as this one and this one.

Even after we found out about Facebook’s plans, we planned to build for graph 1.0, get as much traction/data as possible before the impending API change, and sort out data cleanup later in 2015. It wasn’t meant to be. During development this past fall while going through Start-Up Chile, we started noticing duplicate people showing up in our app and hearing reports of people finding no one they knew in the app upon login (our default assumption was of course “user error”). We finally dug into it and realized Facebook changed their SDK, which put us onto the graph 2.0 API automatically. The duplicates were due to 1.0 and 2.0 returning different unique IDs for Facebook accounts (which I’ll come back to at the end of this post), and the lack of familiar faces was of course due to the fact that Facebook was only returning friends on the app rather than all friends.

With extremely limited development resources and funds, we decided we didn’t have the bandwidth to hack back to the old SDK and support it while finishing our app — especially given the temporary nature of support for the graph 1.0 API. We decided to re-write our entire backend for the Facebook graph 2.0 reality we are going to have to build the business with, and wipe the whole database. The plus side of the decision was that every single person who shows up in Horizon has logged in (rather than being empty Facebook profiles with no knowledge of the app) and thus will not be confused by inquiries from people who contact them on the app.

Re-coding our backend sidetracked us for well over a month, at a time when we really really couldn’t afford the delay. We were so close to launching, and then hit a massive unexpected snafu that we weren’t staffed or funded to deal with. It just goes to show, you have to roll with the punches. That you have to live with the decisions of other companies when you build upon 3rd party APIs. Getting over the finish line wasn’t easy (the things worth doing never are), but we did it. In March, we released Horizon on the App Store (download here).

When all is said and done, I believe Facebook shutting down graph 1.0 will turn out to be a blessing in disguise for our business. It forces us to focus hard on the business of organizing fragmented communities by location to facilitate hospitality exchange sooner rather than relying on the original single user scenario to get downloads based on convenience. We know it’s an interesting use case to find your own friends by location, but it’s certainly not a monetizable one (how do you make money from people talking to people they already know?). We’ve known all along the business in Horizon is to connect trusted community members across geographies — for places to stay initially, but many other things longer term — and unlock the massive hidden value buried deep in communities. The missing piece is bringing transparency to the locations of those trusted community members. While most people have no incentive to help anyone and everyone publicly, everyone is willing to help members of their trusted network to some degree by providing accommodation, teaching skills, or simply sharing knowledge and connections.

Thus, thank you Facebook, for forcing us to build a real business sooner rather than later.

PS: I have a theory (no proof of this) as to the reason Facebook made the change. They said publicly it was for user privacy reasons; I don’t buy that as the core driver. I believe the real reason is they want to be at the center of the data sales pipe. With Facebook graph 1.0, every user had a unique identifier across all apps. This meant that “App A” could match data associated with Facebook id #12345 with data from “App B” for that same user. With Facebook graph 2.0, every user has a unique identifier for each and every single app they use. Your unique id for “App A” may be 12345, but your id for “App B” is 456789. My belief is a massive number of sites/apps/companies were selling individual user data matched on Facebook id number (think of how many failed startups probably sold their data assets without your authorization). That will not be nearly as easy of a matching mechanism now that those id numbers are only unique across a single app — and hence it will be exponentially easier for Facebook to monetize all that data themselves because they are the only ones who can match data across numerous different apps.