Beyond Fast, Good And Cheap
Alan Stevens
Finding our values in the face of uncertainty
Contact Me
Slides: speakerdeck.com/alanstevens
Email/IM: alanstevens@gmail.com
Website: halanstevens.com
Twitter: @alanstevens
nerdhiveindustries.com
II. The Problem
III. Values
V. Rules
I. Backstory
IV. Principals
I. Backstory
I Hate Crappy Code
The Real World
Constraints
Priorities
Values
II. The Problem
The Project Triangle
Fast
GoodCheap
pick any two
Fast
Good
Cheap
How do we balance building the
right thing with building it well?
Building the right thing is always
a higher priority!
I'm never in favor of writing
code poorly, but I am in favor
of writing code to reflect your
current understanding of a
problem even if that
understanding is partial.
Ward Cunningham
“Ward Explains Debt Metaphor”
http://c2.com/cgi/wiki?WardExplainsDebtMetaphor
Can we verify that we are building
the right thing?
The tests specify requirements
in a way that does not require
human interpretation to indicate
success or failure.
Jim Newkirk
Test Driven Development in Microsoft .NET
Building it right has a
minimum acceptable
threshold which must
be met
Once you get your systems to
work, you still have to go back
and clean up the wreckage left
behind by the victorious battle.
“Uncle” Bob Martin
“The Rush”
http://blog.objectmentor.com/articles/2009/06/26/the-rush
You are not done until the
victorious code has been
cleaned, polished, and oiled.
“Uncle” Bob Martin
“The Rush”
http://blog.objectmentor.com/articles/2009/06/26/the-rush
The Last 10% is 50% Of The Work
How do we guarantee baseline
design without impeding
productivity?
Image credit : FlyoverPeople.net
III. VALUES
The *ILITIES
Agility
Testability
Readability
Reversibility
Changeability
Flexibility
Maintainability
Coined by Kevlin Henney
Prevention is the best cure
Continuous Improvement
“With every mistake, I must
surely be learning”
George Harrison
As applications mature, they should
become more maintainable, not less.
Avoid Complacency
IV. Principles
Value Developer Cycles
Over CPU Cycles
Do the simplest thing that
could possibly work
Follow the “Boy Scout Principle”
Manage Technical Debt
I thought that rushing software
out the door to get some
experience with it was a good
idea, but that of course, you
would eventually go back
Ward Cunningham
“Ward Explains Debt Metaphor”
http://c2.com/cgi/wiki?WardExplainsDebtMetaphor
as you learned things about that
software you would repay that
loan by refactoring the program
to reflect your experience as you
acquired it.
Ward Cunningham
“Ward Explains Debt Metaphor”
http://c2.com/cgi/wiki?WardExplainsDebtMetaphor
Enable Change
Build Architectural Seams
At least build fault lines
V. Rules
the code is
more what
you'd call
"guidelines"
than actual rules
a developer's career is spent
pursuing better and better
answers to the question
"where should this code go?"
Jeremy Miller
On Writing Maintainable Code
http://codebetter.com/blogs/jeremy.miller/archive/2006/12/06/On-Writing-Maintainable-Code.aspx
Where should
this code go?
Don’t Repeat Yourself
&
Separation of Concerns
D RY
Don’t
Repeat
Yourself
See it once: do it
See it twice: notice it
See it a third time:
Abstract It!
The Rule of Three
Separation of Concerns
High Cohesion
&
Low Coupling
When you finally realize what
your program is doing, you
have to go back and make it
look like you knew that all
along.
Ward Cunningham
“Mastering the Craft of Programming”
http://railslab.newrelic.com/2009/09/15/ward-cunningham-aboutus-org
Make it look like it was easy
to write this program, even if
it wasn’t.
Ward Cunningham
“Mastering the Craft of Programming”
http://railslab.newrelic.com/2009/09/15/ward-cunningham-aboutus-org
Make it look
like it was
easy to write.
Thanks For Listening!
Email/IM: alanstevens@gmail.com
Blog: http://halanstevens.com
Twitter: @alanstevens
Slides: speakerdeck.com/alanstevens
Email/IM: alanstevens@gmail.com
Website: halanstevens.com
Twitter: @alanstevens
Thanks For Listening!

Beyond Fast Good and Cheap