You are previewing The Software Craftsman: Professionalism, Pragmatism, Pride.
O'Reilly logo
The Software Craftsman: Professionalism, Pragmatism, Pride

Book Description

Be a Better Developer and Deliver Better Code

Despite advanced tools and methodologies, software projects continue to fail. Why? Too many organizations still view software development as just another production line. Too many developers feel that way, too—and they behave accordingly.

In The Software Craftsman: Professionalism, Pragmatism, Pride, Sandro Mancuso offers a better and more fulfilling path. If you want to develop software with pride and professionalism; love what you do and do it with excellence; and build a career with autonomy, mastery, and purpose, it starts with the recognition that you are a craftsman. Once you embrace this powerful mindset, you can achieve unprecedented levels of technical excellence and customer satisfaction.

Mancuso helped found the world’s largest organization of software craftsmen; now, he shares what he’s learned through inspiring examples and pragmatic advice you can use in your company, your projects, and your career.

You will learn

  • Why agile processes aren’t enough and why craftsmanship is crucial to making them work

  • How craftsmanship helps you build software right and helps clients in ways that go beyond code

  • How and when to say “No” and how to provide creative alternatives when you do

  • Why bad code happens to good developers and how to stop creating and justifying it

  • How to make working with legacy code less painful and more productive

  • How to be pragmatic—not dogmatic—about your practices and tools

  • How to lead software craftsmen and attract them to your organization

  • What to avoid when advertising positions, interviewing candidates, and hiring developers

  • How developers and their managers can create a true culture of learning

  • How to drive true technical change and overcome deep patterns of skepticism

  • Sandro Mancuso has coded for startups, software houses, product companies, international consultancies, and investment banks. In October 2013, he cofounded Codurance, a consultancy based on Software Craftsmanship principles and values. His involvement with Software Craftsmanship began in 2010, when he founded the London Software Craftsmanship Community (LSCC), now the world’s largest and most active Software Craftsmanship community, with more than two thousand craftsmen. For the past four years, he has inspired and helped developers to organize Software Craftsmanship communities throughout Europe, the United States, and the rest of the world.

    Table of Contents

    1. About This eBook
    2. Title Page
    3. Copyright Page
    4. Contents
    5. Foreword
    6. Preface
      1. About This Book
    7. Acknowledgments
    8. About the Author
    9. Part I. Ideology and Attitude
      1. 1. Software Development in the Twenty-First Century
        1. Seniority
        2. A New Reality
      2. 2. Agile
        1. Process-Oriented Agile Disciplines
        2. Technical-Oriented Disciplines
        3. What Is It to Be Agile?
          1. A Game Changer
          2. People Empowerment
          3. Professional Evolution
        4. Agile Manifesto
          1. Principles Behind the Agile Manifesto
        5. The Agile Transformation Era
        6. The Agile Hangover
          1. A Partial Transformation
          2. But It’s Not All Bad News
        7. Agile Versus Software Craftsmanship
        8. Summary
      3. 3. Software Craftsmanship
        1. A Better Metaphor
        2. What Does Wikipedia Say?
        3. A More Personal Definition
        4. A Shorter Definition
        5. Beyond Definitions
        6. Craft, Trade, Engineering, Science, or Art
        7. Software Craftsmanship History
          1. The Software Craftsmanship Summit
          2. Crossing Borders
          3. Craftsman Swap
          4. Software Craftsmanship Communities
          5. The Software Craftsmanship Manifesto
          6. The Manifesto
        8. Summary
      4. 4. The Software Craftsmanship Attitude
        1. Who Owns Your Career?
          1. Employer/Employee Relationship
        2. Keeping Ourselves Up to Date
          1. Books, Many Books
          2. Blogs
          3. Technical Websites
        3. Know Who to Follow
          1. Social Media
        4. Practice, Practice, Practice
          1. Katas
          2. Pet Projects
          3. Open Source
          4. Pair Programming
        5. Socialize
        6. Deliberate Discovery
        7. Work-Life Balance
          1. Creating Time
          2. Focus: The Pomodoro Technique
          3. Balance
        8. Summary
      5. 5. Heroes, Goodwill, and Professionalism
        1. Learning How to Say No
          1. An Epic Failure
          2. Lesson Learned
          3. Being Professional
        2. Providing Options
          1. An Unexpected and Viable Option
        3. Enlightened Managers
        4. Summary
      6. 6. Working Software
        1. Working Software Is Not Enough
        2. Looking After Our Garden
        3. The Invisible Threat
          1. Hostage of Your Own Software
          2. Hire Craftsmen, Not Average Developers
        4. The Wrong Notion of Time
          1. A Technical Debt Story
          2. A Busy Team with No Time to Spare
          3. The Unit Test Task Card
          4. Using Time Wisely
        5. Legacy Code
          1. A Change in Attitude
          2. Personal and Client Satisfaction
        6. Summary
      7. 7. Technical Practices
        1. The Right Thing versus the Thing Right
        2. Context
        3. Extreme Programming History
        4. Practices and Values
          1. Adding Value through Practices
        5. Pair Programming
        6. Accountability
        7. Pragmatism
        8. Summary
      8. 8. The Long Road
        1. A Tale from a Brazilian Teenager
        2. Focus and Determination
          1. But What if We Don’t Know Where We Are Going?
        3. Job as Investment
        4. Autonomy, Mastery, and Purpose
        5. Career Inside Companies
        6. Summary
    10. Part II. A Full Transformation
      1. 9. Recruitment
        1. An Ordinary Job Description
        2. Too Busy to Interview
        3. No Job Descriptions
          1. What if a Job Description Is Needed?
          2. A Job Is Not Just a Job
        4. Recommendations
        5. Community Involvement
        6. Defining Effective Filtering Criteria
        7. Proactive Recruitment
        8. Summary
      2. 10. Interviewing Software Craftsmen
        1. A Business Negotiation
        2. Identifying Productive Partnerships
          1. A Hiring Company’s Perspective
          2. A Candidate’s Perspective
        3. Good Interviews
          1. The Right Focus
          2. Mind-Mapping a Conversation
          3. Pair-Programming Interview
          4. Bring Your Own Computer
          5. Tailor-Made Interviews
        4. Taking a Punt
        5. Hiring for an Existing Team versus Hiring for a New Team
        6. Pre-Interview Coding Exercises
        7. Everyone Should Know How to Interview
        8. Developers Must Interview Developers
        9. Summary
      3. 11. Interview Anti-Patterns
        1. Don’t Be a Smart-Ass Interviewer
        2. Don’t Use Brainteasers
        3. Don’t Ask Questions to Which You Don’t Know the Answers
        4. Don’t Try to Make the Candidate Look Like a Fool
        5. Don’t Block the Internet
        6. Don’t Code on a Piece of Paper
        7. Don’t Use Algorithms
        8. Don’t Conduct Phone Interviews
        9. Summary
      4. 12. The Cost of Low Morale
        1. The Agile Hangover: Low Morale
        2. The Cost of Employing 9-to-5 Developers
        3. Constrained by Lack of Motivation
        4. Injecting Passion
        5. Summary
      5. 13. Culture of Learning
        1. Wrong Motivation
        2. Creating a Culture of Learning
          1. Start a Book Club
          2. Have a Tech Lunch (Brown Bag Session)
          3. Have Group Discussions (Roundtables)
          4. Switch Projects for an Iteration
          5. Conduct Group Code Reviews
          6. Have Hands-On Coding Sessions
          7. Start Internal Communities of Practice (CoP)
          8. Encourage Pet-Project Time
          9. Engage with External Technical Communities
        3. What if Others Don’t Want to Join In?
          1. Be an Example
          2. Focus on Those Who Care
          3. Don’t Force
          4. Don’t Try to Change Everyone
          5. Avoid Consensus Delays
          6. Don’t Ask for Authorization
          7. Don’t Complicate
          8. Establish a Rhythm
        4. Summary
      6. 14. Driving Technical Changes
        1. Identifying Skepticism Patterns
        2. Be Prepared
        3. Where Do We Start?
          1. Establish Trust
          2. Lead by Example
          3. Choose Your Battles
          4. Iterate, Inspect, and Adapt
        4. Fear and Incompetence
        5. How Do I Convince My Manager?
        6. How Do I Convince My Team to Do TDD?
        7. Facing the Skeptics
          1. The Ivory-Tower Architect
          2. The Wronged
        8. Should We Really Care about All That?
        9. Summary
      7. 15. Pragmatic Craftsmanship
        1. Quality Is Always Expected
        2. Busting the “Expensive and Time-Consuming Quality” Myth
          1. Do We Need to Test-Drive Everything?
        3. Refactoring
        4. The “One Way” of Developing Software
        5. Helping the Business
          1. A Simple and Quick Solution
        6. Software Projects Are Not about Us
        7. Great Versus Mediocre
        8. Four Rules of Simple Design
          1. Design Patterns
          2. Refactoring to Patterns
        9. Craftsmanship and Pragmatism
        10. Summary
      8. 16. A Career As a Software Craftsman
        1. Being a Craftsman
          1. Honesty and Courage
        2. Career Progression
          1. Different Ladders
        3. Roads and Milestones
          1. Building Our Careers, One Job at a Time
          2. What if We Don’t Know Where We Want to Go?
        4. Job Diversity
        5. The Mission
    11. A. Craftsmanship Myths and Further Explanations
      1. Software Craftsman versus Software Developers
      2. Elitism
      3. Apprentice, Journeyman, and Master
      4. Master Craftsman
      5. Narrow Focus
      6. Craftsmanship versus XP
      7. Attachment to Practices
      8. Agile Coaches and Managers
      9. Software Apprenticeships
      10. The Problem with Metaphors
    12. Index