“Enabling teams and individuals to specify, design and deliver software for a complex world.”

DesignRebecca's BlogContact UsTraining and ConsultingConsultingResources

Wirfs-Brock Associates Home Page > Responsibility-Driven Design

Responsibility-Driven Design

Design Simplicity


Our approach, known as Responsibility-Driven Design, is a way of designing complex software systems using objects and component technology. Responsibility-Driven Design was conceived in 1990 as a shift from thinking about objects as data + algorithms, to thinking about objects as roles + responsibilities. Responsibility-Driven Design catalyzes object technology with practical techniques and thinking tools.

In a responsibility-based model, objects play specific roles and occupy well-known positions in the application architecture. It is a smoothly-running community of objects. Each object is accountable for a specific portion of the work. Objects collaborate in clearly-defined ways, contracting with each other to fulfill the larger goals of the application. By creating such a “community of objects,” assigning specific responsibilities to each, you build a collaborative model of your application.

Objects are more than simple bundles of logic and data ... they are service-providers, information-holders, structurers, coordinators, controllers, and interfacers to the outside world. Each must know and do its part! Thinking in terms of these object role stereotypes enables you to build powerful, flexible applications. Developing consistent control styles for similar parts of your application reduces maintenance costs. Incorporating flexibility into your design at specific “flex points” allows for planned extensions.

Responsibility-Driven Design enables you to think clearly about object design and leverage object technology to its full advantage.

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

The shift to thinking about responsibilities can be a profound one. It impacts all development activities. During analysis, you think about what the system is responsible for and how it will support its users. You can write a form of use case, called a conversation, that record user-system interactions and clearly separate users’ actions from system. During high-level design, you map system responsibilities to appropriate components and subsystems. When employing object technology you assign responsibilities to objects working together to fulfill the larger responsibilities of application. You use responsibilities to define the interfaces of classes and their test plans during coding. Programmers still reason about and discuss object responsibilities while they cope with myriad coding details. When details are hidden in “helper” code they can be changed and extended swiftly without affecting the implementation of major responsibilities. In a complex world of code, data, and interconnected systems, responsibilities are a natural way of thinking about software.

Quite simply, responsibilities are the best way to think about the behaviors of complex software systems!

Who We Are
Rebecca Wirfs-Brock, who founded Wirfs-Brock Associates in 1997, is an object technology innovator and pioneer. Having invented Responsibility-Driven Design while at Tektronix in 1990, she has pushed on “object thinking” for the past 18 years. We also call upon consulting and training associates have proven track records for designing object applications and developing high-quality training and education experiences for object-oriented systems development. Our services span the entire development life-cycle, ranging from courses and tutorials on writing use cases, object design and programming with a design bent. Check out our Responsibility-Driven Design Consulting and Training Services and our new book.

Site Map



Entire Site © Wirfs-Brock Associates 2005 - 2008.
Site Design by Phil Brock/Red Hills Graphics. Click here to contact the Webmaster.