Scaling API-first – The story of a global engineering organization
It is a sunny day
1. Software Craftsmanship
The Fifth Agile Value
Rik Dryfoos
February 17, 2010
(802) 778-0877
rik@dryfoos.com
2. Software Craftsmanship
• Introduction
• The Costs of Delivery -vs- Ownership
• What is Craftsmanship?
• A Manifesto for Software Craftsmanship
• Problems with Top Down Dictates
• Working Environment
• The McBreen Model
• A Role for vtSDA
• School Curriculum
3. Introduction
• Field trip
• Master of the obvious
• Goal today is to spark dialog
4. Introduction
• We have all seen or heard of cost and time
overrun due to “spaghetti code” or systems that
become too complex to maintain and update
• Is a mess inevitable? - If yes, deal with it by:
• Big Design Up Front
• Change Control
• Today there are tools to address the root issues.
• It is not only fiscally and professionally
responsible, but also profitable.
7. Cost of Delivery
Common Acceptance Criteria:
• Features • Capacity
• Delivery Dates • Availability
• Appearance • Security
• Performance • Cost
8. Cost of Delivery
• Client budget is tight - forego tests
• Get it running now - polish it later
• Perceived quality is skin deep
9. Cost of Delivery
It is July 2006...
You decide that you will cut the delivery cost of your
webapp by making it only work with IE6.
IE6 is favored by over 85% of your users and you don’t
want to spend extra time and money to be standards
compliant AND work with IE.
10. Cost of Ownership
Now it is February 2010...
Your application won’t work with modern browsers
and there are twenty-two unpatched vulnerabilities in
IE6, some of which are rated moderately critical in
severity. *
11. Cost of Ownership
• Spaghetti code
• “He Left Things a Mess”
• Large patches of code that is commented
• No one wants to touch it for fear of breaking it
• Documentation is outdated, misleading or wrong
13. Cost of Ownership
If the project...
• Is not disposable
• Is produced in-house, or
• Is produced as part of a long-term relationship
Then you should stabilize the productivity curve.
Well crafted solutions are cost effective in the long term,
and help establish a relationship built on trust.
14. Cost of Ownership
When code is not written in a way that is “clean” and easy
to understand, development slows over time.
Eventually the codebase will be so tangled that it seems
easier to rewrite the whole thing from scratch.
Re-development begins without the discipline required to
insure that the code is “clean” and easy to understand.
Repeat.
17. What is Craftsmanship?
“You know you are working on clean code when
each routine you read turns out to be pretty
much what you expected.You can call it beautiful
code when the code also makes it look like the
language was made for the problem.”
Ward Cunningham, as quoted in Clean Code, Prentice Hall, 2008, pg 11.
18. What is Craftsmanship?
“Habitability is the characteristic of source code that
enables programmers, coders, bug-fixers, and people
coming to the code later in its life to understand its
construction and intentions and to change it
comfortably and confidently.”
R. Gabriel, Patterns of Software, Oxford University Press, 1996, pg 11.
19. What is Craftsmanship?
Well crafted code demonstrates:
• Simplicity
• Lack of duplication
• Readability
• Elegance
20. What is Craftsmanship?
A Continuum of Understanding
• Apprentice - Software works, or it doesn't.
• Journeyman - Software judged by how clean it is.
• Master - Software development becomes a series
of calculated trade-offs.
When the design works and is habitable, it is easier to
live with the outcomes of your decisions.
22. Manifesto
• Puts a name on the concept of Code Craft that we
actively encourage and foster in our company.
• Clarifies expectations and helps with the mutual
selection process of hiring.
• Creates a dialog which we were previously
struggling to have.
23. Top Down Dictates
Managers often don’t know what to ask for,
let alone how to encourage best practices.
There are well over 10,000 Java jobs on Dice.com
• 3690 mention “J2EE”
• 2466 mention “Linux”
• 98 mention “Refactoring”
• 39 mention “Dependency Injection”
• 10 mention “Inversion of Control”
24. Top Down Dictates
Similarities between Software Development when
viewed as a craft, and blacksmithing:
• Technical knowledge required, but not sufficient
• Need practice and skill with specialized tools
• An eye for aesthetics
It takes a blacksmith to train a blacksmith
25. Top Down Dictates
As a manager, I can...
• Hire craftsmen who are skilled mentors
• Hire motivated apprentices and interns
• Set an example: Right Thing – Right Way
• Provide an environment that values craft
26. Working Environment
• Communication
• Professionalism
• Pair Programming
• Continuous Integration
• Test-Driven / Behavior-Driven Development
• Quality Metrics - Monitoring for Code Smells
• Sufficient backlog to minimize wait time
• Short feedback loop
• Continuous Learning
27. The McBreen Model
Title:
Software Craftsmanship
Author:
Pete McBreen
Publisher:
Addison-Wesley Professional
Pages: 208
Date: August 23, 2001
28. The McBreen Model
• A great craftsman is worth more than her manager
• A great craftsman is probably worth $150K-$250K
• How would you spend a $600,000 salary budget?
• Three great craftsman with three motivated
apprentices, or ten mediocre developers?
29. A Role for vtSDA
Raising the bar of professional software development...
• Community
Linkedin Subgroup
• Practicing
Dojos and Randoris
• Helping Others Learn
Internships
30. Two Dozen Things You Probably
Did Not Learn in School
• Agile Software Development • Lean Software Development
• Aspect-Oriented Programming (AOP) • Loose Coupling and High Cohesion
• Behavior-Driven Design (BDD) • Release Early, Release Often (RERO)
• Big Design Up Front (BDUF) • The S.O.L.I.D. Principles
• Continuous Integration • Single Responsibility Principle (SRP)
• Convention over Configuration (CoC) • Open/Close Principle (OCP)
• Domain-Driven Design (DDD) • Liskov Substitution Principle (LSP)
• Don't Repeat Yourself (DRY) • Interface Segregation Principle (ISP)
• Duplication is Evil (DIE) • Dependency Inversion Principle (DIP)
• Domain Specific Language (DSL) • Test-Driven Design (TDD)
• Fluent Interface • eXtreme Programming (XP)
• Gang of Four's (GoF) Design Patterns • You Ain't Gonna Need It (YAGNI)