What a crying baby taught us about customer value

Not long after our son Dilan was born, my wife downloaded a free iPhone app from the App Store called White Noise Box. It’s an incredibly simply app: there are 5 different images you can tap that each play a specific variant of white noise. For example, tap the image of rain for soft white noise, or tap the image of water rapids for more harsh white noise. Tap again and the white noise stops. About 8 weeks in, I asked my wife, “If Noise Box was a paid app, how much would you be willing to pay?” Her answer: “Thousands.”

Draining my iPhone battery playing white noise all day

OK, so realistically speaking, I would spend a Saturday learning Objective-C and hissing into a microphone if I thought my wife was really about to drop a couple Gs on an iPhone app. Nonetheless, her response is instructive. Despite the fact that the app is nothing more than a couple of images and .wav files, the value of the app is immense. Why? For the longest time, the harsh white noise of water rapids was the only thing that would calm our excessively challenging newborn. We could change his diaper, swaddle him, sway him, sing to him, and fall to our knees begging for mercy to no avail. Tap the image on White Noise Box, however, and instant calm. It still works like magic 80% of the time.

For an entrepreneur, customer value is one of the most critical concepts to understand. It doesn’t matter whether it takes a day or a decade to built it. What really matters — at least in the case of “painkiller”-type products —  is the degree of your customer’s pain, and how well you alleviate it. Now to be fair, there are certainly other factors that come into play when setting price and assigning a value to your solution. In this case, it is fairly obvious that customers would evaluate competing products and alternative solutions (like running the vacuum cleaner) if buying White Noise Box meant wiping out the college fund. Even still, that doesn’t mean that an app this easy to replicate has to be free or super cheap. Imagine this for a moment: White Noise Box is called “The Baby Soothing App” in a sea of other generic white noise apps in the App Store.  It was featured in the latest issue of Happy Baby Magazine, and it popped up in at least 10 different forum answers you read between 3 and 5am last night (one-handed on your iPhone while trying to calm the little one). All of the moms on your street swear by it.

Now… look at your crying and consistently cranky baby. You can try your luck sifting through dozens of two-and-a-half star white noise apps in the App Store because they are all free, or you can succumb to the miracle $20 Baby Soothing app. I think you drop that Andrew Jackson and never look back.

Two lies I was told as a new father

Nearly three months ago, my wife gave birth to an incredible baby boy named Dilan. One of the great things about becoming a new parent is that there is an abundance of people you can turn to for advice. After all, 6+ billion children didn’t just appear out of nowhere!

Unfortunately, despite all of the tips we were equipped with, our first several weeks with Dilan turned out to be exceptionally rough. In fact, there were two key pieces of advice that I now realize sent us totally in the wrong direction. Now, it is probably a bit unfair to refer to the advice we received as “lies” because it was surely well-intended (and truth be told, we are extremely grateful for almost all of the tips and suggestions we were given!). I am calling it out, though, because it was advice that we heard very consistently and yet it was fundamentally flawed. Also, I realize that every baby is different, but hopefully this helps some other parents out there.

“You can’t overfeed your baby.”

Wrong. I can’t tell you how many people explicitly said this to us, including nurses, lactation consultants, doulas, and pediatricians. It turns out that virtually all of the advice a new mom receives in regards to breastfeeding is based on the assumption that breastfeeding will be impossible. Fortunately for us, Dilan figured out how to breastfeed rather quickly and is really darn good at it. The boy was born to eat.

The problem is that we were consistently told to keep him on the breast as long as he wanted… and he wanted to stay the entire day. As a result, he kept overeating. I can’t tell you how many times milk gushed out of his mouth. It is really hard for a baby to sleep, or be happy, when he’s constantly spitting up all over himself.  It wasn’t long before we began asking questions about his ridiculous amount of feeding, but we were always told the same thing, “Ah, let him feed when he wants to. Newborns can’t overfeed.”

It turns out that half the time he was feeding, he was just feeding to soothe. He didn’t need to eat — even if it seemed like he was “rooting” or showing some of the other typical hunger signs (I think he began to associate those behaviors with soothing). He just needed to suck on something, or simply receive some other form of comfort. It sounds obvious now, but I am surprised that nobody ever brought this up to us. We are now very careful about trying not to overfeed him, and he is a much happier baby.

“Newborns sleep almost the entire day.”

