Damien Katz recently caused a stir on a bunch of the blogs I read with his post entitled REST, I just don't get it where he wrote
As the guy who created CouchDB, I should be a big cheerleader for RESTful architectures. But the truth is, I just don't get it.
For CouchDB, REST makes absolutely insanely perfect sense. Read a document, edit, put the document back. Beautiful. But for most applications, enterprise or not, I don't see what the big win is.
I know what is wrong with SOAP, and it has everything to do with unnecessary complexity and solving the same problems twice. But what is the big advantage of making all your calls into GET PUT and DELETE? If POST can handle everything you need, then what's the problem?
I guess what I mean to say is just because SOAP is a disaster, doesn't somehow make REST the answer. Simpler is better, and REST is generally simpler than SOAP. But there is nothing wrong with a plain old POST as an RPC call. If its easy to make all your calls conform to the RESTful verb architecture, then that's good, I guess.
His post made the rounds on the expected social news sites like programming.reddit and Hacker News, where I was amused to note that my blog is now being used as an example of silly REST dogma by REST skeptics in such discussions. From reading the Damien's post and the various comments in response, it seems clear that there are several misconceptions as to what constitutes REST and what its benefits are from a practical perspective.
The Representational State Transfer (REST) architectural style was first described in Chapter 5 of Roy Fielding's Ph.D dissertation published in 2000. It describes the architecture of the Web from the perspective of one of the authors of the HTTP 1.1 specification which was published the year before in 1999. Around the same time Don Box, Dave Winer and a bunch of folks at Microsoft came up with the Simple Object Access Protocol (SOAP) which they intended to be the standard protocol for building distributed applications on the Web.
Over the following years SOAP was embraced by pretty much every major enterprise software vendor and was being pushed hard by the W3C as the way to build distributed applications on the Web. However a lot of these vendors weren't really interested in building software for the Web but instead were more interested in porting all of their technologies and scenarios from enterprise integration technologies like CORBA to using buzzword compliant XML. This led to a bunch of additional specifications like XSD (type system), WSDL (IDL) and UDDI (naming/trading service). Developers initially embraced these technologies enthusiastically which led to the enterprise software vendors pumping out dozens of WS-* specifications. During this period not many thought or talked much about REST since no one talks about boring Ph.D dissertations.
In 2002, a canary in the coal mine emerged in the form of Mark Baker. On mailing lists frequented by Web services types such as xml-dev and xml-dist-app, Mark began to persistently point out that SOAP was built on a bad foundation because it fundamentally ignored the architecture of the Web as defined by Roy Fielding's thesis. At first a lot of people labeled mark as a kook or malcontent for questioning the trend of the moment.
By 2005, the industry had enough experience with SOAP to start seeing real problems using at as a way to build distributed applications on the Web. By that year many developers had started hearing stories like Nelson Minar's presentation on the problems Google had seen with SOAP based Web services and sought a simpler alternative. This is when the seeds of Mark Baker's evangelism of Roy's dissertation eventually bore fruit with the Web developer community.
However a Ph.D dissertation is hard to digest. So the message of REST started getting repackaged into simpler, bite-sized chunks but the meat of the message started getting lost along the way. Which led to several misconceptions about what REST actually is being propagated across the Web developer community.
With that out of the way I can address the straw man argument presented in Damien's post. Damien states that building a RESTful Web Service is about using the HTTP PUT and DELETE methods instead of using HTTP POST when designing a Web API. In fact, he goes further to describe it as "the RESTful verb architecture" implying that choice of HTTP verbs that your service supports is the essence of REST.
This is incorrect.
REST explains how the Web works by defining the set of constraints on the various components in the current Web architecture. These constraints include
interaction is based on the client-server architectural style. User agents like Web browsers, RSS readers, Twitter clients, etc are examples of Web clients which talk to various Web servers without having a tight coupling to the internal implementation of the server.
communication between the client and server is stateless. The benefits of HTTP being a primarily stateless protocol is that statelessness increases scalability and reliability of services at the cost of introducing some complexity on the part of the client.
the Web architecture supports caching by requiring that requests that are cacheable or non-cacheable are labeled as such (i.e. via HTTP method and various caching related headers).
there is a uniform interface between components which allows them to communicate in a standard way but may not be optimized for specific application scenarios. There are four interface constraints: identification of resources; manipulation of resources through representations; self-descriptive messages; and, hypermedia as the engine of application state.
there can be multiple layers between client and server which act as intermediaries (e.g. proxies, gateways, load balancers, etc) without this being obvious to the requesting client or accepting server.
When you read the above list, the first thing you will note is that it describes the architecture of the World Wide Web. It doesn't describe the architecture of "a typical enterprise" or the internals of a cloud computing application.
Building a RESTful Web Service simply means paying attention to these characteristics of the Web. As you read them, some practical guidelines start becoming obvious. For example, if you want to take advantage of all the caching infrastructure that is built into the Web infrastructure, then you should use HTTP GET for services that retrieve data. This is just one of the many things Web Services built on SOAP got wrong.
The uniform interface constraints describe how a service built for the Web can be a good participant in the Web architecture. These constraints are described briefly as follows
Identification of resources: A resource is any information item that can be named and represented (e.g. a document, a stock price at a given point in time, the current weather in Las Vegas, etc). Resources in your service should be identified using URIs.
Manipulation of resources via representations: A representation is the physical representation of a resource and should correspond to a valid media type. Using standard media types as the data formats behind your service increases the reach of your service by making it accessible to a wide range of potential clients. Interaction with the resource should be based on retrieval and manipulation of the representation of the resource identified by its URI.
Self-descriptive messages: Following the principles of statelessness in your service's interactions, using standard media types and correctly indicating the cacheability of messages via HTTP method usage and control headers ensures that messages are self descriptive. Self descriptive messages make it possible for messages to be processed by intermediaries between the client and server without impacting either.
Hypermedia as the engine of application state: Application state should be expressed using URIs and hyperlinks to transition between states. This is probably the most controversial and least understood of the architectural constraints set forth in Roy Fielding's dissertation. In fact, Fielding's dissertation contains an explicit arguments against using HTTP cookies for representing application state to hammer this point home yet it is often ignored.
At this point, the benefits of building RESTful services for the Web should be self evident. The Web has a particular architecture and it makes sense that if you are deploying a service or API on the Web then it should take advantage of this architecture instead of fighting against it. There are millions of deployed clients, servers and intermediaries that support REST and it makes sense to be compatible with their expectations.
This doesn't mean you have to use DELETE and PUT when POST might suffice. It does mean understanding the difference between using POST versus using PUT to other participants in the Web architecture. Specifically, that PUT is idempotent while POST is not so a client of your service can assume that performing the same PUT two or three times in a row has the same effect as doing it once but cannot assume that for POST. Of course, it is up to you as a Web service developer to decide if you want your service to provide a more explicit contract with clients or not. What is important to note is that there is a practical reason for making the distinction between which HTTP verbs you should support.
There are other practical things to be mindful of as well to ensure that your service is being a good participant in the Web ecosystem. These include using GET instead of POST when retrieving a resource and properly utilizing the caching related headers as needed (If-Modified-Since/Last-Modified, If-None-Match/ETag, Cache-Control), learning to utilize HTTP status codes correctly (i.e. errors shouldn't return HTTP 200 OK), keeping your design stateless to enable it to scale more cheaply and so on. The increased costs, scalability concerns and complexity that developers face when they ignore these principles is captured in blog posts and articles all over the Web such as Session State is Evil and Cache SOAP services on the client side. You don't have to look hard to find them. What most developers don't realize is that the problems they are facing are because they aren't keeping RESTful principles in mind.
Don't fight the Web, embrace it.
FURTHER READING
Now Playing: Public Enemy - Don't Believe the Hype
digg_url = 'http://digg.com/programming/Dare_Obasanjo_aka_Carnage4Life_Explaining_REST_to_Damien_K';A little over five years ago, Andrew Anker and I started chatting about blogging. There was plenty of blogging going on already for sure. But no one in the Sand Hill crowd was thinking about it. At the time there was still a prevailing sense that venture investing was a black box and any view into the box was a bad idea. Andrew and I talked about the fact that we didn't buy that. We thought there were all sorts of things VCs could talk about that would be interesting and valuable to entrepreneurs. Andrew proposed we start VentureBlog and came up with the tagline "A Random Walk Down Sand Hill Road" -- we laughed and VentureBlog was born.
Five years ago (technically, five years ago tomorrow), Andrew posted our "Hello, World." Andrew wrote that we would chat about what we do as early stage venture investors and concluded, "Mostly, we'll figure it out as we go along. No idea if this is a sustainable idea or not, but we're going to give it a go. Enjoy!" Since that first post there have been a few different folks come and go on VentureBlog, but, for better or worse, I have stuck around and kept on writing. I have tried my best to give a view into the black box and bring a little humor to it in the process. It has been a blast.
One thing has changed for sure since we started VentureBlog. There are now dozens of VC bloggers. From Sand Hill Road (Jeremy Liew, Susan Wu, etc.) to New York City (Fred Wilson, Ed Sim, etc.) to Colorado (Brad Feld, Ryan McIntyre, etc.) to Boston (Mike Hirshland, Jeff Bussgang, etc.) to Philadelphia (Josh Kopelman, Chris Fralic, etc.?). The problem entrepreneurs have is no longer finding information, it is sorting through it. So much has been written and so much more will be written about startups and entrepreneurship and Venture Capital. And I learn a pile from all of you every day. So thank you.
As for the question of whether or not VentureBlog is a sustainable idea, I guess the answer is "yes" and "no." I have been writing with varying degrees of frequency over these past five years. It is great to have a venue to share my thoughts when something jumps out at me. And I hope to continue writing for the foreseeable future. On the other hand, in the face of superhuman VC bloggers like Fred Wilson and Brad Feld, I feel deeply inadequate. How they manage to write day in and day out while finding time to do anything else is truly beyond me. My hat's off to them. And my apologies to those of you who feel that VentureBlog is too infrequently written to be relevant. I will try harder.
I greatly appreciate the conversations we've had here at VentureBlog. And I am thrilled to see the massive ecosystem of VC bloggers that has emerged. Many thanks to those of you who continue to read, link and comment. It has been a monumental education and a great privilege. And a huge thanks to Andrew for getting this whole thing started. Here's to the next five years.
Over the course of the last week, Fred Wilson has been writing about "Venture Fund Economics" at the newly-redesigned AVC. Fred has tackled topics like how venture capitalists are measured, the impact of management fees and carry on net returns, and the impact of big winners on venture returns. What's more, Fred has done the unthinkable -- he has described venture economics in the context of his own fund's specific economic terms. While he hasn't posted the economic performance of his fund to date (that is probably more naked than even Fred is willing to get), he has posted the model he and his partner Brad built when assessing the attractiveness of raising a hundred million dollar fund. The model is fascinating and brings to light the challenges venture funds face to achieve index returns, let alone the outsized returns associated with top tier venture firms. (Great stuff, Fred!)
Given the challenges faced by venture investors to drive market returns, one reasonably might ask the question, "why do limited partners continue to flock to the asset class?" Who better to answer that question than a bona fide Limited Partner. Enter Chris Douvos. Chris is the co-head of private equity investing for TIFF (The Investment Fund for Foundations). Before that he was with the Princeton Investment Company. Chris is a wildly smart, experienced investor who I always love chatting with. Give one read of his new blog and you'll understand why. In the course of discussing the intricacies of the LP business, Chris makes analogies to baseball, the lottery, greek tragedy and uses classic Chris words and phrases like "horseplay," "impish," "hotties," "livin' la vida loca!" and "Caliente!" Chris's blog is just plain fun to read. And that is saying a whole lot when you consider that Chris is talking about investing in VC and PE firms -- not exactly scintillating material by its nature.
Interestingly, in one of his first posts, like Fred, Chris addresses the challenge of venture economics. Only instead of discussing venture fund economics in the context of a $100M fund, Chris talks about the more daunting $500M fund (Chris prefers the smaller funds -- he says he likes being "long idiosyncrasy and short momentum"). According to Chris's math, a $500M fund needs to create between $12B and $17B in company market capitalization in order to deliver a 3X return (the bar Fred set for himself as well). In Chris's words:
"Here's where it gets dicey for the masses, though (and I'll make some gross simplifying assumptions): if you're an LP and investing in an run-of-the-mill $500 million fund hoping to get a 3x net return, that fund has to generate $1.75 billion in returns ($1.25B in profit less 20% carry equals two turns of profit). Of course, that's just the capital that accrues to the firm's ownership stake. Since a lot of firms end up owning only 10-15% of their companies at exit, you've typically got to gross the $1.75 billion up by a factor of between 6.67 and 10. That suggests that those firms need to create between $12 and $17 billion of market cap just to get a 3x fund-level net return to their LPs. Caliente!
Let's unpack that box a bit more: at the $15 billion midpoint of the exit range above, a firm that invests in 25 early-stage companies will have to get, on average, $600 million exit valuations for each and every one of them. That's a pretty daunting number when you consider that the typical M&A valuation has hovered in the high double-digit millions for quite some time."
It is a daunting task for sure. To deliver those returns it almost assuredly requires a huge hit or two in your portfolio. So does that mean VCs need to swing for the fences? I don't think so. As Fred rightfully points out, "There are hitters in baseball, the best hitters in fact, that hit balls out of the park when they are just trying to make good contact." (Fred and Chris share a love of the baseball analogy). The power hitters are the guys Chris is trying to back. And those are the guys who will deliver the best returns.
For more great insights into the VC and Private Equity markets, you should definitely check out Chris Douvos's blog. This is stuff no one has blogged about before, and certainly not in such an entertaining way -- another fantastic addition to the blogosphere.
Whenever you read stories about how Web companies like Facebook have 10,000 servers including 1800 database servers or that Google has one million servers, do you ever wonder how the system administrators that manage these services deal with deployment, patching, failure detection and system repair without going crazy? This post is the first in a series of posts that examines some of the technologies that successful Web companies use to manage large Web server farms.
Last year, Michael Isard of Microsoft Research wrote a paper entitled Autopilot: Automatic Data Center Management which describes the technology that Windows Live and Live Search services have used to manage their server farms. The abstract of his paper is as follows
Microsoft is rapidly increasing the number of large-scale web services that it operates. Services such as Windows Live Search and Windows Live Mail operate from data centers that contain tens or hundreds of thousands of computers, and it is essential that these data centers function reliably with minimal human intervention. This paper describes the first version of Autopilot, the automatic data center management infrastructure developed within Microsoft over the last few years. Autopilot is responsible for automating software provisioning and deployment; system monitoring; and carrying out repair actions to deal with faulty software and hardware. A key assumption underlying Autopilot is that the services built on it must be designed to be manageable. We also therefore outline the best practices adopted by applications that run on Autopilot.
The paper provides a high level overview of the system, it's design principles and the requirements for applications/services that can be managed by the system. It gives a lot of insight into what it takes to manage a large server farm while keeping management and personnel costs low.
The purpose of AutoPilot is to automate and simplify the basic tasks that system administrators typically perform in a data center. This includes installation and deployment of software (including operating systems and patches), monitoring the health of the system, taking basic repair actions and marking systems as needing physical repair or replacement.
However applications that will be managed by AutoPilot also have their responsibilities. The primary responsibility of these applications include being extremely fault tolerant (i.e. applications must be able to handle processes being killed without warning) and being capable of running in the case of large outages in the cloud (i.e. up to 50% of the servers being out of service). In addition, these applications need to be easy to install and configure which means that they need to be xcopy deployable. Finally, the application developers are responsible for describing which application specific error detection heuristics AutoPilot should use when monitoring their service.

The above drawing is taken from the research paper. According to the paper the tasks of the various components is as follows
The Device Manager is the central system-wide authority for configuration and coordination. The Provisioning Service and Deployment Service ensure that each computer is running the correct operating system image and set of application processes. The Watchdog Service and Repair Service cooperate with the application and the Device Manager to detect and recover from software and hardware failures. The Collection Service and Cockpit passively gather information about the running components and make it available in real-time for monitoring the health of the service, as well as recording statistics for off-line analysis. (These monitoring components are ―Autopiloted like any other application, and therefore communicate with the Device Manager and Watchdog Service which provide fault recovery, deployment assistance, etc., but this communication is not shown in the figure for simplicity.)
The typical functioning of the system is described in the following section.
The set of machine types used by the application (e.g. Web crawler, front end Web server, etc) needs to be defined in a database stored by on the Device Manager. A server's machine type dictates what configuration files and application binaries need to be installed on the server. This list is manually defined by the system administrators for the application. The Device Manager also keeps track of the current state of the cluster including what various machine types are online and their health status.
The Provisioning Service continually scans the network looking for new servers that have come online. When a new member of the server cluster is detected, the Provisioning Service asks the Device Manager what operating system image it should be running and then images the machine with a new operating system before performing burn-in tests. If the tests are successful, the Provisioning Service informs the Device Manager that the server is healthy. In addition to operating system components, some AutoPilot specific services are also installed on the new server. There is a dedicated filesync service that ensures that the correct files are present on the computer and an application manager that ensures that the expected application binaries are running.
Both services determine what the right state of the machine should be by querying the Device Manager. If it is determined that the required application binaries and files are not present on the machine then they are retrieved from the Deployment Service. The Deployment Service is a host to the various application manifests which map to the various application folders, binaries and data files. These manifests are populated from the application's build system which is outside the AutoPilot system.
The Deployment Service also comes into play when a new version of the application is ready to be deployed. During this process a new manifest is loaded into the Deployment Service and the Device Manager informs the various machine types of the availability of the new application bits. Each machine type has a notion of an active manifest which allows application bits for a new version of the application to be deployed as an inactive manifest while the old version of the application is considered to be "active". The new version of the application is rolled out in chunks called "scale units". A scale unit is a group of multiple machine types which can number up to 500 machines. Partitioning the cluster into scale units allows code roll outs to be staged. For example, if you have a cluster of 10,000 machines with scale units of 500 machines, then AutoPilot could be configured keep roll outs to under 5 scale units at a time so that never more than 25% of the cloud is being upgraded at a time.
Besides operating system installation and deployment of application components, AutoPilot is also capable of monitoring the health of the service and taking certain repair actions. The Watchdog Service is responsible for detecting failures in the system. It does so by probing each of the servers in the cluster and testing various properties of the machines and the application(s) running on them based on various predetermined criteria. Each watchdog can report one of three results for a test; OK, Warning or Error. A Warning does not initiate any repair action and simply indicates a non-fatal error has occurred. When a watchdog reports an error back to the Device Manager, the machine is placed in the Failure state and one of the following repair actions is taken; DoNothing, Reboot, ReImage or Replace. The choice of repair action depends on the failure history of the machine. If this is the first error that has been reported on the machine in multiple days or weeks then it is assumed to be a transient error and the appropriate action is DoNothing. If not, the machine is rebooted and if after numerous reboots the system is still detected to be in error by the watchdogs it is re-imaged (a process which includes reformatting the hard drive and reinstalling the operating system as well redeploying application bits). If none of these solve the problem then the machine is marked for replacement and it is picked up by a data center technician during weekly or biweekly sweeps to remove dead servers.
System administrators can also directly monitor the system using data aggregated by the Collection Service which collects information from various performance counters is written to a large-scale distributed file store for offline data mining and to a SQL database where the data can be visualized as graphs and reports in a visualization tool known as the Cockpit.
Now Playing: Nirvana - Jesus Doesn't Want Me For A Sunbeam
Puppet provides a mechanism for managing a heterogeneous cluster of Unix-like machines using a central configuration system and a declarative scripting language for describing machine configuration. The declarative scripting language abstracts away the many differences in various Unix-like operating systems.
Puppet is used for server management by a number of startups including PowerSet, Joost and Slide.
In a system managed using Puppet, Pupper Master is the central system-wide authority for configuration and coordination. Manifests are propagated to the Puppet Master from a source external to the system. Each server in the system periodically polls the Puppet Master to determine if their configuration is up to date. If this is not the case, then the new configuration is retrieved and the changes described by the new manifest are applied. The Puppet instance running on each client can be considered to be made up of the following layers
Each manifest is described in the Puppet Configuration Language which is a high level language for describing resources on a server and what actions to take on them. Retrieving the newest manifests and applying the changes they describe (if any) is provided by the Transactional Layer of Puppet. The Puppet Configuration Language is actually an abstraction that hides the differences in various Unix-like operating systems. This abstraction layer maps the various higher level resources in a manifest to the actual commands and file locations on the target operating systems of the server.
The Puppet Master is the set of one or more servers that run the puppetmasterd daemon.
This daemon listens for polling requests from the servers being managed by Puppet
and returns the current configuration for the server to the machine. Each server to
be managed by Puppet, must have the Puppet client installed and must run the puppetd daemon
which polls the Puppet Master for configuration information.
Each manifest can be thought of as a declarative script which contains one or more commands (called resources in Puppet parlance) and their parameters, dependencies along with the prerequisites to running each command. Collections of resources can be grouped together as classes (complete with inheritance) which can be further grouped together as modules. See below for examples
| Language Construct | Example | Description |
| Resource |
service { "apache": require => Package["httpd"] }
|
The apache resource requires that the httpd package is installed |
| Class |
class apache {
service { "apache": require => Package["httpd"] }
file { "/nfs/configs/apache/server1.conf":
group => "www-data
}
}
|
Groups together the rule that the apache service requires the httpd package to be installed and that the server1.conf apache configuration file should be owned by the www-data group. |
| Derived Class |
class apache-ssl inherits apache {
Service[apache] { require +> File["apache.pem"] }
}
|
The apache-ssl class defines all of the above and that additionally, the apache service also requires the existence of the apache.pem configuration file. |
| Module |
class webserver::apache-ssl inherits apache {
Service[apache] { require +> File["apache.pem"] }
}
|
The apache-ssl class is part of the webserver module. |
| Node |
node "webserver.example.com" {
include webserver
}
|
Declares that the manifest for the machine named webserver.example.com is the webserver module. |
A node describes the configuration for a particular machine given its name. Node names and their accompanying configuration can be defined directly in manifests as shown above. Another option is to either use external node classifiers which provide a dynamic mechanism for determine a machine's type based on it's name or use an LDAP directory for storing information about nodes in the cluster.
FURTHER READING
Now Playing: Linkin Park - Cure For The Itch
Over the course of the last week, Fred Wilson has been writing about "Venture Fund Economics" at the newly-redesigned AVC. Fred has tackled topics like how venture capitalists are measured, the impact of management fees and carry on net returns, and the impact of big winners on venture returns. What's more, Fred has done the unthinkable -- he has described venture economics in the context of his own fund's specific economic terms. While he hasn't posted the economic performance of his fund to date (that is probably more naked than even Fred is willing to get), he has posted the model he and his partner Brad built when assessing the attractiveness of raising a hundred million dollar fund. The model is fascinating and brings to light the challenges venture funds face to achieve index returns, let alone the outsized returns associated with top tier venture firms. (Great stuff, Fred!)
Given the challenges faced by venture investors to drive market returns, one reasonably might ask the question, "why do limited partners continue to flock to the asset class?" Who better to answer that question than a bona fide Limited Partner. Enter Chris Douvos. Chris is the co-head of private equity investing for TIFF (The Investment Fund for Foundations). Before that he was with the Princeton Investment Company. Chris is a wildly smart, experienced investor who I always love chatting with. Give one read of his new blog and you'll understand why. In the course of discussing the intricacies of the LP business, Chris makes analogies to baseball, the lottery, greek tragedy and uses classic Chris words and phrases like "horseplay," "impish," "hotties," "livin' la vida loca!" and "Caliente!" Chris's blog is just plain fun to read. And that is saying a whole lot when you consider that Chris is talking about investing in VC and PE firms -- not exactly scintillating material by its nature.
Interestingly, in one of his first posts, like Fred, Chris addresses the challenge of venture economics. Only instead of discussing venture fund economics in the context of a $100M fund, Chris talks about the more daunting $500M fund (Chris prefers the smaller funds -- he says he likes being "long idiosyncrasy and short momentum"). According to Chris's math, a $500M fund needs to create between $12B and $17B in company market capitalization in order to deliver a 3X return (the bar Fred set for himself as well). In Chris's words:
"Here's where it gets dicey for the masses, though (and I'll make some gross simplifying assumptions): if you're an LP and investing in an run-of-the-mill $500 million fund hoping to get a 3x net return, that fund has to generate $1.75 billion in returns ($1.25B in profit less 20% carry equals two turns of profit). Of course, that's just the capital that accrues to the firm's ownership stake. Since a lot of firms end up owning only 10-15% of their companies at exit, you've typically got to gross the $1.75 billion up by a factor of between 6.67 and 10. That suggests that those firms need to create between $12 and $17 billion of market cap just to get a 3x fund-level net return to their LPs. Caliente!
Let's unpack that box a bit more: at the $15 billion midpoint of the exit range above, a firm that invests in 25 early-stage companies will have to get, on average, $600 million exit valuations for each and every one of them. That's a pretty daunting number when you consider that the typical M&A valuation has hovered in the high double-digit millions for quite some time."
It is a daunting task for sure. To deliver those returns it almost assuredly requires a huge hit or two in your portfolio. So does that mean VCs need to swing for the fences? I don't think so. As Fred rightfully points out, "There are hitters in baseball, the best hitters in fact, that hit balls out of the park when they are just trying to make good contact." (Fred and Chris share a love of the baseball analogy). The power hitters are the guys Chris is trying to back. And those are the guys who will deliver the best returns.
For more great insights into the VC and Private Equity markets, you should definitely check out Chris Douvos's blog. This is stuff no one has blogged about before, and certainly not in such an entertaining way -- another fantastic addition to the blogosphere.
There was an interesting presentation at OSCON 2008 by Evan Henshaw-Plath and Kellan Elliott-McCrea entitled Beyond REST? Building Data Services with XMPP PubSub. The presentation is embedded below.
The core argument behind the presentation can be summarized by this tweet from Tim O'Reilly
On monday friendfeed polled flickr nearly 3 million times for 45000 users, only 6K of whom were logged in. Architectural mismatch. #oscon08
On July 21st, FriendFeed had 45,000 users who had associated their Flickr profiles with their FriendFeed account. FriendFeed polls Flickr about once every 20 – 30 minutes to see if the user has uploaded new pictures. However only about 6,000 of those users logged into Flickr that day, let alone uploaded pictures. Thus there were literally millions of HTTP requests made by FriendFeed that were totally unnecessary.
Evan and Kellan's talk suggests that instead of Flickr getting almost 3 million requests from FriendFeed, it would be a more efficient model for FriendFeed to tell Flickr which users they are interested in and then listen for updates from Flickr when they upload photos.
They are right. The interaction between Flickr and FriendFeed should actually be a publish-subscribe relationship instead of a polling relationship. Polling is a good idea for RSS/Atom for a few reasons
The situation between FriendFeed and Flickr is almost the exact opposite. Instead of thousands of clients interested in document, we have one subscriber interested in thousands of documents. Both end points are always on or are at least expected to be. The cost of developing a publish-subscribe model is one that both sides can afford.
Thus this isn't a case of REST not scaling as implied by Evan and Kellan's talk. This is a case of using the wrong tool to solve your problem because it happens to work well in a different scenario. The above talk suggests using XMPP which is an instant messaging protocol as the publish-subscribe mechanism. In response to the talk, Joshua Schachter (founder of del.icio.us) suggested a less heavyweight publish-subscribe mechanism using a custom API in his post entitled beyond REST. My suggestion for people who believe they have this problem would be to look at using some subset of XMPP and experimenting with off-the-shelf tools before rolling your own solution. Of course, this is an approach that totally depends on network effects. Today everyone has RSS/Atom feeds while very few services use XMPP. There isn't much point in investing in publishing as XMPP if your key subscribers can't consume it and vice versa. It will be interesting to see if the popular "Web 2.0" companies can lead the way in using XMPP for publish-subscribe of activity streams from social networks in the same way they kicked off our love affair with RESTful Web APIs.
It should be noted that there are already some "Web 2.0" companies using XMPP as a way to provide a stream of updates to subscribing services to prevent the overload that comes from polling. For example, Twitter has confirmed that it provides an XMPP stream to FriendFeed, Summize, Zappos, Twittervision and Gnip. However they simply dump out every update that occurs on Twitter to these services instead of having these services subscribe to updates for specific users. This approach is quite inefficient and brings it's own set of scaling issues.
The interesting question is why people are just bringing this up? Shouldn't people have already been complaining about Web-based feed readers like Google Reader and Bloglines for causing the same kinds of problems? I can only imagine how many millions of times a day Google Reader must fetch content from TypePad and Wordpress.com but I haven't seen explicit complaints about this issue from folks like Anil Dash or Matt Mullenweg.
Now Playing: The Pussycat Dolls - When I Grow Up
A little over five years ago, Andrew Anker and I started chatting about blogging. There was plenty of blogging going on already for sure. But no one in the Sand Hill crowd was thinking about it. At the time there was still a prevailing sense that venture investing was a black box and any view into the box was a bad idea. Andrew and I talked about the fact that we didn't buy that. We thought there were all sorts of things VCs could talk about that would be interesting and valuable to entrepreneurs. Andrew proposed we start VentureBlog and came up with the tagline "A Random Walk Down Sand Hill Road" -- we laughed and VentureBlog was born.
Five years ago (technically, five years ago tomorrow), Andrew posted our "Hello, World." Andrew wrote that we would chat about what we do as early stage venture investors and concluded, "Mostly, we'll figure it out as we go along. No idea if this is a sustainable idea or not, but we're going to give it a go. Enjoy!" Since that first post there have been a few different folks come and go on VentureBlog, but, for better or worse, I have stuck around and kept on writing. I have tried my best to give a view into the black box and bring a little humor to it in the process. It has been a blast.
One thing has changed for sure since we started VentureBlog. There are now dozens of VC bloggers. From Sand Hill Road (Jeremy Liew, Susan Wu, etc.) to New York City (Fred Wilson, Ed Sim, etc.) to Colorado (Brad Feld, Ryan McIntyre, etc.) to Boston (Mike Hirshland, Jeff Bussgang, etc.) to Philadelphia (Josh Kopelman, Chris Fralic, etc.?). The problem entrepreneurs have is no longer finding information, it is sorting through it. So much has been written and so much more will be written about startups and entrepreneurship and Venture Capital. And I learn a pile from all of you every day. So thank you.
As for the question of whether or not VentureBlog is a sustainable idea, I guess the answer is "yes" and "no." I have been writing with varying degrees of frequency over these past five years. It is great to have a venue to share my thoughts when something jumps out at me. And I hope to continue writing for the foreseeable future. On the other hand, in the face of superhuman VC bloggers like Fred Wilson and Brad Feld, I feel deeply inadequate. How they manage to write day in and day out while finding time to do anything else is truly beyond me. My hat's off to them. And my apologies to those of you who feel that VentureBlog is too infrequently written to be relevant. I will try harder.
I greatly appreciate the conversations we've had here at VentureBlog. And I am thrilled to see the massive ecosystem of VC bloggers that has emerged. Many thanks to those of you who continue to read, link and comment. It has been a monumental education and a great privilege. And a huge thanks to Andrew for getting this whole thing started. Here's to the next five years.
Yesterday Amazon's S3 service had an outage that lasted about six hours. Unsurprisingly this has led to a bunch of wailing and gnashing of teeth from the very same pundits that were hyping the service a year ago. The first person to proclaim the sky is falling is Richard MacManus in his More Amazon S3 Downtime: How Much is Too Much? who writes
Today's big news is that Amazon's S3 online storage service has experienced significant downtime. Allen Stern, who hosts his blog's images on S3, reported that the downtime lasted 3.5 over 6 hours. Startups that use S3 for their storage, such as SmugMug, have also reported problems . Back in February this same thing happened. At the time RWW feature writer Alex Iskold defended Amazon, in a must-read analysis entitled Reaching for the Sky Through The Compute Clouds . But it does make us ask questions such as: why can't we get 99% uptime? Or: isn't this what an SLA is for?
Om Malik joins in on the fun with his post S3 Outage Highlights Fragility of Web Services which contains the following
Amazon’s S3 cloud storage service went offline this morning for an extended period of time — the second big outage at the service this year. In February , Amazon suffered a major outage that knocked many of its customers offline.
It was no different this time around. I first learned about today’s outage when avatars and photos (stored on S3) used by Twinkle , a Twitter-client for iPhone, vanished.
…
That said, the outage shows that cloud computing still has a long road ahead when it comes to reliability. NASDAQ, Activision, Business Objects and Hasbro are some of the large companies using Amazon’s S3 Web Services. But even as cloud computing starts to gain traction with companies like these and most of our business and communication activities are shifting online, web services are still fragile, in part because we are still using technologies built for a much less strenuous web.
Even though the pundits are trying to raise a stink, the people who should be most concerned about this are Amazon S3's customers. Counter to Richard MacManus's claim, not only is there a Service Level Agreement (SLA) for Amazon S3, it promises 99.9% uptime or you get a partial refund. 6 hours of downtime sounds like a lot until you realize that 99% uptime is 8 hours of downtime a month and over three and a half days of downtime a year. Amazon S3 is definitely doing a lot better than that.
The only question that matters is whether Amazon's customers can get better service elsewhere at the prices Amazon charges. If they can't, then this is an acceptable loss which is already covered by their SLA. 99.9% uptime still means over eight hours of downtime a year. And if they can, it will put competitive pressure on Amazon to do a better job of managing their network or lower their prices.
This is one place where market forces will rectify things or we will reach a healthy equilibrium. Network computing is inherently and no amount of outraged posts by pundits will ever change that. Amazon is doing a better job than most of its customers can do on their own for cheaper than they could ever do on their own. Let's not forget that in the rush to gloat about Amazon's down time.
Now Playing: 2Pac - Life Goes On
Via Mark Pilgrim I stumbled on an article by Scott Loganbill entitled Google’s Open Source Protocol Buffers Offer Scalability, Speed which contains the following excerpt
The best way to explore Protocol Buffers is to compare it to its alternative. What do Protocol Buffers have that XML doesn’t? As the Google Protocol Buffer blog post mentions , XML isn’t scalable:
"As nice as XML is, it isn’t going to be efficient enough for [Google’s] scale. When all of your machines and network links are running at capacity, XML is an extremely expensive proposition. Not to mention, writing code to work with the DOM tree can sometimes become unwieldy."
We’ve never had to deal with XML in a scale where programming for it would become unwieldy, but we’ll take Google’s word for it.
Perhaps the biggest value-add of Protocol Buffers to the development community is as a method of dealing with scalability before it is necessary. The biggest developing drain of any start-up is success. How do you prepare for the onslaught of visitors companies such as Google or Twitter have experienced ? Scaling for numbers takes critical development time, usually at a juncture where you should be introducing much-needed features to stay ahead of competition rather than paralyzing feature development to keep your servers running.
Over time, Google has tackled the problem of communication between platforms with Protocol Buffers and data storage with Big Table . Protocol Buffers is the first open release of the technology making Google tick, although you can utilize Big Table with App Engine .
It is unfortunate that it is now commonplace for people to throw around terms like "scaling" and "scalability" in technical discussions without actually explaining what they mean. Having a Web application that scales means that your application can handle becoming popular or being more popular than it is today in a cost effective manner. Depending on your class of Web application, there are different technologies that have been proven to help Web sites handle significantly higher traffic than they normally would. However there is no silver bullet.
The fact that Google uses MapReduce and BigTable to solve problems in a particular problem space does not mean those technologies work well in others. MapReduce isn't terribly useful if you are building an instant messaging service. Similarly, if you are building an email service you want an infrastructure based on message queuing not BigTable. A binary wire format like Protocol Buffers is a smart idea if your applications bottleneck is network bandwidth or CPU used when serializing/deserializing XML. As part of building their search engine Google has to cache a significant chunk of the World Wide Web and then perform data intensive operations on that data. In Google's scenarios, the network bandwidth utilized when transferring the massive amounts of data they process can actually be the bottleneck. Hence inventing a technology like Protocol Buffers became a necessity. However, that isn't Twitter's problem so a technology like Protocol Buffers isn't going to "help them scale". Twitter's problems have been clearly spelled out by the development team and nowhere is network bandwidth called out as a culprit.
Almost every technology that has been loudly proclaimed as unscalable by some pundit on the Web is being used by a massively popular service in some context. Relational databases don't scale? Well, eBay seems to be doing OK. PHP doesn't scale? I believe it scales well enough for Facebook. Microsoft technologies aren't scalable? MySpace begs to differ. And so on…
If someone tells you "technology X doesn't scale" without qualifying that statement, it often means the person either doesn't know what he is talking about or is trying to sell you something. Technologies don't scale, services do. Thinking you can just sprinkle a technology on your service and make it scale is the kind of thinking that led Blaine Cook (former architect at Twitter) to publish a presentation on Scaling Twitter which claimed their scaling problems where solved with their adoption of memcached. That was in 2007. In 2008, let's just say the Fail Whale begs to differ.
If a service doesn't scale it is more likely due to bad design than to technology choice. Remember that.
Now Playing: Zapp & Roger - Computer Love
When it comes to scaling Web applications, every experienced Web architect eventually realizes that Disk is the New Tape. Getting data from off of the hard drive disk is slow compared to getting it from memory or from over the network. So an obvious way to improve the performance of your system is to reduce the amount of disk I/O your systems have to do which leads to the adoption of in-memory caching. In addition, there is often more cacheable data on disk than there is space in memory since memory to disk ratios are often worse than 1:100 (Rackspace's default server config has 1GB of RAM and 250 GB of hard disk ). Which has led to the growing popularity of distributed, in-memory, object caching systems like memcached and Microsoft's soon to be released Velocity.
memcached can be thought of as a distributed hash table and its programming model is fairly straightforward from the application developer's perspective. Specifically, There is a special hash table class used by your application which is in actuality a distributed hashtable whose contents are actually being stored on a cluster of machines instead of just in the memory of your local machine.
With that background I can now introduce Terracotta, a product that is billed as "Network Attached Memory" for Java applications. Like distributed hash tables such as memcached, Terracotta springs from the observation that accessing data from a cluster of in-memory cache servers is often more optimal than getting it directly from your database or file store.
Where Terracotta differs from memcached and other distributed hash tables is that it is completely transparent to the application developer. Whereas memcached and systems like it require developers to instantiate some sort of "cache" class and then use that as the hash table of objects that should be stored, Terracotta attempts to be transparent to the application developer by hooking directly into the memory allocation operations of the JVM.
The following is an excerpt from the Terracotta documentation on How Terracotta Works
Terracotta uses ASM to manipulate application classes as those classes load into the JVM. Developers can pick Sun Hotspot or IBM's runtime, and any of several supported application servers
…
The Terracotta configuration file dictates which classes become clustered and which do not. Terracotta then examines classes for fields it needs to cluster, and threading semantics that need to be shared. For example, if to share customer objects throughout an application cluster, the developer need only tell Terracotta to cluster customers and to synchronize customers cluster-wide.Terracotta looks for bytecode instructions like the following (not an exhaustive list):
- GETFIELD
- PUTFIELD
- AASTORE
- AALOAD
- MONITORENTRY
- MONITOREXIT
On each of those, Terracotta does the work of Network Attached Memory. Specifically:
BYTECODE Injected Behavior GETFIELD Read from the Network for certain objects. Terracotta also has a heap-level cache that contains pure Java objects. So GETFIELD reads from RAM if-present and faults in from NAM if a cache miss occurs. PUTFIELD Write to the Network for certain objects. When writing field data through the assignment operator "=" or through similar mechanisms, Terracotta writes the changed bytes to NAM as well as allowing those to flow to the JVM's heap. AASTORE Same as PUTFIELD but for arrays AALOAD Sames as GETFIELD but for arrays MONITORENTRY Get a lock inside the JVM on the specified object AND get a lock in NAM in case a thread on another JVM is trying to edit this object at the same time MONITOREXIT Flush changes to the JVM's heap cache back to NAM in case another JVM is using the same objects as this JVM
The instrumented-classes section of the Terracotta config file is where application developers specify which objects types should be stored in the distributed cache and it is even possible to say that all memory allocations in your application should go through the distributed cache.
In general, the approach taken by Terracotta seems more complicated, more intrusive and more error prone than using a distributed hash table like Velocity or memcached. I always worry about systems that attempt to hide or abstract away the fact that network operations are occurring. This often leads to developers writing badly performing or unsafe code because it wasn't obvious that network operations are involved (e.g. a simple lock statement in your Terracotta-powered application may actually be acquiring distributed locks without it being explicit in the code that this is occuring).
Now Playing: Dream - I Luv Your Girl (Remix) (feat. Young Jeezy)
Late last week, the folks on the Google Data APIs blog announced that Google will now be supporting OAuth as the delegated authentication mechanism for all Google Data APIs. This move is meant to encourage the various online services that provide APIs that access a user’s data in the “cloud” to stop reinventing the wheel when it comes to delegated authentication and standardize on a single approach.
Every well-designed Web API that provides access to a customer’s data in the cloud utilizes a delegated authentication mechanism which allows users to grant 3rd party applications access to their data without having to give the application their username and password. There is a good analogy for this practice in the OAuth: Introduction page which is excerpted below
What is it For?
Many luxury cars today come with a valet key. It is a special key you give the parking attendant and unlike your regular key, will not allow the car to drive more than a mile or two. Some valet keys will not open the trunk, while others will block access to your onboard cell phone address book. Regardless of what restrictions the valet key imposes, the idea is very clever. You give someone limited access to your car with a special key, while using your regular key to unlock everything.
Everyday new website offer services which tie together functionality from other sites. A photo lab printing your online photos, a social network using your address book to look for friends, and APIs to build your own desktop application version of a popular site. These are all great services – what is not so great about some of the implementations available today is their request for your username and password to the other site. When you agree to share your secret credentials, not only you expose your password to someone else (yes, that same password you also use for online banking), you also give them full access to do as they wish. They can do anything they wanted – even change your password and lock you out.
This is what OAuth does, it allows the you the User to grant access to your private resources on one site (which is called the Service Provider), to another site (called Consumer, not to be confused with you, the User). While OpenID is all about using a single identity to sign into many sites, OAuth is about giving access to your stuff without sharing your identity at all (or its secret parts).
So every service provider invented their own protocol to do this, all of which are different but have the same basic components. Today we have Google AuthSub, Yahoo! BBAuth, Windows Live DelAuth, AOL OpenAuth, the Flickr Authentication API, the Facebook Authentication API and others. All different, proprietary solutions to the same problem.
This ends up being problematic for developers because if you want to build an application that talks to multiple services you not only have to deal with the different APIs provided by these services but also the different authorization/authentication models they utilize as well. In a world where “social aggregation” is becoming more commonplace with services like Plaxo Pulse & FriendFeed and more applications are trying to bridge the desktop/cloud divide like OutSync and RSS Bandit, it sucks that these applications have to rewrite the same type of code over and over again to deal with the basic task of getting permission to access a user’s data. Standardizing on OAuth is meant to fix that. A number of startups like Digg & Twitter as well as major players like Yahoo and Google have promised to support it, so this should make the lives of developers easier.
Of course, we still have work to do as an industry when it comes to the constant wheel reinvention in the area of Web APIs. Chris Messina points to another place where every major service provider has invented a different proprietary protocol for doing the same task in his post Inventing contact schemas for fun and profit! (Ugh) where he writes
And then there were three
...
Today, Yahoo! announced the public availability of their own Address Book API .However, I have to lament yet more needless reinvention of contact schema. Why is this a problem? Well, as I pointed out about Facebook’s approach to developing their own platform methods and formats, having to write and debug against yet another contact schema makes the “tax” of adding support for contact syncing and export increasingly onerous for sites and web services that want to better serve their customers by letting them host and maintain their address book elsewhere.
This isn’t just a problem that I have with Yahoo!. It’s something that I encountered last November with the SREG and proposed Attribute Exchange profile definition . And yet again when Google announced their Contacts API . And then again when Microsoft released theirs ! Over and over again we’re seeing better ways of fighting the password anti-pattern flow of inviting friends to new social services, but having to implement support for countless contact schemas. What we need is one common contacts interchange format and I strongly suggest that it inherit from vcard with allowances or extension points for contemporary trends in social networking profile data.
I’ve gone ahead and whipped up a comparison matrix between the primary contact schemas to demonstrate the mess we’re in.
Kudos to the folks at Google for trying to force the issue when it comes to standardizing on a delegated authentication protocol for use on the Web. However there are still lots of places across the industry where we speak different protocols and thus incur a needless burden on developers when a single language might do. It would be nice to see some of this unnecessary redundancy eliminated in the future.
Now Playing: G-Unit - I Like The Way She Do It
A little over five years ago, Andrew Anker and I started chatting about blogging. There was plenty of blogging going on already for sure. But no one in the Sand Hill crowd was thinking about it. At the time there was still a prevailing sense that venture investing was a black box and any view into the box was a bad idea. Andrew and I talked about the fact that we didn't buy that. We thought there were all sorts of things VCs could talk about that would be interesting and valuable to entrepreneurs. Andrew proposed we start VentureBlog and came up with the tagline "A Random Walk Down Sand Hill Road" -- we laughed and VentureBlog was born.
Five years ago (technically, five years ago tomorrow), Andrew posted our "Hello, World." Andrew wrote that we would chat about what we do as early stage venture investors and concluded, "Mostly, we'll figure it out as we go along. No idea if this is a sustainable idea or not, but we're going to give it a go. Enjoy!" Since that first post there have been a few different folks come and go on VentureBlog, but, for better or worse, I have stuck around and kept on writing. I have tried my best to give a view into the black box and bring a little humor to it in the process. It has been a blast.
One thing has changed for sure since we started VentureBlog. There are now dozens of VC bloggers. From Sand Hill Road (Jeremy Liew, Susan Wu, etc.) to New York City (Fred Wilson, Ed Sim, etc.) to Colorado (Brad Feld, Ryan McIntyre, etc.) to Boston (Mike Hirshland, Jeff Bussgang, etc.) to Philadelphia (Josh Kopelman, Chris Fralic, etc.?). The problem entrepreneurs have is no longer finding information, it is sorting through it. So much has been written and so much more will be written about startups and entrepreneurship and Venture Capital. And I learn a pile from all of you every day. So thank you.
As for the question of whether or not VentureBlog is a sustainable idea, I guess the answer is "yes" and "no." I have been writing with varying degrees of frequency over these past five years. It is great to have a venue to share my thoughts when something jumps out at me. And I hope to continue writing for the foreseeable future. On the other hand, in the face of superhuman VC bloggers like Fred Wilson and Brad Feld, I feel deeply inadequate. How they manage to write day in and day out while finding time to do anything else is truly beyond me. My hat's off to them. And my apologies to those of you who feel that VentureBlog is too infrequently written to be relevant. I will try harder.
I greatly appreciate the conversations we've had here at VentureBlog. And I am thrilled to see the massive ecosystem of VC bloggers that has emerged. Many thanks to those of you who continue to read, link and comment. It has been a monumental education and a great privilege. And a huge thanks to Andrew for getting this whole thing started. Here's to the next five years.
Jason Kincaid over at TechCrunch has a blog post entitled Microsoft’s First Step In Accepting OpenID SignOns - HealthVault where he writes
Over 16 months after first declaring its support for the OpenID authentication platform, Microsoft has finally implemented it for the first time, allowing for OpenID logins on its Health Vault medical site. Unfortunately, Health Vault will only support authentication from two OpenID providers: Trustbearer and Verisign. Whatever happened to the Open in OpenID?
The rationale behind the limited introduction is that health is sensitive, so access should be limited to the few, most trusted OpenID providers. It certainly makes sense, but it also serves to underscore one of the problems inherent to OpenID: security
...
But it seems that the platform itself may be even more deserving of scrutiny. What good is a unified login when its default form will only be accepted on the least private and secure sites?
A while back I mentioned that the rush to slap "Open" in front of every new spec written by a posse of Web companies had created a world where "Open" had devolved into a PR marketing term with no real meaning since the term was being used too broadly to define different sorts of "openness". In the above case, the "open" in OpenID has never meant that every service that accepts OpenIDs needs to accept them from every OpenID provider.
Simon Willison, who's been a key evangelist of OpenID, has penned an insightful response to Jason Kincaid's article in his post The point of “Open” in OpenID which is excerpted below
TechCrunch report that Microsoft are accepting OpenID for their new HealthVault site, but with a catch: you can only use OpenIDs from two providers: Trustbearer (who offer two-factor authentication using a hardware token) and Verisign. "Whatever happened to the Open in OpenID?", asks TechCrunch’s Jason Kincaid.
Microsoft’s decision is a beautiful e