In a recent interview with Roger Ver, John McAfee said that “history is the story written by the conquerors” . Perhaps this is true. Regardless of who the historians are, one thing is certain: the saga of mankind has been an endless series of power struggles.

Day-to-day life in the modern world can give the impression that governments are relatively static and stable entities. But zoom out. Anyone who studies history knows of the great many monarchies, dynasties, empires, tribes, nation states, wars, revolutions, coups, and regimes that have come and gone. A goal of society is that of order, but we cannot avoid chaos. Politicians are corruptible. Laws are routinely broken. Violent struggles are the historical norm.

Bitcoin is a microcosm of life. In the same way that there can never be a perfect set of laws, there will never be a perfect set of rules for decentralized development. The real rules (of reality) are simple. Bitcoin is a permissionless system. Any developer can write whatever code he (or she) wants. Any miner can run whatever code he wants. Any user can use or invest in any chain they want. Agreements between developer groups are analogous to that of treaties between nations. As the participants are sovereign, they can always withdrawal or break the agreement. Given that a) these agreements are ultimately voluntary b) there is no perfect agreement, and c) cryptocurrency evolves at a hyperspeed pace ...it may be wise to forego attempts at creating rigid structures, and instead respect the realities of permissionless innovation. However, this does not mean that all attempts at collaboration should be abandoned. I envision a simple structure that does not attempt to curtail any of the freedoms inherent to the ultimate reality, but at the same time is aimed at fostering open communication, collaboration, and healthy competition between developer groups.

Review of the Recent Past

Bitcoin Cash forked away from the original BTC ledger in August 2017. Shortly after the fork, several BCH implementations (ABC, BU, XT, etc) existed. The thought and the hope was that a new era of decentralized development would arise, in stark contrast to the tyranny of BTC Core. In November of 2017, developers from the various groups met in London to discuss changes for the next 6-18 months. There was general agreement. Several groups published a statement of changes they support. All was well. It was also generally agreed that Bitcoin Cash should have regular (“hard fork”) network protocol upgrades every 6 months.

Nearly a year later, as we approach November 2018, we can see that the road has more bumps than we realized. The reality of decentralized development has fallen a bit short of the idealized vision that some had hoped for or imagined.

The Reference Implementation

“We don’t want a reference implementation like Bitcoin Core calling all the shots and bossing everyone around!” This was the sentiment during the time of the birth of Bitcoin Cash.

It should be acknowledged that despite the communities ultimate desire for decentralization, Bitcoin ABC has been the reference implementation for BCH. This is mostly due to its role as the first client and its market share dominance among nodes.

Regardless of whether you believe ABC is doing a good job or a bad job, they are a focal point in the development ecosystem. Critics of ABC raise grievances which could be generalized as ABC being too authoritarian. ABC developers and supporters criticize other groups for reasons that can be generalized as failing to take responsibility.

Identifying the Issues

Here is a (partial) list of issues that developers and the community face currently:

Developers and groups are often blaming/attacking other groups. Developers and groups want changes but do insufficient work to support those changes. Developers and groups impose double standards on others. Developers and groups oppose changes that others believe come at the wrong time (either too late or too early) or using the wrong communication channel. Developers and groups are perceived as either too aggressive or too conservative when it comes to protocol changes. Developers and groups are perceived as complaining rather than constructively solving problems. Productive development discussion is easily derailed. Developers and groups are working on the changes important to themselves, not necessarily what users, businesses, miners, or the market wants. Developers become attached to their creations before getting critical feedback. Changes are implemented with insufficient testing/research or are unfairly blocked because of claims of insufficient testing/researching. Changes are implemented with insufficient necessity/benefit or are unfairly blocked because of claims of insufficient necessity/benefit. The wider community complains that development is either too hasty or too slow. The wider community is not kept in the loop about development. The decision making process is unclear and opaque. The wider community is not informed or is misinformed about who is truly attempting to collaborate and who is behaving irresponsibly.

I believe these (and similar) issues are merely symptoms . The root problems underlying these issues boil down to: A) The wrong philosophy (unrealistic assumptions and expectations) B) The wrong process (lack of a clear, sensible, and documented process)

The Right Philosophy