OK, this is not completely untrue, but it is misleading. It should be, “Newborns need to sleep almost the entire day.” The problem with the above statement is that it implies that the sleep will just happen on its own. Maybe it does for some babies (apparently for all of the baby girls our friends are having!), but not for our boy. For the first few weeks, we thought we would just hold him or swaddle him while going about our usual day, and that he would pass out as needed. Instead, he was wide awake most of the day and very, very unhappy. It is called being overtired. And despite all of the advice we were given, nobody ever mentioned this to us.

The solution is that we had to soothe him to sleep. And by soothe, I mean spend anywhere from 30 minutes to 2 hours working (not kidding!) to convince him to fall asleep. We’ve nearly perfected it to an art now — and can sometimes get him asleep in under 10 minutes — but essentially the process involves the following:

  • Monitor him closely when he has been awake between 1 – 2 hours. That seems to be his limit. He’ll stop playing as much and will start to get fussy. The sooner you detect he is tired, the easier he will be to put asleep.
  • Get him out of the noise and lights. When he is tired, it means that he is also overstimulated.
  • Swaddle so that he won’t keep driving himself crazy by flinging his own arms and legs everywhere. This was the one piece of advice we heard from the very beginning. It is a must, but not the silver bullet we thought it would be.
  • Cradle him and rock, swing, or sway. This is why Fischer Price sells a lot of swings. Again, not a silver bullet for us either.
  • Play loud white noise. This is the final ingredient, and the true secret weapon. When he is fussy, nothing other than feeding him can get him quiet like white noise. It works like pure magic 80% of the time.

Like I said, every baby is different and perhaps the above two statements actually ring true in most cases. Regardless, my wife and I are really surprised that nobody ever told us about overfeeding and overtiring. After figuring this out on our own, we have since come across some great resources online like these sleep guides: http://www.troublesometots.com/baby-sleep-guides/. It is actually kind of funny to see our crazy routine spelled out almost exactly in these guides.

A baby that eats properly and sleeps properly, is a happy baby. For those of you still trying to find your happy baby, I really hope this helps. I’d love to hear your comments!

Last week I missed my two year anniversary

A strange thing happened last Thursday, December 6th. I missed my two year anniversary. My wife didn’t notice either. And now that I realize it… I feel great.

Yes, two years ago I quit my job at IBM to venture out to “become an entrepreneur”. I still remember how crazy (and crazy short) that first year was on my own. There was a tremendous amount of pressure, confusion, and insecurity. Despite all of that, my goal in that first year was to establish some sort of direction. I wanted to lay a path forward to prove that leaving my day job was not just a temporary experiment; it was a fundamental change in the way I would lead my life.

The fact that December 6th passed by this year without hardly a notice is a fantastic sign. It means that I was successful in my 2011 goal. I am no longer counting the days “without a real job”. Instead, what once seemed crazy is now my normal; I absolutely can’t imagine having spent 2012 doing anything else. My company, ArchiveSocial, has made tremendous progress over the course of this past year. I made my first hire and brought the product to the market, and we now have a significant number of customers who enthusiastically believe in our solution. There is, of course, a lot more that I can share about my business experiences this year, but I’ll leave that for another set of blog posts (and yes, I’m serious about keeping up with my blog this time!).

Beyond the business, 2012 was also significant in another major way. I am now the proud father of a two-month old boy. I can’t even begin to express how that feels. Yep, you can imagine that this was an especially crazy year with both a startup and a baby 🙂 Again, since my goal is to post a lot more frequently to this blog, I’ll save the details for another time.

So yes, what happened last Thursday was significant. December 6th, 2012, was not a day that I spent reflecting on the past. Rather, it was a day in which I was intently focused on the present, and the future.

How to keep up with your blog

268 days. That’s 8 months and 25 days. And that’s how long it’s been since I lasted updated this blog. Since December 2010, I’ve written a whopping 7 posts.  Let’s not even mention how long it has been since I updated my other blog. And here I am — like the stereotypical Internet blogger — about to act like an expert on something I know very little about.

OK. So maybe rather than pretending that I have expertise to share, I am going to treat this more like an experiment: I am going to keep up with this blog by writing at least a few posts (2+) a month. Here’s how I think I can make it happen:

  • Keep it short. Really short. This means sharing just a few thoughts on a very specific topic.
  • Carve out no more than 20 minutes to write a post. Although I don’t think I could possibly be busier with all of the things going on in my life (startup + newborn), I can surely find 20 minutes here and there. Being busy, in itself, is never an excuse for anything.
  • Stop waiting for something earth shattering to write about. Just write. I’ve realized that my biggest problem with blogging is that I keep trying to find something “important enough” and unique to share with the world. Inevitably, those types of posts are much more complicated and painful to write… and end up not being very important or unique anyway.

