It’s sometimes said that agile grew out of the spirit of object orientation: its focus on change, on anthropomorphism, and on people. At the outset object-orientation was all about people. Alan Kay saw objects as a way for people to connect with their environments through their machines, and Trygve Reenskaug’s Model-View-Controller provided the integration of people with their machines. Both were immersed in Doug Englebart’s vision to connect people: where each window on the screen might represent a person in one's circle of contacts, and Doug invented the mouse to be able to switch the focus of the human connection. Waterfall processes and tools became subordinated to individuals and interactions. Kay’s objects were just externalized versions of the operational models active in peoples’ heads — externalized representations that users would create themselves in a child-like programming language. As late as the 1980s people were still talking about anthropomorphic programming.
Fast forward almost 30 years and we witness the formal birth of Agile. It was the nerd’s revenge not only in its implementation emphasis, but also in its subtle amplification of the us-and-them dichotomy between customers and development. End users dropped out of the vocabulary, and software became an independent artefact that only had to be “working” as a consideration separate from “individuals and interactions.” The original OO focus on interactions between end-user individuals and their software became displaced by a focus on interactions between members of the vendor team or, at best, between the vendors in the customer, in the space of processes and tools. Agile replaced the original OO vision of end-user-cum-programmer with a programmer / customer dichotomy,.
In the mean time object-orientation also devolved, replacing most of the original dynamics of networks of interacting objects of the end-user world with the classes of the development world. Object-think would take over the modeling world, architecture world, and programming world; Kay’s operational models would be displaced by a Unified Modeling Language; networks of objects would be replaced by class hierarchies. Reasoning about the correctness of the result of an object network computation would be replaced by unit testing. The collective understanding of how to use MVC properly would become seriously eroded.
The DCI paradigm is one example of how we can return closer to the original vision. It’s about driving our system architecture in terms of end-user mental models rather than technology. It’s about build domain-specific languages that enable end users to express themselves rather than custom-crafting each solution from general-purpose toolboxes. We must view the interaction with the end user with the same attentiveness we give to nerd interactions, and be more outward focused and inclusive of end-user perspectives.
Jim “Cope” Coplien has enjoyed mastering several careers starting as a computer operator and moving on to development at AT&T, and then on to fundamental research in Bell Labs. His research helped establish the foundations of the software pattern discipline, of Scrum (Daily Standups come out of his process work), and of many staples and leading advances in object-orientation, including joint work with Trygve Reenskaug on the DCI paradigm, and is the creator of the trygve programming language.. He has written numerous books and scores of papers. Cope has been writing software since about 1971 and was the first user of C++ outside Bell Labs Research. He continues to deliver code mainly in Objective-C, which he tolerates; Java, which he hates; and Ruby, which he loves. He’s a Mac guy. He has also worked in VLSI CAD, academia, and executive consulting, and for the past 20 years, concern for the human being has been at the core of his work. When he grows up he wants to be an anthropologist.