There is no perfect system. But the right contextual understanding of the problem leads to much better results. The London meeting was based on the expectation that everyone seriously involved in space are reasonable, rational, and responsible, and that we can sensibly decide together how to advance the protocol. It is becoming apparent that this expectation cannot be met in the long term. Contention will inevitably arise. It has already surfaced in several instances in the last year. Yet, much of the community continues to largely operate on this London mindset. As a result, nearly everyone becomes disappointed. There is a spectrum of cooperation. On one extreme, every individual acts completely independently. On the other, absolute consensus is achieved before making changes.

The problems here are twofold: First, we are probably too skewed toward hoping for consensus rather than accepting the reality of competition between groups. Secondly, what we say and what we do are not in concert. We have been saying and acting like there is a shared decision making process but in reality groups are mostly doing what they want and acting independently.

Given all these considerations, it seems the right attitude is to assume most groups will act independently. This basic assumption seems conducive to minimizing disappointment about the actions of others on all sides.

The Right Process

The current process is vague. All that is really clear is that there was a general agreement in London to do periodic upgrades every 6 months, with a 3-month cut-off for changes.

There is nothing wrong with having the process be simple (in fact simpler is usually better), but there are a few basic ingredients missing that would greatly improve things. The biggest problem is that there is currently no review period. Developers are expected to get their changes in by the 3 month cutoff-date, at which point they could either be pushed forward without enough review, or blocked because “there’s not enough time”. Obviously, this needs to change.

The other big problem is that of communication. Developers often do not communicate clearly enough, nor can they necessarily be expected to, as we already established that expecting anything of others is bound to result in disappointment.

However, what we should strive for are public announcements from groups at major process milestones. This is a simple and straightforward request. If certain groups can do this and others do not, then the court of public opinion (including the miners) can pass judgement accordingly.

Specifics

The main advantages to regular network upgrades are that it allows us to continually evolve as necessary, it prevents ossification of the protocol (a fate that befell BTC), and it accustoms exchanges and other businesses to upgrading their BCH nodes on a regular schedule.

The purpose of this article isn’t to prescribe the ideal recipe that groups should use. ABC, BU, and others need to decide that for themselves. But for purposes of illustration, we can attempt to give one concrete example of a workable system.

6 months is an aggressively short time if we want to include a dedicated period of time for peer review and community discussion (which as we discussed, is the biggest thing lacking right now). A 6-month period might be possible if some phases overlap; specifically the coding for one fork would have to begin while the previous was being deployed.

If the period was instead 9 months, it might look like the following. Please note this is just one possible example.

3 months of development 2 months of peer review and community discussion 2 months for cross-implementation 2 months to deploy

Developers and groups should make an announcement at the start of the development period to let the community know what they are working on. This allows not only other groups to remain informed, but also the wider community. Miners and businesses should be informed early and clearly about what development groups are working on so they can give valuable market-based feedback.

The end of the development period and the beginning of the review period should be marked with an announcement of all the changes proposed for the next upgrade, and should include a specification and a working implementation.

The 2 month review period allows everyone in the ecosystem to thoroughly debate and weigh in with their opinions. During the review period, official statements can and should be published by each group to indicate contention, support, or conditional support of changes proposed by other major groups. In this period, small modifications to existing proposals can be made, and proposals or components of proposals can be dropped; however additions should be avoided. Then there are 2 months of “cross-implementation”, meaning that groups can add the proposals from other groups to their own code if they accept it. Finally, deployment. As a practical matter, a 2 month period is required for a healthy and safe deployment in any case.

Groups should make regular and official statements. A best practice could be monthly statements. Announcements and publications should be done on each group's main website or blog. Those that choose to do announcements in private channels or even social media rather than through official channels abdicate the responsibility to communicate simply and clearly.

Summary

It is time for BCH to enter the next phase of maturity in decentralized development. Gone are the days when everyone can be expected to organically form consensus. Perhaps they never really existed. Developer groups need to openly compete. There is no perfect process, but we can utilize a simple development schedule including a review period, along with public statements issued by major development groups. This allows the freedom and independence intrinsic to Bitcoin development, while also providing a loose structure for collaboration.

Expectations of others should be abandoned. Those willing and able to honor their commitments of at least a basic standard of communication will do so, and those who won’t, won’t. The miners and community will then be empowered to make better decisions, and we can resolve or eliminate many of the problems that have plagued the development community in the last year.