Tuesday, September 15, 2009

Augustus Ceasar: Data Grows Up

As the web grows more densely interconnected, challenges begin to arise.  How does one balance the demand for data interoperability with the demand for privacy?  How does one maintain consistency within a technological framework fundamentally designed to be flexible?  How can you avoid the labor and challenge of crafting redundant data, requiring a user to supply information that’s already a part of the cloud?
The Facebook project has done an outstanding job engineering around these challenges, building what is currently one of the leading social networking sites.  Millions of people use it for hundreds of different reasons, leveraging an ever-increasing volume of user information to build new services in a controlled matter.  With the proper design, the site has become the center of a small universe of activity based around the notion of digital community—the sharing of notes, photos, the organization of political movements and Scrabble games.

To do all this, Facebook has had to figure out how to compromise with developers: how to involve third parties while controlling data access and application behavior.  They’ve literally re-implemented a wide assortment of web technologies to make this happen: FBML to allow developers to code near-HTML web pages capable of invoking Facebook services; FBJS to allow developers to code dynamic web page behavior while forbidding access to undesired operations and out-of-scope Facebook components; FQL to give developers access to Facebook data in a predictable, controlled, and optimized way, requiring the necessary authentication and abstracting away data that could compromise the security of the site.

In many ways, these approaches are brand new: they’re creating new implementations of already-modern languages.  But the fundamental paradigm Facebook is using is rather old: they’re providing a controlled environment for developers to practice much the same thing they’ve been doing before, abstracting away the complex translation necessary to make their code operate cleanly.  It is giving developers a new environment to practice old behaviors.

So characteristics abstraction enable it to be so effective?  With the recently fixed and more-stable-than-ever GRUMPs, we’ll be probing these questions by interviewing legendary Roman emperor Octavianus Augustus Caesar.

Much like modern developers, Augustus Caesar rose to power amidst an environment in profound flux, and great organizational instability.  Yet he thrived in such a chaotic environment, and rebuilt the Roman Empire in a way that lasted centuries after his death.  Creators of application frameworks could learn much from his political acumen.  Without further ado:

Kurt: Augustus Caesar, it is a great honor to have you here.  You’re a figure of rare notoriety and influence.
Augustus: The honor is mine.  I have long thought about how I could address the future… the wisdom I could impart to my successors’ successors.
Kurt: So Caesar, how is it that you found a way to organize a state rapidly tending toward decay?
Augustus: You must first understand the cause of that decay; all people want two things: freedom and power.  These are the forces most actively working against any attempt at order, for two reasons: freedom threatens, since every man chooses a different route with his liberty; power threatens because it is scarce—it only comes at the expense of others.  Fundamentally, you will realize that freedom and power are the same thing: power is simply the point at which your freedom overrides another’s.
Kurt: So do you seek to eliminate freedom and power from your developer’s—er, I mean, citizens?
Augustus: No, no.  It is far more subtle than that.  If you eliminate freedom, others will not follow you.  You can never remove a man’s desire for freedom, and where a man has unmet aspiration, he is dangerous.  Too with power; you cannot rob all men of power for they will fight to win it back.  Rather, you must give to each man the smallest freedom and power they require to be content.  You must give to each city enough independence to thrive gratefully, but never so much that they feel capable of conquering their limitations.
Kurt: So one must carefully craft architectures to allow programmers to modify what they need without affecting the systems that you yourself are defining?
Augustus: You speak with the confidence and obscurity of the sibyls.
Kurt: I mean, you give power to others only where it doesn’t intrude upon your own?
Augustus: All granting of power intrudes upon your own.  Rather, you must only sacrifice as much power as is required to make others feel powerful.  A man governs best when he believes something is his.
Kurt: Then give a developer the tools to make an application feel and behave how they wish, but maintain control over the data.  I mean… keep local customs alive?
Augustus: You recruit soldiers from around the world.  They will remain loyal to you if you feed them and permit them to practice their own religion.  They must respect your rules, but you must maintain rules men can respect.
Kurt: Right, so no Javascript pop-ups.
Augustus: Moreover, you exercise power only where necessary, and in those places, exercise ruthlessly.  In other areas, simply give them rules they must follow to maintain their power, and they will do so.  Let your borders be protected by the client states, not by your own legions.
Kurt: So, don’t try to control the kinds of applications that flourish, merely provide them an incentive an opportunity to flourish, and they will empower your architecture...
Augustus: The people will celebrate Rome if they believe their city to be both Roman and theirs.
Kurt: Augustus Caesar, your wisdom inspires.  We are almost out of time, but do you have any closing thoughts?
Augustus: A principate is all-powerful, but never lets himself be perceived as such.  Freedom is the most powerful political illusion, more pure and celebrated than a vote.
Kurt: So, one must emphasize the power you grant third party developers--let them use your information, but not change it.  There’s so much more to learned, but I'm afraid our time is up.  Thank you, Caesar, for coming.

Perhaps it’s a stretch to compare Facebook to great historical rulers.  But in many ways, the challenges and solutions are the sames.  Facebook is manipulative in an almost political sense with its users and developers:  It offers rich functionality and hides the costs (to privacy and such) by providing users the impression that they fully control their data, and developers the impression that they fully control their application.

If Facebook had simply provided a high-level API to build applications, it would require developers to approach on bended knee.  A simple API doesn't give a developer a feeling of power over data, a sense of independence and excitement so necessary to maintaining a user-driven application.  If Facebook were upfront about the ways in which they use user data in advertisements, people would feel violated.  But give a user a chance to deny an application access to their data, and they feel free.  Give a developer a chance to program in a familiar language, and they feel powerful.  They feel like Facebook's application is theirs.

Facebook has consistently impressed me with its design.  A look beneath the hood has only reinforced my respect.  But maybe that’s just what they want me to think.

No comments:

Post a Comment