The Software Craftsman
Abstract of the book "The Software Craftsman" from Sandro Mancuso
I really loved this great book from Sandro Mancuso.

Infography

I love this book so much that I have created an infography :
The Software Craftsman Infographic
The Software Craftsman.pdf
418KB
PDF
The Software Craftsman infography

Book notes

Introduction

  • Good senior developer in the 90's : No one else can understand his code
  • Working code
    • The minimum for a professional
    • How it is done is as important as getting it done
  • Is
    • A mindset
      • For developers
      • For companies
    • Adoption of (XP)
      • Practices
      • Disciplines
    • Not a methodology

Ideology

A new reality

What modern developers do :
  • Coding (But not only)
  • Speak to customers
  • Automate tests/deployment
  • Make technical choices
  • Work in distributed teams
  • Help clients to define and prioritize requirements
  • Present products to potential clients/partners
  • Help with pre-sales activities
  • Estimate time & costs
  • Interview new team members
  • Design and evolve software architecture
  • Understand business goals
  • Make decisions based on trade-offs
  • Keep an eye on new technologies/methodologies
  • ...
With agile methodologies, mentality is evolving. More collaboration and dev are now more proud to be dev

Agile

  • 2 types of disciplines
    • Process oriented (Value)
      • Plan
      • Measure velocity
      • Roles people should play
      • Meetings
      • ...
    • Technical Oriented
      • TDD
      • Continuous integration
      • ...
Agility is about building the right thing, Craftsmanship is about building the thing right
  • "Craftsmanship over crap", Robert C. Martin (2008)
  • Team = responsible of the realization (all aspects)
  • Being good at writing code is the minimum skill expected from software professionals"

Why do agile transformations fail ?

  • In software project
    • Most important deliverable = software itself
  • Change their process through coaching
  • Nothing to help writing better software
  • Agile coaches
    • Mainly focused on process
    • Not focused on technical excellence

Abstract

  • To remain competitive companies need to deliver
    • Software faster
    • With better quality
  • Agile vs software craftsmanship
    • Agile
      • Adopting Scrum
      • Daily stand-up
      • Manage backlog
      • Manage W.I.P
    • Agility does not
      • Improve magically the quality of the software
      • Make developers better
  • Complements each other / need to be focused on both
    • Improve the process
    • Improve technical excellence

The Manifesto for Software Craftsmanship (2008)

4 values

Not only working software, but also well-crafted software
  • Think about a software
    • Without
      • Tests
      • Team to explain code
    • You have to maintain and develop on it
    • It is a working software...
  • Reasons of failures
    • Bad business strategy
    • Bad project management
    • Big Time To Market Organization do not pay attention to code quality
  • Well-crafted
    • Automated tests
    • TDD
    • Business language in code
    • Simple design
  • Quality of the code
    • Only visible by dev
    • No time allowed to refactor
Quality of the code may not guarantee the success of a project But can be the main cause of failure.
Not only responding to change, but also steadily adding value
  • Not just
    • Adding new features
    • Fixing bugs
  • BUT also
    • Improve constantly structure of the code
    • Keep it clean
    • Testable
    • Extendable
    • Change must be fast enough
  • High Quality Software
Not only individuals and interactions, but also a community of professionals
  • Sharing
    • Knowledge
    • Ideas
    • Successes and failures
    • Humility
      • Learning from each others
  • Mentoring
    • Prepare the next generation
  • Craftsmen want to work with
    • Passionates
    • Inspiring professionals
Not only customer collaboration, but also productive partnerships
  • Productive partnerships
    • Not only do what you are told to do
      • Not factory workers
    • Passionate & talented people want
      • Success
      • Successful projects
    • We must help our clients
  • Some clients are not ready
    • Software development = industrial process
    • Developer have to follow orders
    • Recrute cheaper devs
    • Will not listen devs Tech leads = outdated people
    • Very difficult environment for craftsman

Software Craftsman

  • Believes that
    • Software is a craft
    • Writing good software requires
      • Skill
      • Careful attention
  • Practices his craft
    • To become more skillful
    • To produce better software
  • A professional
    • Work is consistently of high quality

Goal of the manifesto

Reduce the gap between Agile methodologies Technical world

Definition

  • Is NOT
    • Beautiful code
    • Test Driven Development
    • Self selected group of people
    • Specific technologies/methodologies
    • Certifications
    • Religion
  • Mindset
    • Consider software dev as a craft
    • A long journey to mastery
    • Choose to be responsible for their own careers
    • Constant learning
      • Tools
      • Techniques
    • Key words
      • Responsibility
      • Professionalism
      • Pragmatism
      • Pride
    • Learning from others
    • Share knowledge
    • Caring about what they do
    • Help customers

Attitude

  • Constantly finding ways to become better professional
  • Continuous learning
  • "Who owns your career ?"
    • What if our company
      • Does not buy any books
      • Never sent us to any training course or conferences
      • Does that mean the company is bad ?
    • Ourselves
      • We are professionals
      • We own our careers
      • We must keep us up to date
        • Books
          • Tech specific
          • Conceptual
          • Behavorial
          • Revolutionary
        • Blogs
        • Tech websites
        • Social medias
  • Practice, practice, practice
    • The more we practice, the more comfortable we become
    • Katas
      • Simple coding exercices
      • To practice
        • Techniques/approaches
        • Languages
        • Technologies
    • Pet projects
      • Real projects
        • Without pressure
        • You choose technologies & methodologies
    • Open source
      • Contributes to projects
    • Pair program
      • Enhances team spirit
      • Social activity
      • Knowledge sharing
      • Open minds
        • Learn
        • Share
        • Or both
    • Discovery
      • Second level of ignorance
      • I don't know what I don't know
      • Accept the fact that we have a lot to learn
        • Sign of maturity
        • A first step to mastery
    • Share
"I'm the smartest man in Athens because I know that I know nothing" - Socrates

Abstract

  • Essential to a successful career
    • Determination
    • Passion
  • The day we stop learning & practicing
    • The day we start losing control of our own careers
  • Focus
    • Becoming better professionals
    • Not on "how do I get my promotion/bonus"
Peter's principle : "Only incompetent people are scared to lose their job"

Technical Practices

  • For building the right thing :
    • Feedback loops
    • Visualizing WIP
    • Backlogs
    • Stand ups
    • User Stories
    • Acceptance criteria
    • Definitions : Ready / Done
  • For building the thing right ?
  • How do I sell tech practices ?
    • Focus on the benefits
    • Better understanding of requirements
    • Knowledge sharing
    • Reduction of bugs
    • Quick & automated releases
  • Be pragmatic
    • Always a better way
    • Decide your practices
      • To answer a need
      • Not because someone says to
    • Compare values between practices