Starting a company, and a family, has helped me realize that there so many things that happen in every day life that are worth discussing and thinking about. Keeping up with a blog is a great way to record those moments and learnings. If not for anyone else, at least for myself. Let’s see how I do!

How I met Randi Zuckerberg

Last night I had the opportunity to meet Randi Zuckerberg: former Marketing Director at Facebook, recent appointee to the United Nations Global Entrepreneurs Council, and member of the World Economic Forum’s Global Council on Social Media. And, oh yeah, she is also Mark Zuckerberg’s sister. Truth be told, meeting Randi was an opportunity available to anyone in the Triangle. She was in town to accept the 2012 Woman of Achievement Award from Meredith College.

A missed opportunity, for some

The event was hosted on campus at Meredith College and completely open to the public. I arrived about 25 minutes early and was surprised to find myself being able to choose between a seat on either the first or second row, both of which were completely open. Fortunately by 7pm, when the event was scheduled was to start, the small auditorium was mostly filled. Randi was pleased to see a large audience of young women — something she is unaccustomed to finding in the typical tech circles. It truly was a fantastic opportunity to hear directly from one of the most important figures (female or not)  in the world’s social media and startup ecosystems. Sadly, I could tell that representation from the Triangle’s own startup ecosystem was largely absent.

I am not sure why this event flew under the radar but I will certainly take a share of the blame. I heard about the opportunity several weeks ago and failed to do my part to spread the word. Local news organizations and journalists also seemed to have missed the boat. A quick search on Google News simply brings up results from Meredith’s own website. At one point, I even considered skipping out on the event myself in order to go home and “do more work”. I am extremely glad I went, however, and would like to share a few notes on the experience.

The event

After receiving the Woman of Achievement Award, Randi gave a nearly hour-long speech covering everything from her time at Facebook to her views on current social media trends.  The speech was fun and personal, and she set the tone early by saying,  “I graduated from Harvard — unlike my sibling.” Here are some other highlights and takeaways:

  • Randi was not shy about discussing both the positive and negative impacts of social media. For example,  while showing a slide of her newborn son, she explained how social media and excessive sharing will in some ways complicate his life.
  • “Social sometimes trumps everything, including product”. Her main point was that social and viral features can often lead to more success than having an overall better product. A good example is how Facebook photos took off even though there were much better photo services available.
  • Working at Facebook provided a lot “a-ha” moments on how social media is transforming the world. Randi specifically pointed out the Virginia Tech shootings as a pivotal moment in which Facebook realized that they have a greater responsibility to the world than being just a place for college kids to flirt.
  • Perhaps the best moment of the night came from an audience question asking Randi what she would have done differently, looking back, during her time at Facebook. Her answer, “Ask for more stock.”

The pitch

All in all, I found Randi to be an extremely lively, down-to-earth, and approachable person. After the speech, Meredith hosted a reception where they cut a cake and we all sang Happy Birthday. It was the eve of Randi’s 30th birthday. Those of us who decided to stick around then had the opportunity to meet and take pictures with Randi. Here was this significant figure, from possibly the most important technology company of our time (yes I said it) , and who by the way shares an un-contestable amount of DNA with the world’s second youngest billionaire,  available to meet with anyone who chose to show up. I decided to do what any self-respecting entrepreneur would do: I pitched.

When it came time to take our picture, I introduced myself as a Facebook developer. I then handed her a card for TheFriendMail,  a free Facebook-to-email app I develop on the side. I explained how a large number of blind users utilize TheFriendMail to stay connected to Facebook because it is difficult for them to navigate the actual Facebook interface. She smiled, said “That’s awesome!” (about the app), and told me she would check it out.

It was a small and simple exchange, but I was happy to have the chance to leave an impression with someone who is such a prominent figure in the social media and technology industry. I did not actually give her my name, so if she remembers me, it will be as “the Facebook developer” who  decided to show up that night.

2011 on my own

Today is officially the one-year anniversary since I left my day job in order to start a company. Wow. What a year.

First off, I can confirm that working on a startup is like living in a time warp. This was easily the shortest year of my professional life. It is funny thinking back how much time I thought I was going to have without my day job “in the way”. Heck, I even thought I would have enough time to keep up with this blog (I’m still working on that!). It is a very strange feeling to know that you’ve worked so hard and been through so much, and yet have barely gotten started.

