I read this book many years ago, but now it was as valuable or even more valuable.
Notes on the clean coder (aug 2019)¶
Commitment != estimate
A commitment is when you say you will do something by a specific date. Professionals only make commitments they can keep.
The estimate comes in a range. The book proposes the following formula (PERT):
Optimistic estimate (<1%) = O
Nominal estimate = N
Pessmisitc estimate (<1%) = P
expected duration = (O + 4N + P) / 6
Example: O=1d, N=3d, P=12d, expected duration = (1+12+12)/6 = 4.2d
standard deviation = P-O / 6
Multiple tasks expected duration
Multiple tasks standard deviation
There is no other way than working 60 hours to become a professional
40 hours for your employer
20 hours for you (reading, learning, practicing, and otherwise enhancing your career)
Passive-aggressive is when you simply do something because someone told you to do so even though you know it is wrong.
A professional does what is right for the business.
Tests: Unit tests, component tests, integration tests, system tests, and manually exploratory tests.
System tests run against the entire system.
Never compromise on unit tests, TDD forever. Unit tests are meant for developers to document the code
Acceptance tests should be readable by business people and are meant for business people but not necessarily written by business people.
Saying No is expected by the professional. If immediate superior doesn’t understand, you need to make it explicit that you will go above them.
The coding dojo, performing Katas, contributing to open source, all ways of practicing.
He emphasizes pairing throughout the book, but it is something I have not been successful in implementing it. I would like to know more about how to pair correctly.
He does not recommend the flow zone
The zone gives you speed, but you loose the big picture.
Divides an engineer into: Master, Journeyman, and Apprentice. Each level should teach the level below.
Definition of done
Feature implemented and acceptance tests passing on build.
The code must work
Solve customers problem
Fit into the existing system
Readable by other programmers –> reveal the intent