How does one elaborate design using CRC cards?

An interesting discussion on Stackoverflow (where I also participated) about using CRC cards in the design process of software projects:

Even Kent Beck itself contributed to the discussion ;) ..., the father of CRC cards (together with Ward Cunningham), Extreme Programming and the creator of the JUnit testing framework (together with Erich Gamma).

Here's part of his answer to the question:
It's hard to summarize in an SO answer, but I'll try. One of the challenges of designing objects is balancing thinking from an overall perspective with thinking from the perspective of an individual object. You need the overall perspective to get the computation completed, but you need the individual object perspective to effectively subdivide the logic and data.

Maintaining this balance is where CRC cards come in. When they are sitting there on the table, you get to look at the computation as a whole. When you pick up a single card, though, you are physically, kinesthetically encouraged to take the point of view of that one object--I have this little piece of this computation to do with limited resources, how am I going to accomplish it?

Over time, the ability to simultaneously hold both perspectives seems to soak into the brain. Less and less gets written on the cards. Then the cards are blank. After a while people just point to where the card would be if they would bother taking a blank one off the stack. Eventually, people have the benefits of the thinking style without needing cards at all. When talking with someone who hasn't mastered the balance, pulling out reals cards can be a useful communication assist, though.

The biggest weakness I find with the cards is ... [read more]



Your ad here?