To that extent, it is worth acknowledging that starting a business from the ground up is truly hard. This is as expected but, having been through it for a year now, I must admit that it is a very different kind of “hard”. On one hand, you have to literally create something from nothing; you start with no concrete direction, no momentum, and virtually no resources. On the other hand, it is painfully obvious that the world is full of opportunity and it is up to you to make the most of it. The odds are completely stacked against you and yet there are infinite ways to try to cheat them.

So how did things go this past year? In short: as well as I could have hoped. I learned an incredible amount about myself, starting a business, and — believe it or not — even software development. There are so many blog posts I could write about what I learned this past year, so stay tuned! I spent a tremendous amount of time and effort on activities that seemed to go nowhere but I was also fortunate to have a few great opportunities come my way — including one that came very close to generating a substantial amount of income. That opportunity didn’t work out, but another did, and I think it will actually turn out for the better in the long term. In the end, I am happy because I achieved my most important goal for the year: I was able to find my direction and lay a significant amount of groundwork for a long-term, sustainable business.

Moving forward, I am building ExactByte (my company) into a social media technology company. Thus far, we’ve created products that make social media more accessible. I am also very interested in leveraging social data for business applications. Our first solution will enable businesses who deal with compliance and legal concerns to better embrace social media. We’ve built some amazing technology and have a really exciting market opportunity ahead of us. I can’t say much else about that for now, but if you are in the RTP area, please come out to the Launch Day event in Durham on January 12th to learn more.

So… one year. Wow, I still can’t believe it! People often ask me, “How long are you going to try starting your own business?” I usually respond nicely with a vague answer, but here is the honest truth: I’ve known from day one that this is not just some experiment to try to escape the real world for a little while. It is an opportunity to fundamentally change the way I spend the rest of my life. Things are off to a good start and for that I am very thankful.

One year down, and many more to go.

This is how you change the world

Yesterday, Steve Jobs announced his resignation as CEO of Apple. With the incredible number of blog posts and articles that are being written about Jobs at the moment, I thought I would quickly reflect on one simple question: What did Steve Jobs actually do?

First, a confession: I honestly don’t know a whole lot about Steve Jobs. In fact, I was never really a big fan of Apple. I hated their computers in our school computer labs and, until just a few years ago, couldn’t understand why people would pay so much for an iMac or even an iPod. All of that has changed, of course. The iPhone is the single greatest gadget purchase I have ever made, and the MacBook Air is the most perfect laptop I have ever used. Yes, I’m a huge fan now. I still don’t know very much about Jobs, but I do know one thing: he has dramatically changed the world we live in – multiple times over.

Personal computers

The Apple II was the first commercially successful personal computer. The Apple Macintosh was the first computer to introduce the graphical user interface and the mouse to the masses. Most people – even those who work in the computer industry – probably don’t realize how much Apple did to kickstart and shape the personal computer revolution.

Computer animated films

Pixar’s Toy Story was the first full-length CGI animated film and made a major impact on the movie industry. Who doesn’t love a Pixar movie? Jobs, of course, was CEO and transformed Pixar from a hardware company into a movie studio.

Portable music players

The iPod was obviously not the first portable MP3 player, but it was clearly the most impactful. What I find most striking his how it changed the buying habits of the mass consumer market: despite all of the cheaper alternatives, the vast majority of people opted for the well-designed product with the highest-quality sound and headphones.

Digital music distribution

iTunes revolutionized the music industry with its first sustainable business model and distribution model designed for the Internet era.

The modern smartphone

Whether you love it or hate it, the iPhone single-handedly transformed the smartphone and the industry around it.

The app store

A revolution in business models and digital distribution –  yet again!

Tablet PCs

Another, and likely final, example of a pre-existing concept that only Steve Jobs was able to deliver in a way that transforms how we consume content and utilize technology.

Those are an amazing number of accomplishments for one lifetime. It may be cliche to be enamored with Steve Jobs, but it would be irresponsible to not be inspired by him.

8 reasons now is a great time to be

Recently, Varsha and I have been watching the Story of Us series about the history of America. It is really fascinating to see how the various inventions over time helped America develop into the world’s leading superpower. We highly recommend watching it – I’ve never cared about learning history but I truly love this series. To be honest, it has me thinking about what it would be like to be born in a different time period. OK, so maybe the colt revolver and the cotton gin are not my thing, but even the computer is now nearly 70 years old and has gone through a number of exciting innovations and developments.

