CRC Cards: The Note Cards of Software Design
How CRC (Class, Responsibility, Collaborator) cards bring clarity and flexibility to conceptual software architecture. Practical analogy, example, and actionable advice.
🧠Software Design, Meet Note Cards ðŸ§
Ever tried organizing a speech using note cards? Each card captures a key talking point — and the power lies in arranging them logically to create a compelling narrative.
Now imagine applying that same logic to software design.
This is where CRC cards — Class, Responsibility, Collaborator — come in. Think of them as the "note cards" of conceptual software architecture.
- Class — What component are we talking about?
- Responsibility — What is this component supposed to do?
- Collaborator — Who (or what) does it work with to fulfill its responsibilities?
CRC cards let you visually and physically simulate a system's structure before diving into implementation. Cheap, flexible, and intentionally small — they encourage clarity, modular thinking, and iterative refinement.
Example: Designing a Bank Machine
- Bank Customer: Responsible for inserting a card and selecting actions. Collaborates with the Bank Machine.
- Bank Machine: Authenticates users, handles deposits/withdrawals, and displays options. Collaborates with Bank Customer, Bank, and Network.
By simulating interactions between cards (just like roleplaying a conversation in your head), you discover gaps, identify new components (like Encryption or Card Reader), and refine your model.
CRC cards aren't magic — just like note cards don't write your speech. But they do make your design thinking visible, flexible, and collaborative.
Next time you're kicking off a system design — start with CRC. Build the architecture before you build the code.
#SoftwareDesign #SystemArchitecture #CRCcards #ObjectOrientedDesign #DesignThinking #ClassResponsibilityCollaborator
What Are CRC Cards? (A Bit of History)
CRC cards were invented by Ward Cunningham and Kent Beck in the late 1980s as a lightweight, collaborative way to design object-oriented systems. The idea: keep each card small, so you focus on essentials and avoid overengineering.
How to Run a CRC Card Workshop (Step-by-Step)
- Gather your team (devs, architects, maybe a product owner)
- Define the scenario (e.g., "Withdraw cash from ATM")
- Write cards: For each class, use an index card or sticky note:
- Top: Class name
- Left: Responsibilities (what it does)
- Right: Collaborators (who it talks to)
- Roleplay the scenario: Pass cards around, simulate method calls/interactions
- Refine: Add, split, or merge cards as gaps or redundancies appear
- Repeat for other scenarios
Detailed Example: Bank Machine CRC Cards
| Class | Responsibilities | Collaborators | | ------------ | --------------------------------------------- | --------------------------- | | BankCustomer | Insert card, select action, enter PIN | BankMachine | | BankMachine | Authenticate, show menu, process transactions | BankCustomer, Bank, Network | | Bank | Validate account, process withdrawal/deposit | BankMachine | | Network | Route requests to remote banks | BankMachine | | CardReader | Read card data | BankMachine | | Encryption | Secure PIN and transaction data | BankMachine |
Simulating a withdrawal:
- BankCustomer inserts card (CardReader reads it)
- BankMachine asks for PIN (Encryption secures input)
- BankMachine authenticates with Bank
- If valid, BankMachine shows menu, processes withdrawal
- Bank updates account, Network routes if needed
Tips for Using CRC Cards in Modern Teams
- Use digital tools (Miro, Mural, Google Jamboard) for remote teams
- Keep cards simple — if a card gets crowded, split the class
- Focus on behavior, not just data structure
- Use CRC early, before UML or code
- Take photos or digitize cards for documentation
Pitfalls & When Not to Use CRC
- Not great for huge systems (too many cards = chaos)
- Can miss non-object-oriented concerns (e.g., functional programming, data pipelines)
- Don't treat CRC as a spec — it's a thinking tool, not a contract
Further Reading
- Ward Cunningham's CRC Card Page
- CRC Cards on Wikipedia
- [Object Design: Roles, Responsibilities, and Collaborations by Wirfs-Brock et al.]