Software Craftsmanship Raising the bar for software development Southern Fried Agile October 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 Craftsmanship, 2001 Manifesto for Software Craftsmanship, 2009 The Clean Coder, 2011 The Software Craftsman, 2014
The Pragmatic Programmer: From Journeyman to Master Andrew 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 Imperative Pete McBreen, 2001
Software Craftsmanship Antidote for software engineering Developer skill and experience
Software Craftsmanship Developer portfolio Maintainability Apprenticeship
Software Craftsmanship Controversial Longevity
Software Craftsmanship Controversial Outsourcing
Software Craftsmanship Controversial Maintenance is high-status Right of refusal
A Code of Conduct for Professional Programmers 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, Pride Sandro Mancuso, 2014
The Software Craftsman Technical excellence Care for your craft Invest in your career
The Software Craftsman Sharing Mentoring
The Software Craftsman Controversial “Many Agile projects are now, steadily and iteratively, producing crap code.”
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 Controversial Learn and practice on your own time
Professionalism Controversial Manage your own time
Professionalism “I didn’t say it was your fault, I said I was blaming you.” – Winston Churchill
Professionalism Controversial Is good code impossible?
Professionalism Controversial Is good code impossible?
Professionalism Controversial A series of unfortunate events…
Professionalism Controversial A series of unfortunate events…
Integrity Adherence to principles and values Courage
Responsibility Personal responsibility For your work For your personal development 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
“Nothing so needs reforming as other people’s habits.” 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 Controversial Not a separate task
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 Tests and “seams” Working Effectively with Legacy Code Tests and “seams”
Your Career
Your Career Controversial Getting promoted away from your craft
Managers Collaboration Enlightened managers Transparency
Compensation Controversial Pay based on value
Compensation Controversial More valuable than managers
Craftsmanship vs Agile Complementary Process versus technical discipline Building the right thing; building it right
The Manifesto for Software Craftsmanship 2009 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
Challenges Developer discipline
Challenges Customer responsibility Economics
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