The Software Craftsman
Abstract of the book "The Software Craftsman" from Sandro Mancuso
Last updated
Abstract of the book "The Software Craftsman" from Sandro Mancuso
Last updated
I really loved this great book from Sandro Mancuso.
I love this book so much that I have created an infography :
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
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
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"
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
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
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
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
Reduce the gap between Agile methodologies Technical world
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
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
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"
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