Why Decentralized Software Is 10x Harder

The Diaspora* guys announced today:

Today, we are giving control of Diaspora to the community.

which has widely been interpreted as giving up on the grand vision of decentralized social networking. The remaining Diaspora team apparently (I’d guess based on advice they got from YCombinator) will focus on a more standard “we run an ad-supported website” business.

It’s another example of great user enthusiasm for a decentralized product, with lackluster traction to show for it. Why this immense gap?

I think generally people underestimate just how much harder it is to build and deliver to the market a decentralized product than a single centralized website. Here’s my list of why that is:

  • If you build a decentralized application, you actually need to ship software. You need to package, test, create installers, test on a variety of platforms, write defensive code to work around misconfigurations your customers are likely to create, etc. For a centralized website, you can often edit files in place on the production server.
    Result: decentralized is 10x harder at least.
  • Somebody somewhere will run every single version of your app that you ever shipped. It will be badly out of date, full of security holes (you fixed years ago), outmoded graphics etc. It will cost you additional support, and your brand will suffer. Almost nobody upgrades to the latest and greatest within a life time it seems.
    Result: decentralized is less functional, less pretty, and less secure.
  • Decentralized software is much harder to monetize. You can’t run ads on somebody else’s installation. You can’t data mine your users (because most of them aren’t in a place that you have access to, it’s somebody else’s installation). You can’t do cross-promotions and referrals etc. You can charge those people who install your software, but there’s a reason most websites are free: much better business.
    Result: decentralized produces less money for you, so you have less investment dollars at your disposal.
  • Database migrations and the like for decentralized apps have to be fully productized, because they will be run by somebody else who does not know what to do when something fails 15 minutes into an ALTER TABLE command.
    Result: decentralized is 10x harder at least.
  • Same thing for performance optimizations and the like: it’s much easier to optimize your code for your own server farm than trying to help Joe remotely whose installation and servers you don’t have access to.
    Result: decentralized is slower, more expensive, and harder.
  • And if you build a social networking app, like Diaspora*, you have to build some kind of federation protocol that works across the internet. These protocols are hard, they are expensive, they are hard to secure, none of which you need to do in a centralized settings where you can simply update your (single) database. They are harder to use by the end user than a Facebook Like button. And the kicker: because you cannot guarantee that all installations of your app all over the internet run the same version of your app (you are lucky if it’s the majority), interoperability is hit-or-miss. I learned this the hard way when attempting to support users using OpenID. Often, as a developer, you don’t even have a way of finding out that 100% of your users in some place fail! Never mind fixing it (remember, most installations will be out of date)
    Result: decentralized is so much harder once you need to seriously federate.

In summary: it’s hard enough to write an app that people would use over some other app. If you do it in a (decentralized) way that is 10x as expensive (as the centralized way), how likely are you going to succeed, even if your prospective users throw the big bucks at you on Kickstarter before you even get started?

I’m a huge proponent of decentralized architectures and I believe that eventually, they will play a much larger role than they do today. But until and unless the above items are addressed, and addressed well, the next Diaspora will end up in the same place.

[Of course, I wouldn't be writing this if I didn't have some ideas on how to address many of the above challenges. Currently in beta. Stay tuned.]

 

Comments are closed.