As someone who likes to create new things, I can attest to the fact that is easy to get caught feeling like we’ve already missed out on some “gold rush” period of invention and discovery. All the good ideas and their corresponding website domains have been taken, right?

To make matter worse, there are a number of topic and trends we continuously hear about in the technology realm that quickly start to feel over-hyped. But perhaps… easy access to information has caused us to under-appreciate new advancements as they occur. I thought I’d take a few minutes to step back and consider the various trends. And the more I think about them, the more I realize that we are in the midst of a particularly significant age of innovation that will alter the world we live in. Here are eight topics and trends worth considering:

Mobile computing: Perhaps the most obvious. Ever stop and think about the impact of the cell phone? It has revolutionized the way we work, travel, and live. And it did this by simply giving us access to the phone system from our pockets. Well, we now have access to the entire Internet from our pockets through devices that have fairly significant computing power – the possibilities are endless. Oh, and let’s not forget about the war between Apple and Google (and Microsoft, sort of?) to dominate the mobile space. It’s going to be a good one.

New computing interfaces: With the advent of the iPhone and a host of other touchscreen devices, it is obvious that more and more devices are going to incorporate touch computing. Equally significant are gaming systems like the Nintendo Wii and Xbox Kinect. Together, these technologies are ushering in a new age of gesture-based input. Furthermore, I’m wondering if it won’t be long before we finally see voice-driven computing take off. The way we interact with devices and the world around us could change significantly in the relatively near future (think sci-fi movies).

Social: How can I not mention social? Some people might claim that Facebook and Twitter are a waste of time, but there is really no denying that social technologies are changing the world. There is something fundamentally significant about being connected. Whether it’s sharing with the people you know, broadcasting in real-time to an audience of followers, or upvoting articles on a community-driven news site, the more ways that information can flow freely, the better society will be for it. Social will continue to disrupt industries and enhance the way we communicate.

Entertainment: It is clear that technology has been trying to revolutionize the music and movie industries for the past several years. Although these industries have been resistant to change, we have already seen some pretty big advancements. We can now stream music from services like Pandora and Spotify, watch movies and tv shows on demand using Netflix and Hulu, and manage our digital content on Amazon and iCloud (well, coming soon). Equally as exciting as the technology is the transformation within business models.

Location: Another obvious topic you read about in every technology blog. Worth mentioning because I think it’s a nut yet to be cracked, and there are a lot of folks trying to figure it out. Whether it’s where we are, where we’ve been, or where we’re going, there is obviously a lot of value in processing information within the context of location.

Politics: Yes, politics. The 2008 election was a breakthrough year for politics in terms of technology. The way the Obama campaign’s utilized their website, online advertising, email campaigns, and the Internet as a whole was simply masterful. You can bet that other campaign strategists took notice and that 2012 is going to be an incredible, high-tech political year. The country has never been more engaged in politics and social media will most certainly be at the fore-front.

Local commerce: Whether or not you think the daily deal phenomenon is good for business, you have to admire what companies like Groupon have done to connect consumers with local businesses. Coupled with some aspects of location-based services such as Foursquare, local commerce is an extremely hot area to watch out for – particularly because there is an obvious business model baked in. I am sure there will be a lot more innovation around finding a sustainable win-win for both consumers and businesses.

Startup culture and celebrity geekdom: Largely thanks to blogs like TechCrunch and Mashable entering the mainstream, there has never been a more exciting time to be involved with startups. Heck, even CNN is now writing about every single Apple announcement and Facebook feature that comes out. It’s awesome to think that some of the biggest geeks in the world (ahem, Zuckerburg) have the same name-recognition as Hollywood stars. Ok, so Zuckerburg did have a movie made about him. But there are other geek celebs such as Michael Arrington, Kevin Rose, Robert Scoble, Melissa Mayer, Paul Graham, and Eric Ries that are well-known and have quite a following. Technological advancement is not just about the products but also about the people you impact – and it is wonderful to see people being recognized for it.

Are you as juiced as I am about the current innovation climate? What did I leave out? I’d love to hear your thoughts. Oh, and follow me on Twitter.

One long, intimate month with the Facebook API

As I announced back in December, my goal for 2011 is to launch a full-fledged software startup. But first – I decided to spend a few weeks creating a Facebook app. Hey, why not? 🙂 As many of you know, I run a Twitter over email service that has does really well within it’s particular niche. I’ve felt for a long time that a similar service would make a lot of sense for Facebook and finally decided to invest the time in creating it. Developing for the Facebook platform definitely has its challenges. I thought I’d take a few moments to reflect on the experience and share some of the technical details of working with the Facebook API.

