software craftsmanship: agile is not enough

112
Software Craftsmanship: Agile is Not Enough Ken Auer @kauerrolemodel [email protected]

Upload: ken-auer

Post on 18-Jun-2015

649 views

Category:

Software


2 download

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

Page 1: Software Craftsmanship: Agile Is Not Enough

Software Craftsmanship:Agile is Not Enough

Ken Auer@kauerrolemodel

[email protected]

Page 2: Software Craftsmanship: Agile Is Not Enough

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

Page 3: Software Craftsmanship: Agile Is Not Enough

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

Page 4: Software Craftsmanship: Agile Is Not Enough

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

Page 5: Software Craftsmanship: Agile Is Not Enough

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)

Page 6: Software Craftsmanship: Agile Is Not Enough

Software Craftsmen Ship!

With Quality

Page 7: Software Craftsmanship: Agile Is Not Enough

Object-Oriented ManifestoEverything is an ObjectSend messages to them

Page 8: Software Craftsmanship: Agile Is Not Enough

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”

Page 9: Software Craftsmanship: Agile Is Not Enough

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

Page 10: Software Craftsmanship: Agile Is Not Enough

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

Page 11: Software Craftsmanship: Agile Is Not Enough

* http://agilemanifesto.org/

Page 12: Software Craftsmanship: Agile Is Not Enough

* http://manifesto.softwarecraftsmanship.org

Page 13: Software Craftsmanship: Agile Is Not Enough

* http://manifesto.softwarecraftsmanship.org

Page 14: Software Craftsmanship: Agile Is Not Enough

* http://manifesto.softwarecraftsmanship.org

Page 15: Software Craftsmanship: Agile Is Not Enough

* http://manifesto.softwarecraftsmanship.org

Page 16: Software Craftsmanship: Agile Is Not Enough

* http://manifesto.softwarecraftsmanship.org

Page 17: Software Craftsmanship: Agile Is Not Enough

* http://manifesto.softwarecraftsmanship.org

GitHub & StackOverflow Participation

≠ Well-crafted Software

Page 18: Software Craftsmanship: Agile Is Not Enough

* http://notonlyoo.org/

Page 19: Software Craftsmanship: Agile Is Not Enough

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

Page 20: Software Craftsmanship: Agile Is Not Enough

Two Points of Quality*

* http://c2.com/cgi/wiki?InternalAndExternalQuality

Page 21: Software Craftsmanship: Agile Is Not Enough

Two Points of Quality*

• External (Business/Customer facing)

• Correctness

• Effectiveness

* http://c2.com/cgi/wiki?InternalAndExternalQuality

Page 22: Software Craftsmanship: Agile Is Not Enough

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

Page 23: Software Craftsmanship: Agile Is Not Enough

Dartboards & Darts

Page 24: Software Craftsmanship: Agile Is Not Enough

Dartboards & Darts

• Every project

• Identify dartboard(s)

• Identify interested dart player(s)

• Build capable dart(s)

Page 25: Software Craftsmanship: Agile Is Not Enough

Dartboards & Darts

• Every project

• Identify dartboard(s)

• Identify interested dart player(s)

• Build capable dart(s)

Scenario(s)

Page 26: Software Craftsmanship: Agile Is Not Enough

Dartboards & Darts

• Every project

• Identify dartboard(s)

• Identify interested dart player(s)

• Build capable dart(s)

Scenario(s)

Persona(s)

Page 27: Software Craftsmanship: Agile Is Not Enough

Dartboards & Darts

• Every project

• Identify dartboard(s)

• Identify interested dart player(s)

• Build capable dart(s)

Scenario(s)

Persona(s)

Software Asset(s)

Page 28: Software Craftsmanship: Agile Is Not Enough

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)

Page 29: Software Craftsmanship: Agile Is Not Enough

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)

Page 30: Software Craftsmanship: Agile Is Not Enough

Business Facing Success

Page 31: Software Craftsmanship: Agile Is Not Enough

Business Facing Success

• Need a Subject Matter Expert (SME) to identify potentially viable dartboards

• a dedicated SME or

• someone dedicated to becoming a SME

Page 32: Software Craftsmanship: Agile Is Not Enough

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

Page 33: Software Craftsmanship: Agile Is Not Enough

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

Page 34: Software Craftsmanship: Agile Is Not Enough

Internal Facing Success

Page 35: Software Craftsmanship: Agile Is Not Enough

