Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox browser.
Hello
Spike Driven Design
Jonathan Berger, Pivotal Labs, October 2012
for the Agile Experience Design Co-Meetup
with the New York Compass and Sass Meetup
What
is Spike Driven Design?
TL;DR
Spike-Driven Development
- • Design in Rails with throw-away code,
- • Screenshoot working software for mocks,
- • Cherry-pick small changes and contribute them back,
- • Devs can harvest code when they go through and TDD the stories.
The Problem
Adobe-app-based design
Good for...
- • Designing before any software is built,
- • Quickly iterating on user flows,
- • Experimenting with new high-level concepts.
Adobe-app-based design
Terrible because...
- • Once working software exists, mockups have to play catchup with reality
- • Does little to aid in designing interactions
Designing in the browser
Good for...
- • Working out low-level tactics,
- • Quickly iterating on interface and small interactions,
- • ~$0 set-up cost
Designing in the browser
Terrible because...
- • The toolset and techniques are immature,
- • Saving your work is difficult,
- • High learning curve, and
- • The tools are tantalizingly close to the real app on the front end, entirely missing on the back end.
Enter
Spike Driven Design
Spike Driven Design
- • Design in Rails itself, using mostly SASS and HAML and little bits of Ruby.
- • No tests; this is throw-away code.
- • Move fast, focus on the UX and visual design problems.
- • Design using the actual medium the user will end up with: working software.
Interlude:
What's a spike?
- • An Agile "spike" is a short investigation into a technique or a problem.
- • By nature it's explicitly exploratory and limited, and the goal is learning.
- • After a spike is completed, the code must be thrown away.
HOW
Do I SDD?
- • Branch the project,
- • Gleefully and recklessly hack around,
- • Write fake methods if needed,
How to SDD
- • Write comments like
# TODO: make this real
,
- • Quick fixes and polish, while I'm in context,
- • As I work, I'll play around with the interaction,
How to SDD
- • Check in regularly w/ the PM & Devs,
- • Write stories in Tracker and take screenshots of the SDD site and attach them as mock ups,
- • I'll also create an epic called "SDD", with a note mentioning where the branch lives and what I've done in it.
How to SDD
- • Go back through my work and break changes down into small, atomic commits
- • I hop onto the master branch
- •
git cherry-pick
the styling commits
BOOM!
Free style tweaks and polish!
Phase Two
- • Devs get to the SDD'd stories in the backlog (which ideally is within a few days).
- • There's a comment pointing them to the branch,
- • which they can check out as a renamed repo and then run on another port:
git clone git@github.com:jonathanpberger/hamazon.git hamazon-sdd-order_history
cd hamazon-sdd-order_history
... (bundle, set up db's, etc)
rails server -p5555
During development
- • Run the real app on port 3000 and do everything normally,
- • Living, functional mock-ups exist for reference on port 5555.
- • They can take a look at the code for ideas on things like structuring the DOM, and can even
- • Harvest things like SASS and assets from the branch.
This means that a lot of the work from the design phase can go directly into the finished project, without duplication of effort, and without sacrificing quality.
When / Where?
So what sorts of projects and teams are good candidates for SDD?
- • We've established the basic design of the app ,
- • We're building a fair number of small or medium-sized features or feature tracks,
- • and it's important that we make sure our additions work well within the existing app and user flows.
Bonus
- • SDD stories pull me into the pair rotation in a non-time-sensitive manner, which helps smooth out rough spots in the rotation if someone has a doctors appointment or is interviewing a candidate.
TL;DR
SDD seems to work well on projects that're past their initial design phase, and have small- to medium-sized teams with a technical designer.
Problems w/ SDD
- • Because of the technical requirements, there's a high learning curve for the designer.
- • It's a little shady to push real work into comments saying "make this real".
- • Sub-production-quality code may leak in.
- • The SDD branch gets stale quickly.
Conclusion
Despite these shortcomings, SDD has proven to be an effective technique for our team. We look forward to continuing to explore this way of working, and especially to hearing if it works for others.
Find me at
jonathanpberger@
pivotallabs.com, gmail.com, twitter, forrst, flickr, etc...
Thanks!
Any questions?