You might have seen news coverage about the Breakup Notifier app that just came out. I was planning to release a similar feature more than 2 weeks ago. We jokingly called it the Stalker Alert. However, during a private beta test with several users, I discovered I wasn’t able to provide an accurate notification due to unreliable data returned by the Facebook API. Kudos to the developer if he found a way to make it happen but I’m quite doubtful that his app always reports accurate information. I explain why below.

Background: “Project Zuckermail”

The purpose of this post is to talk about the Facebook API but I do want to give some background on my app. If you really just want to read about the API, feel free to skip ahead.

The basic idea behind my app was to create a fully functional Facebook client that would work entirely over email. You would be able to update your status, post on friends’ walls, get your news feed, “like”, comment, and more just by sending email. I also planned to include a few interesting email alerts in my initial launch. I knew I could create better versions of Facebook’s standard email notifications for “likes” and comments, but I decided to hold off on those so that I could focus on my own unique email alerts first. I codenamed the app “Project Zuckermail”.

The two emails alerts I settled on were a Birthday Alert (obvious choice, but I have a unique implementation) and what I called the “Life Events Alert”.  Despite the boring name, The Life Events Alert was the flashy feature that I thought would really help my app get noticed. The idea was that you could create the alert and be notified whenever certain important events occurred in your friends’ lives. For example: relocations, job changes, and of course – those crazy breakups.

I originally estimated the project would take less than a month to develop based on the fact that I could re-use much of the knowledge, server configuration, and code assets from my existing Twitter app. Last week, after five weeks of development and roughly 10,000 lines of code, I finally released it. So what took so long? The Life Events Alert – and specifically, the Facebook API – really threw a wrench in my plans.

I spent nearly two weeks on the Life Events Alert feature alone, and because of data integrity and consistency problems, I ultimately killed it. I lost a lot of time and I lost my killer feature. I also had to scramble to come up with some other features to make my app “interesting enough” to get noticed. After looking around for another good gap to fill, I decided to add really nice email notifications for Facebook pages. Unfortunately, Facebook launched their own page notifications (albeit less useful) the day I finished my version of the feature. Hence, to further compensate, I went ahead and added the better email notifications for “likes” and comments that I had originally planned to put off. Sigh.

Fortunately, the end result is a fantastic app that I am really proud of. I haven’t yet received the type of blog coverage I was hoping for — you know, the kind Breakup Notifier received — but I’m getting fantastic feedback from new users. Several folks have told me that my app has helped them get more active on Facebook. In particular, I’ve received a lot of great comments from blind and visually impaired users who find my app to be a more effective way to access Facebook. Ultimately, that type of feedback is what makes building an app like this so rewarding.

In case you are wondering, I’m intentionally omitting the name of my app because I do not want this blog post to mix in with search results for the app. However, it’s ready to go and you can sign up for the free beta here. And no – I didn’t go with “Zuckermail” as the actual name. Trust me, I really wanted to. I’m sure the folks reviewing app submissions at Facebook have a sense of humor but I’m not willing to find out the hard way. 😉

The Facebook API

Alright, so let’s talk about the Facebook API. If you’ve ever looked at the developer docs then you know how easy it is to get lost. Facebook has several APIs for both server and client-side access. I primarily focused on the Graph API and FQL in my development.

Graph API

I really like the concept of the Graph API. In particular, the notion that every object in the Facebook universe (eg. person, wall post, photo) is a node in a graph with it’s own connections seems to make a lot of sense. The Graph API also feels like a true REST API – certainly more so than the API that Facebook actually refers to as their “REST API” (which is really RPC over HTTP). For example, make a request for https://graph.facebook.com/anilchawla and you get my profile. With an access_token and the right permissions, you can see more of my profile and list “connections” such as https://graph.facebook.com/anilchawla/friends and https://graph.facebook.com/anilchawla/photos.

I should point out that the URLs in the Graph API do not continue to follow a typical REST convention. For example, you might request https://graph.facebook.com/anilchawla/albums and see that I have an album with an ID of 12345. The URL for that album is https://graph.facebook.com/12345 and not https://graph.facebook.com/anilchawla/albums/12345. This might upset REST purists but I didn’t find this to be an issue in practice. It turns out that IDs in the graph are universal and this simplification is kind of nice. All in all, I’d say I’m a fan of the Graph API concept. However, as I explain below, there are some issues with the data you get back from the Graph API.


