Design Driven Development

January 19, 2011

If there’s one step in the software development cycle that’s doesn’t get enough respect IMO, it’s the design phase. I’m not sure why that is. Perhaps it’s that programmers are expensive, and management would rather have them code than cooling their jets. Maybe it’s that specifications are hard to read and wireframe UIs are ugly and it’s hard to imagine how they’d look with nice art. Everyone’s busy. We’ll figure it out as we go…

Test driven development promises to cut development time by finding bugs earlier, but I believe it can actually generate more work if the fundamental design was wrong, as both the tests and the code being tested may now need to be rewritten.

The software development model I’ve seen work best is something like:

  1. Identify the people who will define the project (not always as easy as it sounds).
  2. Brainstorm with those people.
  3. Write up requirements: what the program will and won’t do, what platforms it will run on, et cetera. If there will be different users with different needs, identify those users and come up with scenarios for each. Return to brainstorming as necessary.
  4. Develop wireframes showing the various screens and how you get from one to the next. Prototype as much as possible. Work out as many kinks as possible before beginning to write code.
  5. Design code/data architecture and identify what frameworks and libraries you’ll be using.

And now, let the wild rumpus start!

Of course, this is no silver bullet either. You’ll get three months in and find a major new customer has become interested in the program, but they need some features to work differently. Or a new device hits the market and you have to make it work with that. Or some assumptions just turned out to be wrong. Or maybe, just maybe, you’ll find yourself ahead of schedule because you planned so well (this does happen!) and you’ll have time to implement some new features. Just spend the time to design them first.

Sort of kinda on/slightly off topic, but hilarious none the less:

Why you don’t like changes to your design


3 Responses to “Design Driven Development”

  1. Sanford Redlich said

    As someone you helped convert, I totally agree. I’m actually a fan of detailed use cases and sitting around a table with the wireframes pretending to do what you’d have to do to accomplish the task in the story. Doing that over and over seems to help identify design problems when it’s still cheap to fix them.

  2. Thanks! Happy to have helped make a convert.

    I used to be such a cowboy when it came to programming. We used to design programs over Nerf ping-pong. I’d go write some code, bring it back, and after a few iterations we’d ship a product. It worked fine when the programs were simple and I was the only programmer, but…

    Skipping ahead seventeen years, we were working on a large curriculum authoring and delivery platform. The program had to ship with twenty different curriculum activities in a range of disciplines, from math to reading and we had a very limited time to deliver them all.

    At one point we had three or four curriculum experts working with five programmers, two artists, three people doing QA and one project manager all jamming away trying to make stuff as fast as possible. No one had time to talk to each other because we were all working so fast. Each activity had its own unique design, usability issues and bugs. I called a timeout.

    During the course of one meeting, we decided that all twenty activities could share a common interface, and dropped several features that were adding unnecessary complications. From this design, I was able to develop a scripted framework that we ended up using for every activity. The unified interface and shared code pulled this back from the abyss.

    Wouldn’t it be nice if every meeting (or even one in five) came close to this level of productivity?

  3. Excellent article! We will be linking to this particularly great post
    on our site. Keep up the great writing.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: