So I’m not sure if this kind of development methodology has ever been applied to such an extreme, so I thought I’d document it. In a nutshell, it’s a kind of test-driven triplet programming development.
As we accelerated development of our alpha codebase, four of us sat around a table in the Berlin office. Three people (Vitalik, Jeff and me), each coding their own clean room implementation of the Ethereum protocol. The fourth was Christoph, our test master.
Our goal was to have three fully supported implementations, as well as one unambiguous specification by the end of three days of substantial development. Remotely, this process normally takes a few weeks.
This time we needed to expedite it; our process was pretty simple. We first discuss the various consensus-breaking changes and formally describe them to the best of our ability. Then, individually, each of us strives to codify the changes simultaneously, popping up on possible clarifications to the specs as needed. Meanwhile, Christoph designs and codes tests, filling in the results manually or with the most advanced implementations (C++, usually :-P).
After coding the changes from a milestone and writing the tests, each clean room implementation is tested with the common test data that Christoph compiled. When problems are found, we debug them as a group. So far, this has proven to be an effective way of producing well-tested code quickly and, perhaps more importantly, delivering clear and unambiguous formal specifications.
Are there more examples of such techniques taken to the extreme?