software craftsmanship raising the bar for software development southern fried agile october 2015
TRANSCRIPT
Software Craftsmanship
Raising the bar for software development
Southern Fried AgileOctober 2015
Who am I?Chris Mair• Software developer/architect at Wells
Fargo.
• Open source: CodeNarc, GMetrics and MockFtpServer projects; Uptime Jenkins plugin.
What is Craftsmanship?
• Long journey to mastery
What is Craftsmanship?
• Improving Software Development• Gaining mastery
What is Craftsmanship?
• More than just “high-quality work”• Mindset and attitude
What is Craftsmanship?
• Reputation• Integrity
What is Craftsmanship?
• Long-term career
A Brief History
The Pragmatic
Programmer, 1999
Software Craftsmanshi
p, 2001
Manifesto for Software
Craftsmanship, 2009
The Clean Coder, 2011
The Software Craftsman,
2014
The Pragmatic Programmer: From Journeyman
to MasterAndrew Hunt and
David Thomas, 1999
The Pragmatic Programmer
• Care about our craft• Sign our work
The Pragmatic Programmer
• Options, not excuses• Knowledge portfolio
The Pragmatic Programmer
• Culture of testing• Responsibility
Software Craftsmanship
: The New
ImperativePete McBreen, 2001
Software Craftsmanship
• Antidote for software engineering• Developer skill and experience
Software Craftsmanship
• Developer portfolio• Maintainability• Apprenticeship
Software Craftsmanship
• Longevity
Controversial
Software Craftsmanship
• Outsourcing
Controversial
Software Craftsmanship
• Maintenance is high-status• Right of refusal
Controversial
The Clean Coder:
A Code of Conduct for Professional Programmers
Robert C. Martin, 2011
The Clean Coder• Craftsmanship• Professionalism• Responsibility• Humility
The Software Craftsman:
Professionalism, Pragmatism, PrideSandro Mancuso, 2014
The Software Craftsman
• Technical excellence• Care for your craft• Invest in your career
The Software Craftsman
• Sharing• Mentoring
The Software Craftsman
“Many Agile projects are now, steadily and iteratively, producing crap code.”
Controversial
Why?
• Agile hangover
Why?
• Lack of technical excellence
Why?
• Poor design and sloppy code• Lack of confidence
Why?
• Software must remain easy, safe and inexpensive to change.
Why?
• Culture• Quality and maintainability
Why?
• Autonomy• Mastery• Purpose
Values• Professionalism• Integrity• Responsibility• Reputation• Continuous learning • Pragmatism• Humility
Professionalism
• Say “no” when necessary• Clear and unambiguous
commitments• Mentoring
Professionalism
• Learn and practice on your own time
Controversial
Professionalism
• Manage your own time
Controversial
Professionalism
“I didn’t say it was your fault, I said I was blaming you.”
– Winston Churchill
Professionalism
• Is good code impossible?
Controversial
Professionalism
• Is good code impossible?
Controversial
Professionalism
• A series of unfortunate events…
Controversial
Professionalism
• A series of unfortunate events…
Controversial
Integrity
• Adherence to principles and values• Courage
Responsibility
• Personal responsibilityo For your worko For your personal developmento For your profession
Responsibility
• Responsibility accepted, not assigned
Reputation
• Quality• Successful projects• Satisfied customers
Continuous Learning
• Read• Practice• Fail
Pragmatism
“Idealism is fine, but the cost becomes prohibitive as it approaches reality”
– William F. Buckley
Humility
“Nothing so needs reforming as other people’s habits.”
– Mark Twain
Humility
• Honest about shortcomings• Respect for others
Practices
• Consistent• Shaped by values
Extreme Programming
• Software development discipline• Values, principles and practices
Extreme Programming• Test-Driven Development (TDD)• Pair Programming• Refactoring• Continuous Integration• Coding Standard• Sustainable Pace …
Adopting Practices
Productivity
Automated Testing
• Engineering rigor; hygiene• Required
Automated Testing
• Not a separate task
Controversial
Automated Testing
• Defect Cost Increase (DCI)
Automated Testing
• Testing is a skill• Testing improves design
Automated Testing
Automated Testing
• Manual testing
Other Stuff …
Code Quality
• Productivity• Transparency• Procrastination
Code Quality
• Quality is always expected!
Legacy Code
• Scary codebase• Working Effectively with Legacy Code
• Tests and “seams”
Your Career
Your Career
• Getting promoted away from your craft
Controversial
Managers
• Collaboration• Enlightened managers• Transparency
Compensation
• Pay based on value
Controversial
Compensation
• More valuable than managers
Controversial
Craftsmanship vs Agile
• Complementary• Process versus technical discipline• Building the right thing; building it
right
The Manifesto for Software
Craftsmanship2009
http://manifesto.softwarecraftsmanship.org/
The Manifesto for Software Craftsmanship
“As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:”
The Manifesto for Software Craftsmanship
“Not only working software,but also well-crafted software”
The Manifesto for Software Craftsmanship
“Not only responding to change,but also steadily adding value”
The Manifesto for Software Craftsmanship
“Not only individuals and interactions,but also a community of professionals”
The Manifesto for Software Craftsmanship
“Not only customer collaboration,but also productive
partnerships”
Criticisms of Manifesto
• Impossible to disagree
General Criticisms
• Romantic notions and nostalgia
General Criticisms
• Prima donnas
• Developer discipline
Challenges
• Customer responsibility• Economics
Challenges
Challenges
• “Adolescent surety”
Challenges
• Internal quality
Call to Action
• Raise the bar
Call to Action
Call to Action
• Passion and Mentoring
Call to Action
• Maintenance as a high-status job
Call to Action
• Technical practices
Call to Action
• Testable and maintainable
Call to Action
• Skepticism and resistance
That’s All Folks…
Thank you
References• Extreme Programming Explained: Embrace Change, 2nd Edition, Kent Beck, and Cynthia Andres,
Addison Wesley, 2004.
• Working Effectively with Legacy Code, Michael Feathers, Prentice Hall, 2004.
• The Pragmatic Programmer: From Journeyman to Master, Andrew Hunt and David Thomas, Addison-Wesley, 1999
• The Software Craftsman: Professionalism, Pragmatism, Pride, Sandro Mancuso, Prentice Hall, 2014
• Software Craftsmanship: The New Imperative, Pete McBreen, Addison-Wesley, 2001
• The Clean Coder, Robert C. Martin, Prentice Hall, 2011
• Drive: The Surprising Truth About What Motivates Us, Daniel Pink, Riverhead Books, 2011.
• “Programming is not a Craft”, Dan North, 2011 (http://dannorth.net/2011/01/11/programming-is-not-a-craft/)
• The Manifesto of Software Craftsmanship, 2009 (http://manifesto.softwarecraftsmanship.org/)
Image Credits• http://www.doceatdoc.com/wp-content/uploads/2012/05/10-things-you-must-give-up-to-become-a-doctor.jpg• http://
contentmanager.faithnetwork.com/FAITHNETWORK_UserFileStore/imagelibraries/ministries/9525adbe-5f29-4962-af4c-a49ef897fa71/Career/career_development.jpg
• https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRV4oEmREth5LWmFJ7zpYp1ffcCOIdBsseYQE3-T5iwxBNsv48i
• http://www.globalnerdy.com/2008/03/20/i-find-your-lack-of-tests-disturbing/• https://
encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQIecHY2lxm4mrMmO1bDmH_kNf1wS9zqnOxWU9xjqFgnRysU6gWTg
• https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQKMOs_4W-8soJ_HxlP5qXjYfe6CWQmrE9gDQDyHRgADrA9mMoJ
• https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQvj3U5hiRqY7pBv0lw3Y6vgI2dsPqAYHZURil8b_gjoV_LRA0q
• https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQoIhWnSCEor9NRfnDjPfouG2VU40aONGuSv4xNtI8zAy0nbiob
• https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTNuZ-ZO8Ny4LEl0LkiYiShoE1NS39V-q-FglCmh3hpCk_o2aZAkQ
• https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcT9IBYzI6OnuMEcaZsZOFJNpNrgeOtMtjc4SfTgdFIKre-cOdjW
• https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR18AKStkC12h3ZwHy9Z5a4eThsd0Yvpy5o9fQcOf9rdoYMZMS7