Internal Facing Success

• We are the SMEs of Quality Code

Page 36: Software Craftsmanship: Agile Is Not Enough

Internal Facing Success

• We are the SMEs of Quality Code

• We are the Users

Page 37: Software Craftsmanship: Agile Is Not Enough

Internal Facing Success

• We are the SMEs of Quality Code

• We are the Users

• We need a model that works

Page 38: Software Craftsmanship: Agile Is Not Enough

Subject Matter Experts?What is an Expert?

Page 39: Software Craftsmanship: Agile Is Not Enough

* http://agilemanifesto.org/

Page 40: Software Craftsmanship: Agile Is Not Enough

* http://agilemanifesto.org/

Page 41: Software Craftsmanship: Agile Is Not Enough

Continuous Refinement of...

• Requirements

• Design

• Plan

• People

• ResultsPotential Value!

?

Page 42: Software Craftsmanship: Agile Is Not Enough

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

Page 43: Software Craftsmanship: Agile Is Not Enough

TDD, Refactoring, Pairing + Collective Code Ownership

Page 44: Software Craftsmanship: Agile Is Not Enough

TDD, Refactoring, Pairing + Collective Code Ownership

• Achieve validated quality code

Page 45: Software Craftsmanship: Agile Is Not Enough

TDD, Refactoring, Pairing + Collective Code Ownership

• Achieve validated quality code

• Shared learning

Page 46: Software Craftsmanship: Agile Is Not Enough

TDD, Refactoring, Pairing + Collective Code Ownership

• Achieve validated quality code

• Shared learning

• In context

Page 47: Software Craftsmanship: Agile Is Not Enough

TDD, Refactoring, Pairing + Collective Code Ownership

• Achieve validated quality code

• Shared learning

• In context

• For context

Page 48: Software Craftsmanship: Agile Is Not Enough

TDD, Refactoring, Pairing + Collective Code Ownership

• Achieve validated quality code

• Shared learning

• In context

• For context

• Anyone(?) can keep it going forward with quality

Page 49: Software Craftsmanship: Agile Is Not Enough

Reality of Internal Quality

Page 50: Software Craftsmanship: Agile Is Not Enough

Reality of Internal Quality

• Easy for anyone to slip in the name of expediency

Page 51: Software Craftsmanship: Agile Is Not Enough

Reality of Internal Quality

• Easy for anyone to slip in the name of expediency

• Make it run. Make it right. Make it fast. OR

Page 52: Software Craftsmanship: Agile Is Not Enough

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.

Page 53: Software Craftsmanship: Agile Is Not Enough

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?

Page 54: Software Craftsmanship: Agile Is Not Enough

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

Page 55: Software Craftsmanship: Agile Is Not Enough

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

Page 56: Software Craftsmanship: Agile Is Not Enough

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

Page 57: Software Craftsmanship: Agile Is Not Enough

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

Page 58: Software Craftsmanship: Agile Is Not Enough

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/

Page 59: Software Craftsmanship: Agile Is Not Enough

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/

Page 60: Software Craftsmanship: Agile Is Not Enough

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/

Page 61: Software Craftsmanship: Agile Is Not Enough

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

Page 62: Software Craftsmanship: Agile Is Not Enough

Learning in Context?

Page 63: Software Craftsmanship: Agile Is Not Enough

Learning in Context?“The Religious Tradesman”- Richard Steele

Excellent thoughts on business

Section on apprenticeship

Page 64: Software Craftsmanship: Agile Is Not Enough

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

Page 65: Software Craftsmanship: Agile Is Not Enough

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

Page 66: Software Craftsmanship: Agile Is Not Enough

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

Page 67: Software Craftsmanship: Agile Is Not Enough

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

Page 68: Software Craftsmanship: Agile Is Not Enough

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

Page 69: Software Craftsmanship: Agile Is Not Enough

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

Page 70: Software Craftsmanship: Agile Is Not Enough

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

Page 71: Software Craftsmanship: Agile Is Not Enough

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?

Page 72: Software Craftsmanship: Agile Is Not Enough

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

Page 73: Software Craftsmanship: Agile Is Not Enough

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

Page 74: Software Craftsmanship: Agile Is Not Enough

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

Page 75: Software Craftsmanship: Agile Is Not Enough

RoleModel Internal Quality Goals

Page 76: Software Craftsmanship: Agile Is Not Enough

RoleModel Internal Quality Goals

