As programmers we tend to use software for solving absolutely all problems. Taking notes, brainstorming, time management. Everything is managed by some sort of software. And though often it makes a lot of sense to use an app, sometimes a piece of paper and a pen are better tools for the job.
This is the first blog post in a series about using low-tech tools for brainstorming, planning, and designing. I'd like to start by introducing one of the most interesting and, unfortunately, underused tools for brainstorming: CRC cards. CRC stands for Candidate, Responsibility, and Collaboration.
CRC cards are index cards on which there are written:
- A candidate's name
- A candidate's information description. Just one or two sentences describing what each candidate is, and what it does.
- A candidate's characterization. It's role stereotype, a pattern, etc.
- A candidate's responsibilities
- A candidate's collaborators
The front side of a card is used to record a candidate's name, purpose, and stereotype.
The back side of a card is used for recording a candidate's responsibilities and collaborators.
Start by writing down each candidate's name, and maybe stereotype. Next, move the cards around, and think about each candidate for a little bit. Then, describe each candidate. Often at this point I have a pretty good idea of what my design looks like. And if it's the case, I just stop. After all, CRC cards are just a brainstorming tool aiming to flesh out the design of a new feature, or system. The goal is not to formally describe collaboration patterns, but to come up with a few good ones.
Originally, CRC stood for Class, Responsibility, Collaboration. But soon most practitioners realized that at such an early stage it’s better to use candidate objects and roles. Only when all collaboration patterns have been fleshed out, we can map candidate roles to classes.
Why not to draw all the same stuff on a whiteboard? Why cards? Because you can move them around, discard them, group them by an abstraction layer or a subdomain. You just cannot do it with a whiteboard, and it’s extremely important. The process of moving stuff around is what sparkles most creative ideas.
Kent Beck and Ward Cunningham described CRC cards in their classic paper "A Laboratory For Teaching Object-Oriented Thinking".
The way I use CRC cards is described in the book "Object Design: Roles, Responsibilities, and Collaborations" by Rebecca Wirfs-Brock, Alan McKean.