DZone
DevOps Zone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
  • Refcardz
  • Trend Reports
  • Webinars
  • Zones
  • |
    • Agile
    • AI
    • Big Data
    • Cloud
    • Database
    • DevOps
    • Integration
    • IoT
    • Java
    • Microservices
    • Open Source
    • Performance
    • Security
    • Web Dev
DZone > DevOps Zone > What Is Consumer-Driven Development?

What Is Consumer-Driven Development?

In this article, Kevin Rutherford offers a new spin on the concept of outside-in, referring to it as consumer-driven development.

Kevin Rutherford user avatar by
Kevin Rutherford
·
Dec. 06, 16 · DevOps Zone · Opinion
Like (3)
Save
Tweet
4.79K Views

Join the DZone community and get the full member experience.

Join For Free

Like many other programmers, I have been using the term “outside-in” development for a long time. I suspect I first encountered it in the writings of Steve Freeman and Nat Pryce, and I’m sure they got it from someone else. Unfortunately, the term can be confusing (I find its Wikipedia page baffling), and I find that it doesn’t capture the whole essence of the way I write software these days. I have also tried using the term “programming by intention,” as advocated by Ron Jeffries. However, that term seems to have a life of its own that is only tangentially related to the way Ron uses it.

The approach I want to describe is this: I begin with the code that wants to consume the outputs of whatever I’m about to develop, and then I work backward. First, I hard-code those outputs by creating new code “close to” the consumer so that I can see that they work. Then, I push the hard-coded values further down one layer at a time until I’m done. (I am also likely to write automated tests, but only at the highest convenient levels rather than having tests for every new level of decomposition I discover. That’s a story for another day.)

The core of the approach that I use is that I begin with a consumer and I write some code to make them happy. Then I treat that new code as the consumer for a new layer of code, and so on. Each layer is written “intentionally”, and does just enough to satisfy the layer above it (and thus all of the layers above that).

Where some layer is providing hard-coded values to its consumer, I think of that code as making simplifying assumptions. It does the job it was asked to do, but only serves a tiny fraction of its audience’s ultimate needs. These hard-coded values aren’t fakes or prototypes; they are a way of creating thin vertical slices quickly. Once I know they are correct, my next coding episode will be to bust one or more of the assumptions by driving the code down to the next layer of detail.

I want to call this consumer-driven development. It’s nothing new, but it seems to surprise teams whenever I demonstrate it.

consumer Testing Nat (unit) career Prototype teams Programmer (hardware)

Published at DZone with permission of Kevin Rutherford, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Practice on Pushing Messages to Devices of Different Manufacturers
  • Vaadin Apps as Native Executables Using Quarkus Native
  • Getting Started With RSocket Kotlin
  • Internal Developer Platform in Plain English

Comments

DevOps Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • MVB Program
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends:

DZone.com is powered by 

AnswerHub logo