You cannot describe a system of 100,000 lines of code with OnePieceOfPaper. And about ExtremeProgramming: This can't have been applied to large projects (100,000 lines and up) because: CRC cards are not a good way to design or capture a design. The mechanism begins to break down after about 30-40 classes. And CRC cards do not capture the scenarios/interactions between objects.
How many classes and methods will 100,000 lines give you in C++ or Java? I don't know.
As of Sep 23, 1998, C3 is 1923 classes, 24,193 methods, 69,630 statements, 145,298 lines of code including tests. Without tests, 1357, 16703, 26572, 63207. [Test methods tend to be large.] Since C3 was in fact done using CRC and TheSourceCodeIsTheDesign
, and no other design documents, there's good reason to believe that you can in fact do a project of this many lines this way.
If I read correctly 16703 methods with 63207 lines of code. On average 3.8 lines per method?
We see no evidence that CRC breaks down. However, one of our (perhaps unwritten) design principles is that you can describe any logical bit of functionality in four CRC cards. We're not as smart as Kent, and sometimes it takes a handful. We've never had 20 different classes on the table at the same time.
, but (the way we use it) CrcDoesntCaptureAnything
for posterity. We use CRC to build up enough understanding of what is to be done to go ahead and do it. We do not record any design information except in the code, and in the minds of the people who attended the CRC session.
For a project with large numbers of people who (a) aren't present all the time, and (b) need to understand parts whose CRC sessions they didn't attend, you need to do something special. Two possibilities are:
- Schedule live CRC reviews for people who need to know something. We do this to train new folks, or to bring customers up to date on this and that;
- Document the key aspects of the design in some other form, e.g. UML.
We have not had a need to do the latter on C3, and don't expect to. If we did, we would still do the bulk of our work in CRC and would produce the written document only upon demand. I would expect that in most projects, UMLing everything would be big overkill.
P.S. We don't do it with one sheet of paper. We do it with lots of little sheets of paper with little or nothing written on them.