Object-oriented programming was supposed to unify the perspectives of the programmer and the end user in computer code: a boon both to usability and program comprehension. While objects capture structure well, they fail to capture system behavior.

DCI (Data, Context and Interaction) is a programming paradigm through which the end user mental model is more fully reflected in readable code. The vision of DCI is to become a unifying foundation for programming in both introductory and advanced programming education, and to bridge the gap between programmer and everyday user through concepts that everyone can understand.

To quote from the article Working with objects—in computer and mind, the primary goals of DCI are as follows:

Alan Kay introduced the notion of object orientation in the early seventies. He regarded an object as a virtual computer and an object system as many computers hooked together by a very fast network. Fundamentally, a computer offers three simple services: it can store data, process data, and communicate data.

DCI achieves these goals by considering three fundamental aspects:

Communication - The missing part

In traditional class-based programming, “storing” and “processing” code is placed together in the same class, and the code for “communicating” (communication between objects) is often scattered across many different classes. DCI is more truly “object-oriented”: objects still contain both data and behavior at runtime, but DCI avoids the often incorrect assumption that system behavior shares the same structure as the data model. This is accomplished by clearly delineating the storing, processing, and communicating capabilities in the code, allowing the programmer to orchestrate how these elements will combine to form objects at runtime and their interactions with each other.

Encoding behavior as a first class citizen in the Context firmly consolidates our ability to reason about what the code will do at runtime without having to study a plethora of classes or prototypes of role-playing objects. This has an array of advantages.


DCI allows:

Key aspects

The key aspects of the DCI architecture are:

DCI and MVC, connected

In many ways, DCI builds on the same concepts that underly MVC (both were invented by Trygve Reenskaug). In MVC, the Model is intended to make the computer feel like an extension of the user's mind, made accessible by supporting Views and Controllers. In other words, MVC transforms the Model data into a physical form that can readily be assimilated by the user’s brain. DCI is about creating a program that faithfully represents the human mental model. The two meet when MVC is used to bridge the gap between the human mind and the model implied by the DCI-based computer system:

Illustration from Lean Architecture (p. 238)

History and common sense argue that users can reap the full value of software only when they understand how the system works, the ideal being that stakeholders can understand critical parts of the program and that some can even write code themselves. DCI makes this goal practical and achievable today. Store, process, and communicate: so simple that everybody can understand it, so universal that it can form the nucleus of computing in business and school.

More details

Video introductions

For a more laid-back introduction, have a look at these flicks:

A glipmse of trygve. Keynote at ACCU 2016, 20 April 2016, by James Coplien.
The DCI Architecture: Supporting the Agile Agenda, by James Coplien.
DCI: Re-thinking the foundations of object-orientation and of programming, by Trygve Reenskaug.
DCI in Practice, by Rickard Öberg.
DCI - How to get ahead in system architecture, by Andreas Söderlund.

More reading and involvement

Please browse around the site. There are additional documents, examples, and many more goodies to look at.

If you want to get involved, go to the Google Group object-composition. That's where the DCI people hang out to ask questions and discuss progress.