FQL is Facebook Query Language and is a SQL-like language for accessing Facebook’s data model – or at least the data model they are willing to expose via the API. To be honest, I think the concept of FQL is awesome. It’s not quite as powerful as SQL (for example, no joins) but the ability to execute your own complex database-like queries is really cool. It’s also impressive how much data you can access with FQL. For example, in order to implement my Page Notifications feature, I’m using a set of FQL queries that check for comments on any wall post, photo, or album ever created on the page. I tested it by commenting on a Starbucks post from 2009. Keeping in mind how much data Facebook processes and stores each day, it’s pretty amazing that I can run a non-trivial query across data that is nearly 20 months old.

The downside of FQL is that you are limited by the data model that Facebook exposes. There are some cases in which I have to combine results from multiple tables in order to find a specific object. Even though the user should be able to access the target object (e.g a photo), the result comes up empty because some of portion of the query fails a privacy check (e.g. can’t select the album containing the photo). The other issue is that some of the FQL tables are just bad. Really bad. For example, this is the schema of the “notification” table:

You can imagine how much fun it is to re-implement Facebook’s email notifications when all you get is some pre-generated text and HTML, and none of the underlying metadata. Perhaps this is by design?

Data integrity and consistency

It’s great if your APIs are conceptually well-designed but what really matters is how well they work. This is where I experienced the most grief with Facebook’s APIs. Based on my experience, I do not believe that 3rd-party clients can rely on the data provided by the Facebook API. If the data you need is there – great. In most cases it will be there. But don’t depend on it. I learned this lesson the hard way after completely implementing the Life Events Alert I mentioned above. This is also why I don’t think an app like Breakup Notifier can be implemented in a reliable fashion. Here are the issues I encountered:

Fields disappear and reappear randomly
When requesting a person’s profile you can indicate which fields you want to receive. For example, you can request: location, relationship_status, education. Obviously, some people might not have this information in their profiles or they might have privacy settings that prevent an app from accessing the information. Assuming the field contains a value and is accessible, though, you would think that you would always see the information in the profile, right? Wrong. It turns out that the Facebook API sometimes drops entire fields from the response even though they should be there. I consistently saw this problem with the location attribute and also saw it happen with other attributes such as relationship_status and even gender. My private beta testers kept getting notifications that there friends had moved. Oops.

Attributes within fields disappear and reappear
It was annoying to see missing fields but I thought I could work around that. Even worse, though, is that the API will sometimes drop specific attribute data within a field. For example, one feature of the Life Events Alert was that it would notify you if your friends updated their job titles or changed majors in college. Unfortunately, even if the API returns the work field and education field, it might temporarily omit the position and concentration attributes of those fields. Did John just become a Lead Developer at Google or was his position at Google just missing the last nine times we checked?

Mutable IDs
Finally, this issue was more of an annoyance than a real problem but it’s worth mentioning. It turns out that practically everything in the Graph API has an ID. For example, even the year attribute of the college you attended as its own ID. Why does 2004 need an ID? I don’t know. In any case, if you saw an object with an ID you would probably expect the ID to stay the same. Nope! During the course of just a few days, I saw the IDs of several objects change including the IDs for job titles, degree concentrations, and yes – even years. I realized quickly that I had to simply ignore IDs when comparing data.

To be fair, Facebook probably has performance and scale reasons for these “data consistency” issues. In fact, it’s probably by design and just not something they explain to developers. In retrospect, I should have probably run some better experiments before going ahead and implementing my entire friggin feature. Lesson learned.

Second-class citizenship

Despite the issues I describe above, it’s still great that Facebook provides an API for developers like myself. There is a fair amount of functionality they expose and I was able to implement almost all of the features I planned. That said, I have to accept that my app is a “second-class citizen” in the ecosystem. Here are some reasons why:

  • 3rd-party apps are limited to 10 posts per day per user through the API. I understand that this limit was added to prevent spam, but it’s really hard to be a legitimate replacement client for Facebook with such a low limit.
  • Posts made by 3rd-party apps do not get a “share” link next to them in the news feed. Shouldn’t all posts be treated equally?
  • 3rd-party apps receive inconsistent data. Yes – this is a reference to the issues I describe above. They’re worth mentioning again.
  • There is no API for “poke”. Yes – the feature that started it all and is at the core of Facebook’s multi-billion-dollar valuation – completely inaccessible by 3rd-party apps. It’s a shame. Not to mention that other APIs – such as “write” access for Facebook messaging – are missing too.

Developer Support

