# The Software Craftsman

I really loved this [great book](https://www.amazon.fr/Software-Craftsman-Professionalism-Pragmatism-Pride/dp/0134052501) from [Sandro Mancuso](https://twitter.com/sandromancuso).&#x20;

![](/files/-MBsQXGluWgVZqlLyj8s)

## Infography

I love this book so much that I have created an infography :&#x20;

![The Software Craftsman Infographic](/files/LgiPBZ33GnQRpjGht1f2)

{% file src="/files/Qchxsk7riTJmjU4kI9wR" %}

![The Software Craftsman infography](/files/-MBsTRhut0a1SNAbYctp)

## Book notes

### Introduction&#x20;

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

### Ideology

#### A new reality

What modern developers do :

* Coding (But not only)
* Speak to customers&#x20;
* Automate tests/deployment&#x20;
* Make technical choices&#x20;
* Work in distributed teams&#x20;
* Help clients to define and prioritize requirements&#x20;
* Present products to potential clients/partners&#x20;
* Help with pre-sales activities&#x20;
* Estimate time & costs&#x20;
* Interview new team members&#x20;
* Design and evolve software architecture&#x20;
* Understand business goals&#x20;
* Make decisions based on trade-offs&#x20;
* Keep an eye on new technologies/methodologies&#x20;
* ...

{% hint style="info" %}
With agile methodologies, mentality is evolving. More collaboration and dev are now more proud to be dev
{% endhint %}

#### Agile&#x20;

* 2 types of disciplines
  * Process oriented (Value)
    * Plan&#x20;
    * Measure velocity&#x20;
    * Roles people should play&#x20;
    * Meetings&#x20;
    * ...&#x20;
  * Technical Oriented&#x20;
    * TDD&#x20;
    * Continuous integration&#x20;
    * ...&#x20;

{% hint style="success" %}
***Agility is about building the right thing, Craftsmanship is about building the thing right***&#x20;
{% endhint %}

* "Craftsmanship over crap", Robert C. Martin (2008)&#x20;
* Team = responsible of the realization (all aspects)&#x20;
* **Being good at writing code is the minimum skill expected from software professionals"**

#### Why do agile transformations fail ?&#x20;

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

#### Abstract

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

### The Manifesto for Software Craftsmanship (2008)

#### 4 values

`Not only working software, but also well-crafted software`

* Think about a software&#x20;
  * Without&#x20;
    * Tests&#x20;
    * Team to explain code&#x20;
  * You have to maintain and develop on it&#x20;
  * It is a working software...&#x20;
* Reasons of failures&#x20;
  * Bad business strategy&#x20;
  * Bad project management&#x20;
  * Big Time To Market Organization do not pay attention to code quality&#x20;
* Well-crafted&#x20;
  * Automated tests&#x20;
  * TDD
  * Business language in code&#x20;
  * Simple design&#x20;
* Quality of the code&#x20;
  * Only visible by dev&#x20;
  * No time allowed to refactor&#x20;

{% hint style="danger" %}
Quality of the code may not guarantee the success of a project But can be the main cause of failure.
{% endhint %}

`Not only responding to change, but also steadily adding value`

* Not just
  * Adding new features&#x20;
  * Fixing bugs&#x20;
* BUT also&#x20;
  * Improve constantly structure of the code
  * Keep it clean&#x20;
  * Testable
  * Extendable
  * Change must be fast enough&#x20;
* High Quality Software

`Not only individuals and interactions, but also a community of professionals`

* Sharing&#x20;
  * Knowledge&#x20;
  * Ideas
  * Successes and failures&#x20;
  * Humility
    * Learning from each others&#x20;
* Mentoring
  * Prepare the next generation&#x20;
* Craftsmen want to work with
  * Passionates&#x20;
  * Inspiring professionals

\
`Not only customer collaboration, but also productive partnerships`

* Productive partnerships
  * Not only do what you are told to do
    * Not factory workers&#x20;
  * Passionate & talented people want&#x20;
    * Success
    * Successful projects&#x20;
  * We must help our clients
* Some clients are not ready&#x20;
  * Software development = industrial process&#x20;
  * Developer have to follow orders&#x20;
  * Recrute cheaper devs&#x20;
  * Will not listen devs Tech leads = outdated people&#x20;
  * Very difficult environment for craftsman

#### Software Craftsman

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

#### Goal of the manifesto

{% hint style="info" %}
***Reduce the gap between Agile methodologies Technical world***
{% endhint %}

### Definition

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

#### Attitude

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

{% hint style="info" %}
*"I*'***m the smartest man in Athens because I know that I know nothing"** - Socrates*
{% endhint %}

#### Abstract

* Essential to a successful career&#x20;
  * Determination&#x20;
  * Passion
* The day we stop learning & practicing&#x20;
  * The day we start losing control of our own careers&#x20;
* Focus&#x20;
  * Becoming better professionals&#x20;
  * Not on "how do I get my promotion/bonus"&#x20;

{% hint style="info" %}
Peter's principle : "***Only incompetent people are scared to lose their job***"
{% endhint %}

### Technical Practices

* `For building the right thing` :
  * Feedback loops&#x20;
  * Visualizing WIP&#x20;
  * Backlogs&#x20;
  * Stand ups&#x20;
  * User Stories&#x20;
  * Acceptance criteria&#x20;
  * Definitions : Ready / Done
* `For building the thing right ?`

![](/files/-MBsZ6HbYdYpxP-eolrI)

* How do I sell tech practices ?&#x20;
  * Focus on the benefits&#x20;
  * Better understanding of requirements&#x20;
  * Knowledge sharing&#x20;
  * Reduction of bugs&#x20;
  * Quick & automated releases
* Be pragmatic&#x20;
  * Always a better way&#x20;
  * Decide your practices&#x20;
    * To answer a need&#x20;
    * Not because someone says to&#x20;
  * Compare values between practices


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yoan-thirion.gitbook.io/knowledge-base/software-craftsmanship/the-software-craftsman.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
