Denis Kirevby Denis Kirev

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.

4 min read

🧠 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)

  1. Gather your team (devs, architects, maybe a product owner)
  2. Define the scenario (e.g., "Withdraw cash from ATM")
  3. 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)
  4. Roleplay the scenario: Pass cards around, simulate method calls/interactions
  5. Refine: Add, split, or merge cards as gaps or redundancies appear
  6. 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:

  1. BankCustomer inserts card (CardReader reads it)
  2. BankMachine asks for PIN (Encryption secures input)
  3. BankMachine authenticates with Bank
  4. If valid, BankMachine shows menu, processes withdrawal
  5. 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

Last updated: June 9, 2024