An index card on which one records the responsibilities and collaborators of classes, thus the name,
which stands for Class-Responsibility-Collaboration. There is no relation to CRC Press, nor to CRC Pull.
Example cards from http://c2.com/doc/crc/draw.html
The cards were introduced with WardAndKent
's OOPSLA paper ...
The cards work well by hand or with the aid of CrcCardSoftware
In my mind one of the benefits of CrcCard
s is they activate the right hemisphere of a person's brain. This is the side of the brain which recognizes relationships, makes intuitive leaps, sees the big picture, and can reason analogicaly. Moving cards about on the table is a right-hemisphere activity and will start you thinking in a creative way. The problem is that verbal and symbolic activities happen on the left side. So when you write things down on your CrcCard
s you can be working against the nature of the cards.
Leave them as blank as possible. If someone becomes confused during a CrcCard
session, write a single word on a card or two to end the confusion and continue. The placement of the cards in a pattern and moving them about dynamically is what communicates. Having 5 different colors - one each for the 5 most important objects or object types in the system - can be very handy. Do not flood the table with cards either. A deck of 15 cards, 3 each of 5 colors, can be used to explain anything no matter how complex.--DonWells
We just used them (minus the "card" unfortunately) in some actual documentation. What was most interesting was that we drew lines between the various CRC cards and external actors to show the overall system architecture. The CRC card format is better than something like UML because it is readable even by non-cyborgs. In code, or for fast projects, I write the "CRC cards" directly in the code using FileHeaders
and methods with MeaningfulName
s and MethodComments
. It's very clean and a good way to know when to break classes up. -- Chris O. Asuzu
Post-it Notes or not? Does anybody have an experience with using "Post-it Note" like sticking paper cards? The idea is that once the situation is simulated using the CrcCards on A3 paper (instead of on the plain table), the A3 paper can be archived using the copying machine. Do you think that it makes sense? Could you also comment on how important is the size of the table and of the cards? (I have slightly changed the original question to focus on the single subject. The question is also discussed on ManagingCards page, but it is not focused explicitly. If you feel that the text should be moved to better area, feel free to do it.) -- PetrPrikryl
I've only just started Crc'ing but I think the adhesive on the cards would annoy me, however, if it works well for you, go for it. About copying cards, usually the cards don't persist long, it's just a way of having a discussion. Sometimes they do lie around for a bit on a problem that takes a few days. I can definitely appreciate having a copy if your workplace has an OverEagerCleaningCrew
. I like the 3x5 cards best; they encourage me to write as little as possible. A large, clean table really makes it easy to get a big picture and move things around. -- Ogonna
We use Post-it Notes, and stick them on a wall or a white board. A vertical arangement works better I think. People sit in aula style in the room, all facing the wall, and 1 or 2 people get up and face the audience. After their 1 or 2 minutes "on stage" they sit down, and someone else takes over. Also, we took photo's using a digital camera of the wall as a way of persistence. You can't read the details, but it is good enough for people who attended the session to rebuild the results, e.g., when documenting the results in a text or a UML model. -- Jan Dockx
Well, it seems that walls with cards can persist longer than a table with cards. At least, it is much more difficult to make a coffee ring on the wall ;) -- PetrPrikryl
Sticky notes, on a wall, a poster on the wall or a flip chart are good for notes that are meant to be added and removed (e.g. bug reports), but not moved around. CRC cards belong on a table, with the developers all around the table, so everyone can make changes with her/his own hands in a matter of seconds, instead of having to contemplate a change first, then stand up, walk to the wall and execute it. This is very important, because CRCing is meant to be a form of BrainStorm
ing, no? Working on a poster on the table is a step in the right direction, but A3 paper is too small and the glue would just be annoying. You can always glue the cards down after
you're done laying them out. But even if you don't, archival is not a problem; digital photo cameras are cheap these days. -- NeKs
, et al, provides three in-depth case studies which illustrate the method's application.
They taught us about CRC cards at DeVry
. Unfortunately, the language which they used to teach us about them was object-oriented Cobol. --NickBensema
Has anyone tried this at a higher level, to refine subsystem responsibilities? See SrcCards