So I’m not sure if this kind of development methodology has been applied to this extent before, so I decided to document it. In short, it is a type of test-driven triple programming development.
During the rapid development of our Alpha database, four of us sat around a table in the office in Berlin. Three people (Vitalik, Jeff, and me) each programmed in their own clean room implementing the Ethereum protocol. The fourth was Christophe, our test master.
Our goal was to have three fully compatible applications as well as unambiguous specifications by the end of three days of core development. At a distance, this process usually takes a few weeks.
This time we needed to speed things up; Our process was very simple. First, we discuss the various changes that violate the consensus and formally describe them as best we can. Then, we individually code the changes one at a time, brainstorming potential clarifications to the specification as needed. Meanwhile, Christoph creates and codes the tests, filling in the results either manually or with remote implementations (C++, generally :-P).
After coding significant changes and writing tests, each cleanroom application is tested against common test data that Christophe has collected. When issues are found, we debug them in a group. So far, this has proven to be an effective way to produce well-tested code quickly and, perhaps more importantly, in providing clear and unambiguous formal specifications.
Are there any other examples of these techniques taken to the extreme?



















.jpg)