• Proficient level code is the minimum acceptable

Page 77: Software Craftsmanship: Agile Is Not Enough

RoleModel Internal Quality Goals

• Proficient level code is the minimum acceptable

• Craftsman level code is the goal

Page 78: Software Craftsmanship: Agile Is Not Enough

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?

Page 79: Software Craftsmanship: Agile Is Not Enough

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”

Page 80: Software Craftsmanship: Agile Is Not Enough

Two Sets of Eyes

Page 81: Software Craftsmanship: Agile Is Not Enough

Two Sets of Eyes

• In a project

Page 82: Software Craftsmanship: Agile Is Not Enough

Two Sets of Eyes

• In a project

• Craftsmanship level will rarely be achieved without a Craftsman

Page 83: Software Craftsmanship: Agile Is Not Enough

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

Page 84: Software Craftsmanship: Agile Is Not Enough

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

Page 85: Software Craftsmanship: Agile Is Not Enough

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

Page 86: Software Craftsmanship: Agile Is Not Enough

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 _____?”

Page 87: Software Craftsmanship: Agile Is Not Enough

Effective Communication?*

* Graph taken from Alistair Cockburn, “Agile Software Development”, Addison-Wesley 2002

Page 88: Software Craftsmanship: Agile Is Not Enough

Effective Communication?*

Github, StackOverflow

Podcast

Destroy All Software, RailsCasts, ...

* Graph taken from Alistair Cockburn, “Agile Software Development”, Addison-Wesley 2002

Page 89: Software Craftsmanship: Agile Is Not Enough

Effective Communication?*

Github, StackOverflow

Podcast

Destroy All Software, RailsCasts, ...

* Graph taken from Alistair Cockburn, “Agile Software Development”, Addison-Wesley 2002

Books, Blogs

Page 90: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Page 91: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Async Pull Requests

Page 92: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Async Pull Requests

Synchronous Pull Requests

Page 93: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Async Pull Requests

Synchronous Pull Requests

Pair Refactoring or Rewriting

Page 94: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Async Pull Requests

Synchronous Pull Requests

Pair Refactoring or Rewriting

Opportunistic Pairing

Page 95: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Async Pull Requests

Synchronous Pull Requests

Pair Refactoring or Rewriting

Opportunistic Pairing

Pair Programming

Page 96: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Async Pull Requests

Synchronous Pull Requests

Pair Refactoring or Rewriting

Opportunistic Pairing

Pair ProgrammingCode outLoud!

Page 97: Software Craftsmanship: Agile Is Not Enough

Effective Skills Transfer

Async Pull Requests

Synchronous Pull Requests

Pair Refactoring or Rewriting

Opportunistic Pairing

Pair ProgrammingCode outLoud!

Individual Code

Deployed

Page 98: Software Craftsmanship: Agile Is Not Enough

Acceptable Methods

• Pair Programming

• Opportunistic Pairing

• Pair Refactoring/Rewriting

• Synchronous pull requests

• Asynchronous pull requests

HotHigh Skill Transfer

Cold Low Skill Transfer

Page 99: Software Craftsmanship: Agile Is Not Enough

Exceptions?

Page 100: Software Craftsmanship: Agile Is Not Enough

Exceptions?

• Short answer is “NEVER”

Page 101: Software Craftsmanship: Agile Is Not Enough

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

Page 102: Software Craftsmanship: Agile Is Not Enough

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)

Page 103: Software Craftsmanship: Agile Is Not Enough

Other Rules of Thumb

Page 104: Software Craftsmanship: Agile Is Not Enough

Other Rules of Thumb

• Don’t use the same reviewer all the time

Page 105: Software Craftsmanship: Agile Is Not Enough

Other Rules of Thumb

• Don’t use the same reviewer all the time

• Cross projects when possible/reasonable

Page 106: Software Craftsmanship: Agile Is Not Enough

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

Page 107: Software Craftsmanship: Agile Is Not Enough

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

Page 108: Software Craftsmanship: Agile Is Not Enough

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

Page 109: Software Craftsmanship: Agile Is Not Enough

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

Page 110: Software Craftsmanship: Agile Is Not Enough

Software Craftsmen Ship!

With Quality

Page 111: Software Craftsmanship: Agile Is Not Enough

Software Craftsmen Ship!

With Quality

Raise The Bar!

Page 112: Software Craftsmanship: Agile Is Not Enough

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