In 2017 we made a decision to build Colony as a fully decentralized application. That meant no compromises. Everything in our stack, from UI components down to smart contracts had to, in principle, function without relying on any component or service that’s hosted, owned, or otherwise ‘centralized’.
And that’s what we did.
In July last year, we quietly deployed Colony as a fully decentralized application on Ethereum mainnet.
Our reasoning for full decentralization was that once our dapp was live, whatever happened to us, the dapp would carry on working indefinitely. It gave users confidence that the platform their business critically relies upon, could not be taken away from them.
Decentralization is a benefit that you don’t think about until you wish you had it. We believed that our users shouldn’t need to know or care that Colony is decentralized. What Colony does is the selling point, how it does it should not need to be.
Pursuant to those goals therefore, we defined three critical requirements:
1. It must be decentralized
2. It must be a great user experience
3. It must be as cheap to use as possible
Sounds good right? Sadly, here comes the but... Last November, after 2+ years smashing our faces against the wall of full decentralization, we came to accept that we’d failed to achieve requirement #2.
The Colony Network is a vast suite of smart contracts, running on Ethereum. Ethereum of course, has its challenges, but is not the problem here. No, our difficulties came from the data layer of our application. Remember—our goals were to minimize the cost of using Colony, and provide a great user experience. We achieved this by reducing the number of Ethereum transactions necessary, and the amount of data stored on chain. All without compromising decentralization. All the stuff a web2 app would do in a centralized database, we were doing P2P with a client side, decentralized database. Pretty cool right?
Except it suuuuuuuuuuuuuuucked! Interaction times were measured in geological eras not milliseconds. And you want to talk about data availability? Can I interest you in an app where data you create may show up for all/some/none of the other users immediately/sometime/never?
Building with bleeding edge tech comes at a cost. It’s slow, difficult, frustrating work. And what did we get for it? An application which was way less performant and reliable than users are used to. It imparted idiosyncratic UX, and massive adoption friction.
We saw that building Colony and iterating upon it was going to be slow and difficult until the underlying technology matured. As a product, and as a company, that’s not ideal.
It’s important to have principles, to be ambitious, and push boundaries—but it’s also important to remain rational. Prioritising decentralization at the expense of other considerations—such as actually being able to ship products people want in a timely manner and at sensible cost was not that. Shrugging our shoulders and saying “Well, building decentralized tech is hard.” wasn’t going to cut it.
So, in late November 2019 we decided it was time to strip out the dapp’s anaemic and wheezing decentralized data layer, and replace it with something tried and tested. To give an indication of the relative difficulty of these two approaches, what took us two years to build in a decentralized way, took a month (and over Christmas no less) to replace with our new blazing fast, silky smooth, non-serverless architecture™.
And, with that in mind, tomorrow, an announcement.
Colony makes it easy for people all over the world to build organisations together, online.