• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Software Craftsmanship: Agile is Not Enough
 

Software Craftsmanship: Agile is Not Enough

on

  • 127 views

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 ...

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”.

Statistics

Views

Total Views
127
Views on SlideShare
127
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Software Craftsmanship: Agile is Not Enough Software Craftsmanship: Agile is Not Enough Presentation Transcript

    • Software Craftsmanship:
 Agile is Not Enough Ken Auer @kauerrolemodel ken.auer@rolemodelsoftware.com
    • 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 Manifesto Everything is an Object Send messages to them
    • Object-Oriented Manifesto Everything is an Object Send 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 • Results Potential 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 Intuition Relevant
 Focus Part of
 System Novice Advanced Beginner Competent Proficient Expert * http://litemind.com/expert-roadmap/
    • Dreyfus Model of Skill Acquisition*
 Rules Detached Observer Considers
 Everything Intuition Relevant
 Focus Part 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 Tools TechniquesSkills Domains 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 Tools TechniquesSkills Domains 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 Tools TechniquesSkills Domains 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 Tools TechniquesSkills Domains 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 Tools TechniquesSkills Domains 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 Tools TechniquesSkills Domains 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 Programming Code outLoud!
    • Effective Skills Transfer Async Pull Requests Synchronous Pull Requests Pair Refactoring or Rewriting Opportunistic Pairing Pair Programming Code outLoud! Individual Code Deployed
    • Acceptable Methods • Pair Programming • Opportunistic Pairing • Pair Refactoring/Rewriting • Synchronous pull requests • Asynchronous pull requests Hot High 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
    • 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