Insights/Quotes

The goal of software design should be to find the right balance between over-designing and under-designing.

Code should be easy to maintain. Changes need to happen very frequently, for a variety of reasons, and it needs to be adapted for quick and stable changes. Reasons include changes of requirements, bug fixing or adding new features.

Ward Cunningham says:

Write high quality code - don’t write extra code

You should keep code easy and safe to change, robust at all times. Also, never make your code worse.

TDD: Test-Driven development

Always leave the code in a better shape than when you started.

Definition of Done: release process.

We are more likely to get it right the third time.

Design for change, not longevity.

Cohesion: only keep related things together.

Hiding and encapsulation: components should not have to know about other components implementation details (e.g. types).

Balance between feature delivery for business gain and changeable software for the long haul.

Lowering quality lenghtens development time.

Velocity goes down over time. It is relatively easy to understand why. It is also manageable to increase speed on the long term but will require more time and effort.

Velocity goes down over time

Cost doesn’t increase with CI and TDD

For every $ of competitive advantage gained by cutting quality, it costs $4 to restore it.

Maintain a single list of work.

Managers influence not to pay back the debt.

Review

Very good ideas but somewhat poorly structured :

  • the author jumps from one idea to the next again and again
  • there’s no clear distinction between several points raised
  • the split of ideas, concepts, paragraph doesn’t feel natural
  • concepts are repeated and mixed
  • no clear separation between chapters

Very good content, but the form could be improved.

Code examples are verbose and don’t bring much.

Quotes taken from other authors are relevant and food for thought. Though, the content written by the author himself doesn’t go far enough, doesn’t explain terms used.

The book can help building a reading list, as there are many references to other, better books.

Concepts and ideas described in the book at still relevant today, but tools are outdated.

There is not advice or hint at how to fix problems. The author simply describes issues very vaguely, and is even more vague on how to overcome these issues. For example, he says that velocity goes down over time, but doesn’t explain why (“it is relatively easy to understand why”), says it’s possible to overcome (“it is also manageable to increase speed on the long term but will require more time and effort”), but doesn’t go into details on how to do that.
Every time we are about to go deeper in a specific subject, and it starts being interesting, the author stops abruptly and refers to another book to dive deeper.
It made the whole book feel like Mario Bros., every time you arrive at the end-level of a world, Bowser says:

The princess you are looking for is in another castle