So I’m not sure if this type of development methodology has ever been applied to such an extreme before, so I decided to document it. In a nutshell, it’s similar to test-driven triple programming development.
Four of us sat around a table in our Berlin office while we rapidly developed the alpha codebase. Three people (Vitalik, Jeff, and I) each code our own cleanroom implementation of the Ethereum protocol. The fourth was Christoph, the master of testing.
Our goal was to have three fully compatible implementations and a clear specification by the end of three days of practical development. If the distance is large, this process typically takes several weeks.
This time we had to do it quickly. Our process was very simple. First, we discuss the various changes that break the consensus and explain them formally as best we can. Then, individually, we code the changes simultaneously, brainstorming possible explanations to the specification as needed. In the meantime, Christoph devises and codes the tests and populates the results either manually or with the most advanced implementation (C++, usually :-P).
After milestone changes are coded and tests written, each cleanroom implementation is tested against common test data compiled by Christoph. If we find a problem, we debug it as a group. So far, this has proven to be an effective way to quickly generate well-tested code and, more importantly, provide a clear and unambiguous formal specification.
Are there more examples of extreme adoption of such techniques?