Responsibility-Driven Design

Last updated Apr 16th, 2022
Responsibility-Driven Design is the influential object-oriented design method that presents an effective way to turn requirements into object-oriented software.

🌱 This blog post hasn't fully bloomed. It's very likely to change over the next little while.

“Understanding responsibilities is key to good object-oriented design” — Martin Fowler

Do you struggle with object-oriented programming? Does it sometimes feel like it's overly complex for no reason? When you're writing object-oriented code, do you sometimes feel like you're slowly watching it turn into a spaghetti mess? Do you sometimes feel confused as to when you should create new classes? Do you feel like it might be better to just use functions instead?

What if I told you that there's more to building software with objects than just classes, inheritance, polymorphism and encapsulation?

What if I told you that there's a design method - a way of turning requirements into object-oriented designs - that actually

And what if I told you that it was the programming world's most influentual design method (that all the expert object designers are using) that you've likely never heard about.

About Responsibility-Driven Design (RDD)

Allow me to introduce you to Responsibility Driven Design (RDD): the programming world’s most influential, effective, and intentional approach to designing object-oriented software. I know, big claim. But it’s true.

Responsibility-Driven Design book

My copy of the legendary Object Design book. My second favourite blue programming book. This book is so rare that it's nearly $200 USD nowadays!

RDD, originally invented by Rebecca Wirfs-Brock in the late 80s and modernized in her 2002 book titled Object Design is a learnable and repeatable design method for building object-oriented applications.

Where most of us today write and think in procedural style code using classes and functions because it's often what the languages dictate, Responsibility-Driven Design presents an approach to actually design objects with purpose and intention.

Roles, responsibilities, collaborations

Object software is neighborhoods of collaborating objects which (polymorphically) come and go, each filling in for roles with related responsibilities.

  • Role: A collection of related responsibilities
  • Resoponsibility: An obligation to do (some task/behavior) or know something (some data)
  • Collaboration: An interaction of objects or roles (or both)


To be continued...

Check out the wikipedia page on Responsibility-Driven Design and feel to leave comments or questions for when I finish this post.

Highly recommend reading this page and watching this talk.


Liked this? Sing it loud and proud 👨‍🎤.


Commenting has been disabled for now. To ask questions and discuss this post, join the community.

2 years ago

Hi Khalil, nice outline! Regarding your RDD-claim, I fully agree.

2 years ago

Finish it :D :D

2 years ago

Hi, I'm reading your OOD posts. Looking forward this post!

Stay in touch!

About the author

Khalil Stemmler,
Software Essentialist ⚡

I'm Khalil. I turn code-first developers into confident crafters without having to buy, read & digest hundreds of complex programming books. Using Software Essentialism, my philosophy of software design, I coach developers through boredom, impostor syndrome, and a lack of direction to master software design and architecture. Mastery though, is not the end goal. It is merely a step towards your Inward Pull.

View more in Object-Oriented Design

You may also enjoy...

A few more related articles

Object Stereotypes
The six object stereotypes act as building blocks - stereotypical elements - of any design.
Reality → Perception → Definition → Action (Why Language Is Vital As a Developer)
As developers, we are primarily abstractionists and problem decomposers. Our task is to use language to decompose problems, turnin...
The Code-First Developer
As you improve as a developer, you tend to move through the 5 Phases of Craftship. In this article, we'll discuss the first phase:...
Non-Functional Requirements (with Examples)
Non-functional requirements are quality attributes that describe how the system should be. They judge the system as a whole based ...

Want to be notified when new content comes out?

Join 15000+ other Software Essentialists learning how to master The Essentials of software design and architecture.

Get updates