software craftsmanship: agile is not enough
DESCRIPTION
Some people seem to think that following an Agile process will get you good software. But, the reality is that Software Craftsmanship is found in the work produced, not in the process followed. The Agile Manifesto hints at this, but many have missed it. How do you get that quality up there, consistently keep it there, and keep raising the bar? Through a combination of some discussion on the nature of Skills Acquisition, and an analysis of common practices in software development (from Tests to Pull Requests to Pair Programming), we’ll paint a picture of how to become a true expert that you can’t get from “Agile alone”.TRANSCRIPT
Phenomenon*
1.a fact or situation that is observed to exist or happen, esp. one whose cause or explanation is in question.
* https://www.google.com/search?q=Phenomenon
Community Participation*
1.Community Participation is a progressive political party in Colombia. At the last legislative elections, 10 March 2002, the party won, as one of the many small parties, parliamentary representation. In the election of 2006, the party won no seats.
* https://www.google.com/search?q=Community%20participation%20definition
Craftsman*
1.a person who is skilled in a particular craft.synonyms: artisan, artist, skilled worker; expert, master
* https://www.google.com/search?q=Craftsman+definition
Wisdom*
• “When there are many words, transgression is unavoidable, But he who restrains his lips is wise.” (Proverbs 10:19)
• “For the dream comes through much effort and the voice of a fool through many words.” (Ecclesiastes 5:3)
* All Scripture quotations taken from the New American Standard Bible®, Copyright © 1960, 1962, 1963, 1968, 1971, 1972, 1973, 1975, 1977, 1995 by The Lockman Foundation. Used by permission. (http://www.Lockman.org)
Software Craftsmen Ship!
With Quality
Object-Oriented ManifestoEverything is an ObjectSend messages to them
Object-Oriented ManifestoEverything is an ObjectSend messages to them
“Actually I made up the term object-oriented, and I can tell you I did
not have C++ in mind.” Alan Kay 1997 OOPSLA Keynote
“The Computer Revolution Hasn’t Happened Yet”
Patterns Manifesto“...to use patterns in a generative way in the sense
that Christopher Alexander uses patterns for urban planning and building architecture”*
* http://hillside.net/home/history
Patterns Manifesto“...to use patterns in a generative way in the sense
that Christopher Alexander uses patterns for urban planning and building architecture”*
* http://hillside.net/home/history
“The Accused, by distilling hard-won design expertise into patterns, have
encouraged novices to act like experts.”
OOPSLA 1999 Show Trial of the Gang of Four
* http://agilemanifesto.org/
* http://manifesto.softwarecraftsmanship.org
* http://manifesto.softwarecraftsmanship.org
* http://manifesto.softwarecraftsmanship.org
* http://manifesto.softwarecraftsmanship.org
* http://manifesto.softwarecraftsmanship.org
* http://manifesto.softwarecraftsmanship.org
GitHub & StackOverflow Participation
≠ Well-crafted Software
* http://notonlyoo.org/
No More Manifestos*
“I believe this new face of agility has three simple tenets, and doesn't need a manifesto at all:
1. Ship as often as possible. 2.Keep quality high. 3. Solicit and respond to feedback.”
- David Starr, “So Long and Thanks for the All the Manifestos”, Visual Studio Magazine 16 June 2013
* http://visualstudiomagazine.com/articles/2013/06/01/so-long-and-thanks-for-the-all-the-manifestos.aspx
Two Points of Quality*
* http://c2.com/cgi/wiki?InternalAndExternalQuality
Two Points of Quality*
• External (Business/Customer facing)
• Correctness
• Effectiveness
* http://c2.com/cgi/wiki?InternalAndExternalQuality
Two Points of Quality*
• External (Business/Customer facing)
• Correctness
• Effectiveness
• Internal (Technologist facing)
• Software Asset leverage
• Customer benefit: Maintainable/Extendable... cost effectiveness
* http://c2.com/cgi/wiki?InternalAndExternalQuality
Dartboards & Darts
Dartboards & Darts
• Every project
• Identify dartboard(s)
• Identify interested dart player(s)
• Build capable dart(s)
Dartboards & Darts
• Every project
• Identify dartboard(s)
• Identify interested dart player(s)
• Build capable dart(s)
Scenario(s)
Dartboards & Darts
• Every project
• Identify dartboard(s)
• Identify interested dart player(s)
• Build capable dart(s)
Scenario(s)
Persona(s)
Dartboards & Darts
• Every project
• Identify dartboard(s)
• Identify interested dart player(s)
• Build capable dart(s)
Scenario(s)
Persona(s)
Software Asset(s)
Dartboards & Darts
• Every project
• Identify dartboard(s)
• Identify interested dart player(s)
• Build capable dart(s)
• Validate and repeat until you have a winning combination...
Scenario(s)
Persona(s)
Software Asset(s)
Dartboards & Darts
• Every project
• Identify dartboard(s)
• Identify interested dart player(s)
• Build capable dart(s)
• Validate and repeat until you have a winning combination...
• ...or the money runs out
Scenario(s)
Persona(s)
Software Asset(s)
Business Facing Success
Business Facing Success
• Need a Subject Matter Expert (SME) to identify potentially viable dartboards
• a dedicated SME or
• someone dedicated to becoming a SME
Business Facing Success
• Need a Subject Matter Expert (SME) to identify potentially viable dartboards
• a dedicated SME or
• someone dedicated to becoming a SME
• Need User Feedback
• access to Users (various roles/personas)
• access to Potential Users
Business Facing Success
• Need a Subject Matter Expert (SME) to identify potentially viable dartboards
• a dedicated SME or
• someone dedicated to becoming a SME
• Need User Feedback
• access to Users (various roles/personas)
• access to Potential Users
• A business model that works with the above
Internal Facing Success
Internal Facing Success
• We are the SMEs of Quality Code
Internal Facing Success
• We are the SMEs of Quality Code
• We are the Users
Internal Facing Success
• We are the SMEs of Quality Code
• We are the Users
• We need a model that works
Subject Matter Experts?What is an Expert?
* http://agilemanifesto.org/
* http://agilemanifesto.org/
Continuous Refinement of...
• Requirements
• Design
• Plan
• People
• ResultsPotential Value!
?
eXtreme Programming
• code reviews => pair programming
• testing => 100% unit, tracking acceptance
• design => continuous refactoring
• simplicity => TSTTCPW, YAGNI, test-driven
• customer involvement => they drive
• integration => daily or more often
• short iterations => 1-4 week release cycle
• risk management => collective code ownership
TDD, Refactoring, Pairing + Collective Code Ownership
TDD, Refactoring, Pairing + Collective Code Ownership
• Achieve validated quality code
TDD, Refactoring, Pairing + Collective Code Ownership
• Achieve validated quality code
• Shared learning
TDD, Refactoring, Pairing + Collective Code Ownership
• Achieve validated quality code
• Shared learning
• In context
TDD, Refactoring, Pairing + Collective Code Ownership
• Achieve validated quality code
• Shared learning
• In context
• For context
TDD, Refactoring, Pairing + Collective Code Ownership
• Achieve validated quality code
• Shared learning
• In context
• For context
• Anyone(?) can keep it going forward with quality
Reality of Internal Quality
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
• Make it run. Make it right. Make it fast. OR
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
• Make it run. Make it right. Make it fast. OR
• Make it run... fast enough?… Ship it.
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
• Make it run. Make it right. Make it fast. OR
• Make it run... fast enough?… Ship it.
• Make it right?
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
• Make it run. Make it right. Make it fast. OR
• Make it run... fast enough?… Ship it.
• Make it right?
• Limited by expertise of most skilled participant
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
• Make it run. Make it right. Make it fast. OR
• Make it run... fast enough?… Ship it.
• Make it right?
• Limited by expertise of most skilled participant
• Can increase by collaboration
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
• Make it run. Make it right. Make it fast. OR
• Make it run... fast enough?… Ship it.
• Make it right?
• Limited by expertise of most skilled participant
• Can increase by collaboration
• Two novices don’t produce the quality of experts by pairing
Reality of Internal Quality
• Easy for anyone to slip in the name of expediency
• Make it run. Make it right. Make it fast. OR
• Make it run... fast enough?… Ship it.
• Make it right?
• Limited by expertise of most skilled participant
• Can increase by collaboration
• Two novices don’t produce the quality of experts by pairing
Dreyfus Model of Skill Acquisition*
Rules Detached Observer
Considers Everything
IntuitionRelevant
FocusPart of System
Novice
Advanced Beginner
Competent
Proficient
Expert
* http://litemind.com/expert-roadmap/
Dreyfus Model of Skill Acquisition*
Rules Detached Observer
Considers Everything
IntuitionRelevant
FocusPart of System
Novice
Advanced Beginner
Competent
Proficient
Expert
Context Matters
* http://litemind.com/expert-roadmap/
Knowledge vs. Skill*
“There’s much more to mastering a skill than just acquiring more knowledge. Just like adults are not simply bigger children, experts are not only smarter, more knowledgeable or faster
than novices. The differences can be found at a more fundamental level, such as in how they perceive the world and approach problems.”
- Luciano Passuello
* http://litemind.com/expert-roadmap/
To a Novice, an Advanced Beginner looks like an Expert
“Have cheap people do easy things under the CLOSE supervision of someone who knows the difference”
- Me, 2010 SCNA talk “Lean Craftsmanship vs. Corporate Craftsmanship”
“Have advanced beginners do tasks for which the rules they know are appropriate to the context and check their work. Let them watch, and have discussions with, someone who has the appropriate skills for the task when the advanced beginner does not”
- Me, Today, this talk
Learning in Context?
Learning in Context?“The Religious Tradesman”- Richard Steele
Excellent thoughts on business
Section on apprenticeship
Learning in Context?
“Situated Learning: Legitimate Peripheral Participation”- Jean Lave & Etienne Wenger
People learn by being there
Not out of sight of experts work
“The Religious Tradesman”- Richard Steele
Excellent thoughts on business
Section on apprenticeship
Cost of Advanced Beginners
Novice
Advanced Beginner
Competent
Proficient
Expert
Clueless
Mostly “right”
Make it run... right?
All of us are Novices at some things... Some may be experts in others... Usually somewhere in between
ToolsTechniquesSkillsDomains
Languages
Cost of Advanced Beginners
Novice
Advanced Beginner
Competent
Proficient
Expert
Clueless
Mostly “right”
Make it run... right?
All of us are Novices at some things... Some may be experts in others... Usually somewhere in between
ToolsTechniquesSkillsDomains
Languages
Follow rules on well-defined tasks
Cost of Advanced Beginners
Novice
Advanced Beginner
Competent
Proficient
Expert
Clueless
Mostly “right”
Make it run... right?
All of us are Novices at some things... Some may be experts in others... Usually somewhere in between
ToolsTechniquesSkillsDomains
Languages
Follow rules on well-defined tasks
Complete similar tasks following rules
Cost of Advanced Beginners
Novice
Advanced Beginner
Competent
Proficient
Expert
Clueless
Mostly “right”
Make it run... right?
All of us are Novices at some things... Some may be experts in others... Usually somewhere in between
ToolsTechniquesSkillsDomains
Languages
Follow rules on well-defined tasks
Complete similar tasks following rules
Have conceptual models in which to operate
Cost of Advanced Beginners
Novice
Advanced Beginner
Competent
Proficient
Expert
Clueless
Mostly “right”
Make it run... right?
All of us are Novices at some things... Some may be experts in others... Usually somewhere in between
ToolsTechniquesSkillsDomains
Languages
Follow rules on well-defined tasks
Complete similar tasks following rules
Have conceptual models in which to operate
Have conceptual framework in which to adjust
Cost of Advanced Beginners
Novice
Advanced Beginner
Competent
Proficient
Expert
Clueless
Mostly “right”
Make it run... right?
All of us are Novices at some things... Some may be experts in others... Usually somewhere in between
ToolsTechniquesSkillsDomains
Languages
Follow rules on well-defined tasks
Complete similar tasks following rules
Have conceptual models in which to operate
Have conceptual framework in which to adjust
Intuitively identify and solve problems... it’s simple
Getting Past Advanced Beginner
• “Proficient practitioners can take full advantage of the reflection and feedback that is core to agile methods.” – (“Pragmatic Thinking & Learning”,
Andrew Hunt, p.35)
• But how do you get there? – Individual exercise? – Team work?
High Performance Team in Custom Software Development
Level Description Dreyfus Model
plus experience
Master Craftsman
Expert >25,000 hours including >10,000 in leadership
Sr. Craftsman
Expert/Proficient, >15,000 hours including >3,000 in leadership
Craftsman Proficient, typically >10,000 hours plus proven leadership skills
High Performance Team in Custom Software Development
Level Description Dreyfus Model
plus experience
Master Craftsman
Expert >25,000 hours including >10,000 in leadership
Sr. Craftsman
Expert/Proficient, >15,000 hours including >3,000 in leadership
Craftsman Proficient, typically >10,000 hours plus proven leadership skills
Level Description Dreyfus Model
plus experience
Sr. Developer/Designer
Competent to Proficient, >8,000 hours OR >6,000 hours plus leadership skills
Developer/Designer
Competent, >5000 hours
Jr. Developer/Designer
Competent w/ some holes in experience, >2000 hours
High Performance Team in Custom Software Development
Level Description Dreyfus Model
plus experience
Master Craftsman
Expert >25,000 hours including >10,000 in leadership
Sr. Craftsman
Expert/Proficient, >15,000 hours including >3,000 in leadership
Craftsman Proficient, typically >10,000 hours plus proven leadership skills
Level Description Dreyfus Model
plus experience
Sr. Developer/Designer
Competent to Proficient, >8,000 hours OR >6,000 hours plus leadership skills
Developer/Designer
Competent, >5000 hours
Jr. Developer/Designer
Competent w/ some holes in experience, >2000 hours
Level Description Dreyfus Model plus experience
Sr. Resident Developer/ Designer
Advanced Beginner with Competence in areas, Craftsmanship Academy >1500 hours
Resident Developer/ Designer
Advanced Beginner with Competence in areas, Craftsmanship Academy >1000 hours
Apprentice Developer/Designer
Advanced Beginner, Craftsmanship Academy >500 hours
Novice Developer/Designer
Novice, in Craftsmanship Academy, <500 hours
RoleModel Internal Quality Goals
RoleModel Internal Quality Goals
• Proficient level code is the minimum acceptable
RoleModel Internal Quality Goals
• Proficient level code is the minimum acceptable
• Craftsman level code is the goal
RoleModel Internal Quality Goals
• Proficient level code is the minimum acceptable
• Craftsman level code is the goal
• But how do we keep it at that level when others are on the project?
Two Sets of Eyes on all production code
The RoleModel Standard for Internal Quality...A reminder that we care about “Make it Right”
AND“Helping Others Learn the Craft”
Two Sets of Eyes
Two Sets of Eyes
• In a project
Two Sets of Eyes
• In a project
• Craftsmanship level will rarely be achieved without a Craftsman
Two Sets of Eyes
• In a project
• Craftsmanship level will rarely be achieved without a Craftsman
• Typically, will only rise to “Highest Skill Level” on the project
Two Sets of Eyes
• In a project
• Craftsmanship level will rarely be achieved without a Craftsman
• Typically, will only rise to “Highest Skill Level” on the project
• Across projects
Two Sets of Eyes
• In a project
• Craftsmanship level will rarely be achieved without a Craftsman
• Typically, will only rise to “Highest Skill Level” on the project
• Across projects
• Can benefit from Higher Skill Level input
Two Sets of Eyes
• In a project
• Craftsmanship level will rarely be achieved without a Craftsman
• Typically, will only rise to “Highest Skill Level” on the project
• Across projects
• Can benefit from Higher Skill Level input
• “How did/would you do _______ in the context of _____?”
Effective Communication?*
* Graph taken from Alistair Cockburn, “Agile Software Development”, Addison-Wesley 2002
Effective Communication?*
Github, StackOverflow
Podcast
Destroy All Software, RailsCasts, ...
* Graph taken from Alistair Cockburn, “Agile Software Development”, Addison-Wesley 2002
Effective Communication?*
Github, StackOverflow
Podcast
Destroy All Software, RailsCasts, ...
* Graph taken from Alistair Cockburn, “Agile Software Development”, Addison-Wesley 2002
Books, Blogs
Effective Skills Transfer
Effective Skills Transfer
Async Pull Requests
Effective Skills Transfer
Async Pull Requests
Synchronous Pull Requests
Effective Skills Transfer
Async Pull Requests
Synchronous Pull Requests
Pair Refactoring or Rewriting
Effective Skills Transfer
Async Pull Requests
Synchronous Pull Requests
Pair Refactoring or Rewriting
Opportunistic Pairing
Effective Skills Transfer
Async Pull Requests
Synchronous Pull Requests
Pair Refactoring or Rewriting
Opportunistic Pairing
Pair Programming
Effective Skills Transfer
Async Pull Requests
Synchronous Pull Requests
Pair Refactoring or Rewriting
Opportunistic Pairing
Pair ProgrammingCode outLoud!
Effective Skills Transfer
Async Pull Requests
Synchronous Pull Requests
Pair Refactoring or Rewriting
Opportunistic Pairing
Pair ProgrammingCode outLoud!
Individual Code
Deployed
Acceptable Methods
• Pair Programming
• Opportunistic Pairing
• Pair Refactoring/Rewriting
• Synchronous pull requests
• Asynchronous pull requests
HotHigh Skill Transfer
Cold Low Skill Transfer
Exceptions?
Exceptions?
• Short answer is “NEVER”
Exceptions?
• Short answer is “NEVER”
• Real answer is “Rarely” and “Temporarily”
• Fixing a production problem at night
• Craftsman working by himself on least complex code
• Prototype for demo
What Do We Look For?• Intention Revealing names
• DRY code
• Single (or appropriate) Responsibility
• Least amount of “state” possible
• Tests (well-factored with reasonable edge cases)
• Simple abstractions
• Appropriate use of patterns
• Consistent, readable structure
• Good OO practices
• instances vs. globals
• appropriate composition and inheritance
• Follows appropriate idioms
• Appropriate use of 3rd party code (assets are liabilities)
Other Rules of Thumb
Other Rules of Thumb
• Don’t use the same reviewer all the time
Other Rules of Thumb
• Don’t use the same reviewer all the time
• Cross projects when possible/reasonable
Other Rules of Thumb
• Don’t use the same reviewer all the time
• Cross projects when possible/reasonable
• Goal is to raise the bar, not to win an argument
• Thick skin
• Tender heart
Humble Yourself• You are probably somewhere between a Novice and
Proficient in most things you do
• Find someone better (or potentially better) than you
• Find someone who can learn from you
• If you are an expert, find something else to do that takes you out of your comfortable context(s)
• Don’t stop reading, but seek more collaboration
• If you work alone, collaborate more often
• Encourage others to raise the bar
Are You an Aspiring Software Craftsman?
• Our Craftsmanship Academy is one way
• next entrance in June
• Immersion Phase - 14-16 weeks - foundation laid and reinforced
• Apprenticeship follows
• But…
* http://craftsmanshipacademy.com
Take Charge• You have work to do
• Do it well
• No one is stopping you
• Ask your boss, “do you want us to get better at software development, or just get better at stand-up meetings”?
Software Craftsmen Ship!
With Quality
Software Craftsmen Ship!
With Quality
Raise The Bar!
Dreyfus Model References
• http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
• http://1.usa.gov/1iOLuWC - Dreyfus, Stuart E.; Dreyfus, Hubert L. (February 1980), A Five-Stage Model of the Mental Activities Involved in Directed Skill Acquisition
• http://bit.ly/1fU3aLn - Benner, Patricia (2004), Using the Dreyfus Model of Skill Acquisition to Describe and Interpret Skill Acquisition and Clinical Judgment in Nursing Practice and Education