InfoQ

News

Pragmatic is the new black - Reality Driven Development

Posted by Gavin Terrill on Feb 28, 2008 10:00 AM

Community
Architecture,
Agile
Topics
Delivering Value,
Agile Techniques
Tags
Emergent Architecture

Gustavo Duarte, software architect, created a stir when he discussed physicist Richard Feynman's findings on the Challenger Space Shuttle disaster and how they relate to engineering quality software. Gustavo's application of Feynman's principals to software yields four main points:

    • Engineering can only be as good as its relationship with management
    • Big design up front is foolish
    • Software has much in common with other engineering disciplines
    • Reliable systems are built by rigorously tested, incremental bottom-up engineering with an 'attitude of highest quality'

In a follow up article Gustavo elaborates on the concept of empirical evidence, introducing the idea of "Reality Driven Development":

Action and experimentation are the cornerstones of empiricism. No attempt is made to subdue reality by extensive analysis and copious documentation. Reality is invited in via experiments. Instead of agonizing over market research, an empirical company hires interns and develops a product in one summer. A non-empirical company has 43 people planning an off-button design for one year.

The concept, drawing from evolution, espouses the philosophy of survival of the fittest. In essence, you try some stuff, keep what works and throw out what doesn't. Gustavo explains:

A good software development process should optimize experimentation and improve feedback from reality. This is what I mean by reality-driven development. And in software the most important realities are user experience and technical quality, while the primary experiments are working software and code. This isn't a formal model (heh), it's simply my favorite analogy for software development. I like the name "reality-driven" because when you mention reality, people think of users.

The idea shares some of the core principals and techniques of Agile, however Gustavo is (thankfully) not advocating a new methodology:

There is no specific reality-driven methodology. The Agile principles have a lot in common with these ideas (and certainly influenced them), but the devil is in the details. I prefer to think of software engineering in terms of a toolbox, full of techniques we pick and choose for the right situation. Process tools for optimizing experimentation include iterative development, executable architecture, continuous integration, and unit testing.

The bias of Gustavo's approach is toward the user and quality:

Based on this model, the two realities we care about are user experience (including the software's utility) and technical quality. User experience is often neglected in agile and waterfall alike.

Gustavo concludes with a refinement of his bottom-up approach:

  1. Have a bias for experiment over analysis, though both have their place.
  2. Optimize experiments: make them as early, fast, cheap, and broad as you can. Analysis can help here.
  3. Experiment vigorously.
  4. Be smart and proactive about measuring reality: user experience and technical quality.
  5. React to feedback. Let reality drive.

Related Sponsor

VersionOne is recognized by Agile practitioners as the leader in Agile project management tools. Companies such as Adobe, BBC, CNN, Dow, HP, IBM, Sony and 3M have turned to VersionOne to help deliver greater value to their customers.

1 comment

Reply

What about the product vision? by Tim Ferguson Posted Mar 2, 2008 6:13 PM
  1. Back to top

    What about the product vision?

    Mar 2, 2008 6:13 PM by Tim Ferguson

    I really like this approach and agree that the experimentation and reality driven approach can help you come up with the "best" design of the software, but it seems that you can not rely on it solely to give you the vision of where the product needs to go. Don't you think you still need some input from marketing and a visionary to help guide where the experimentation goes and what the long term strategy is? Tim Ferguson, xaware.org

Exclusive Content

VMware Infrastructure 3 Book Excerpt and Author Interview

VMware Infrastructure 3: Advanced Technical Design Guide and Advanced Operations Guide provides a wealth of practical insights into setting up virtualization in todays corporate environments.

Architectures of extraordinarily large, self-sustaining systems

Can a system that is so large it cannot be comprehended be "designed" in a conventional sense? The foundations of computing are about to change. In this talk, Richard P. Gabriel explores why and how.

Using Ruby Fibers for Async I/O: NeverBlock and Revactor

Ruby 1.9's Fibers and non-blocking I/O are getting more attention - we talked to Mohammad A. Ali of the NeverBlock project and Tony Arcieri of the Revactor project.

Agile and Beyond - The Power of Aspirational Teams

Tim Mackinnon talks about the aspirations behind the Agile principles and practices, the desire to become efficient, to write quality code which does not end up being thrown away.

Concurrency: Past and Present

Brian Goetz discusses the difficulties of creating multithreaded programs correctly, incorrect synchronization, race conditions, deadlock, STM, concurrency, alternatives to threads, Erlang, Scala.

ActionScript 3 for Java Programmers

Often the hardest part of changing technologies is language syntax differences. This new article provides Java developers with a transition guide to Actionscript which forms the foundation of Flex.

Neal Ford On Programming Languages and Platforms

Neal Ford talks about having multiple languages running on one of the two major platforms: Java and .NET. He also presents the advantages offered by Ruby compared to static languages like Java or C#.

Future Directions for Agile

David Anderson talks about the history of Agile, the current status of it and his vision for the future. The role of Agile consists in finding ways to implement its principles.