I’ve been thinking about software architecture lately, mostly as a result of continuing to suffer at the hands of Facebook’s horrific platform and API.

For those who haven’t tried to use it, Facebook’s platform is notoriously atrocious. It’s badly documented and doesn’t always do what the documentation says. It breaks regularly. It rolls out changes without notice. The entire architecture of the platform changes regularly in dramatic ways. Support for older implementations is often promised but then rarely delivered. Arbitrary changes are justified by claims of “deprecation,” a word that means something specific in software development, namely that one operation has been superseded by another (for Facebook it means “abandoned”).

It’s possible to gripe about Facebook’s wonky infrastructure and their lack of commitment to a coherent, stable, operational platform. But a more interesting question presents itself: why is Facebook so uninterested in software architecture? It seems startling for a company supposedly worth $50 billion.

Some of you may remember the glory days of Microsoft Windows software development. Major and minor rollouts of Windows, MFC, and even VisualBasic infrastructures were always a very big deal, even after the Internet made patches and updates relatively easy. There are a lot of nasty things one can say about Microsoft, but their development tools always worked the way they advertised.

In principle, the values of software architecture haven’t changed. Mission-critical applications still demand low-risk, high tolerance infrastructures designed to work all the time or nearly so. Perhaps what has changed is the applications. Nothing’s mission-critical on Facebook. Developers may lose money, sure, if Facebook’s infrastructure behaves erratically. But it was pretend money anyway. Nobody will die. Nothing really depends on Facebook. It’s all optional, all expendable. The same is true for Twitter, which may partly explain why that company doesn’t much mind that its service goes down frequently.

I suspect that this attitude is more and more pervasive, as more and more services that provide developer infrastructures and APIs don’t have strongly meaningful reasons to exist, save to provide expendable distraction.

published February 17, 2011

Comments

  1. spyfoxguy

    Well said! Everyone knows the internet is free, requires no infrastructure, and requires no electricity.

    I would argue that facebook IS mission critical after the advent of Cow Clicker. We NEED our daily clicks!

  2. Robert Cooper

    I guess the thing about the Facebook APIs I always notice is the code they throw over the wall to use them. Both the Java and PHP clients I have used are horrendously written. Indeed, the Java client for the “Social Graph API” throws java.lang.Errors. Not exceptions, Errors. These are, like deprecation, very narrowly defined and something average joes would almost never use.

    I always can’t help but wonder if the code they use internally is as bad as what they release. That would explain a lot.

  3. David Rylance

    This is really, really interesting, Ian. Especially the resonances of expendable distraction, non-dependability and optionality as a way of thinking about the obsolescence of the mission critical in other things, not least financial tools and structures. Thank you.

  4. Charles

    The instability of Facebook’s platform reminds me of the reliable unreliability of the electrical grid in certain places on the globe. I suppose that means that Facebook isn’t just the first virtual nation, it’s also the first virtual third-world banana republic.

  5. Gilbert

    It seems unfair to claim that facebook isn’t mission critical for anyone. Maybe not the apps, but I bet a facebook outage could cause some people a lot of trouble, especially when you look at its use to organize protests and political actions in the middle east and other places across the globe. We would be pretty pissed if our phone service just cut out for no good reason.

  6. Jason Sirota

    I don’t agree that twitter doesn’t mind that their service “goes down” frequently. In reality, I think they very much do mind, a lot, and are making giant investments so that doesn’t happen including completely rewriting their backend infrastructure in !RubyOnRails (Scala/C++).

    They got hit with a problem most of us would give our left arm to have: they launched a very simple service that became wildly successful beyond any sort of pre-optimization they could have done. It’s as if you served a small dinner for 2 and 85,000,000 people showed up.

  7. Cat Lee

    Hi Ian – Thanks for posting. We hear you. We know we can do better and that you and all other Platform developers deserve better. There’s now a team in place with a plan to make things right (Operation Developer Love). All of us have built things on our Platform and can relate. Please bear with us. I’m optimistic that we can get to a place where we can deliver on support and stability. We’ve seen slow, but forward progress:

    – Bugs: Focused on velocity of triage first. We just got the team to the point that we can triage every single bug reported in a given week (we’ve now done this for the pass two weeks). Next week, we are working on the velocity of fixes. You should see a slow but steady up-tick there. Unfortunately, these things take time.

    – Docs: We’ve reorganized the dev site and updated the getting started and core concept guides. We’re next going to go through reference docs to make sure they’re up to date and provide sample code in every major language. We just enabled the timestamp of when the docs were last updated.

    – Stability: Internally, we have a process for deprecating features (we will message all developers using the feature (API, FBML tag, etc.), add it to the roadmap, and when possible, provide a migration path.

    If any of you have any questions or want to discuss more, feel free to send me a FB message (cat).

  8. Ian Bogost

    @Robert Cooper

    “I always can’t help but wonder if the code they use internally is as bad as what they release. That would explain a lot.

    Good question. I can only speculate, and thus I’ll refrain from an answer. I do know that Facebook has invested in considerable software development related to performance, which makes sense.

    @Charles

    LOL

    @Gilbert

    How’s that Kool-Aid taste?

    @Jason Sirota

    …they launched a very simple service that became wildly successful beyond any sort of pre-optimization they could have done

    True… which to me just emphases the expendability of the service.

    @Cat Lee

    While I appreciate that Facebook has developer community outreach folks like you dealing with troublemakers like me, I fear you’ve missed the point of my post. The post is not about the fact that you’re doing a shitty job creating and supporting the platform (which you are, but you know that already). Rather it’s about what it means that you don’t really have to do a good job.

  9. Jason Sirota

    …they launched a very simple service that became wildly successful beyond any sort of pre-optimization they could have done

    True… which to me just emphases the expendability of the service

    @Jason Sirota: perhaps, but to me it highlights the replace-ability of the service! Say for instance, if they started charging or streaming ads. Live by the free, die by the free.

  10. John

    I think this is coming from the culture of the .com company.

    They have this culture because of two reason:

    1. Internet are very creative, company intend to verify their business before complete a quality service. So they can low down the risk.

    2. For a website, they can fix a bug at any time, they don’t need to send a patch to user, the cost of fix bug are very low, so they don’t test very careful before launch some feature.

    My english are not good, hope you can understand what i mean. LOL

  11. Noel Proulx

    I know what you are getting at with ‘poorly documented’ and changes you don’t see coming. I have been working in my spare time to develop a flash based facebook app and I swear they look at exactly what I am trying to do so they can change it. Their docs on integrating flash and the graph need a rosetta stone IMO. Then add in their new rules on advertisers (I was planning on using Mochi over those scam earn ‘bucks’ for filling out this offer deals to monetize my game but that seems to be out for now). Think I am going to connect style apps from my own site instead.