software craftsmanship: agile is not enough

Post on 18-Jun-2015

649 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

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

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

top related