Lastly, this is where I think Facebook really falls short.  On the surface, Facebook seems to have a good number of resources available to developers: documentation, forums,  and bugzilla to name a few. However, read the documentation and you will inevitably find inaccurate information. Search the forums and you will see unanswered post after unanswered post. Browse bugzilla and you will see countless “unconfirmed” bugs that have been around for months. I can’t tell you how many bug reports I read in which developers had to repeatedly beg for an answer from Facebook staff. In fact, there’s a reason I’m writing a blog post here and not posting bugs and asking questions on the Facebook forum. The two questions I previously posted on the forum went completely unanswered and I quickly realized that it was a black hole. This is in stark contrast to the Twitter community in which there is an active mailing list and frequent responses from Twitter staff. Ultimately, people will continue to develop for Facebook because it is such a large and valuable platform. However, there is a lot more that Facebook can do to support its 3rd-party developers and create an ecosystem that truly thrives.


All in all, I’m glad I had a chance to work with the Facebook API and was able to create my Facebook over email app. Facebook will clearly be an important platform for a long time to come. I hope the information in this post helps those who are thinking about developing on the platform. I would also like to know if there is anything I misunderstood or misstated about the way the Facebook APIs work. I’ve only spent a month – albeit a long one – developing on the platform and I’m sure there is a lot more for me to learn. Leave your comments!

First few lessons learned as an entrepreneur

It is  hard to believe that it has already been three weeks since I left my day job. Although I have yet to start on what I would consider to be my real startup, these past few weeks have been really busy. I’ve been working on an existing project, my email-to-Twitter service, and trying to figure out how to maximize revenue without continuing to spend a disproportionate amount of effort developing and maintaining the service (this is both fun and frustrating).  Now that I am on “Christmas vacation” (mandated by the big boss), I thought I would take a moment to reflect on a few things I’ve learned during my first few weeks as a full-time entrepreneur:

It’s tempting to move too fast

My last day as a full-time employee was on a Monday and I immediately hit the ground running on Tuesday. Since then I’ve been trying to move at a break-neck speed. There is an enormous sense of urgency and I’m now able to move fast without other commitments or distractions in the way.  Sounds great, right?

The problem is that it is really easy to get sucked into task after task and feeling like you can’t waste time by doing anything else. Should I  take 30 minutes to catch up on RSS feeds and my Twitter stream? No way. Take a shower and eat lunch? Maybe later. Can I just stop and think? Ah, when I have more time.

Obviously, this is not the most effective mode of operation because there are valuable benefits (both direct and indirect) to those other activities. I have to keep reminding myself: Move forward as fast as you can but don’t lose your balance.

Time truly is money

Perhaps the biggest shift in perspective when moving from a salaried day job to self-employment is the realization that you make money based on how you spend your time. This may sound painfully obvious — and it is — but it’s not something that I fully appreciated  as a salaried employee. After all, I had no way of measuring the impact of my contributions to the bottom line, and even if I did, it would not have affected my compensation in a meaningful way.

Now, everything  I do involves an ROI calculation. This is both good and bad (see point about “moving too fast” above), but overall I think it makes sense to operate in this way. There’s no denying it: my income is a measure of how well I convert time into money.

Multi-tasking is necessary but inefficient

Our intuition tells us that being able to do multiple things at once will make us more efficient overall. The truth, though, is that most of us are *not* able to work through multiple things at the same time: there is just too much cost associated with task-switching. We are often more effective when we focus on one thing at a time and move through our tasks sequentially.

This is not necessarily a new realization for me but it is certainly a much bigger problem. As an employee of a large organization, I always had a lot of different responsibilities but they fell within the general scope of a software engineer. As a solo entrepreneur, on the other hand, I am responsible for everything: understanding the market and competition, keeping up with news and trends, prioritizing features, designing the look and feel, writing the documentation, composing and sending marketing emails, reaching out to potential business partners, acquiring press coverage, monitoring analytics, supporting existing customers, and — oh yes — developing the software itself.

Figuring out which activities to prioritize and when to work on each them is tough.  It is very tempting to continually switch between tasks to ensure that I am making progress on everything that is important, but ultimately this tends to slow me down. For now I am approaching this problem like a software engineer: Schedule tasks as meaningful but atomic activities (i.e. must be completed from start to finish) and execute them in sequence.

In many ways, the issues I’ve described above are not unique to self-employment; everyone has to deal with time management and task prioritization. How do you deal with your insanely busy day? I’d love to hear your thoughts.