DEV Community

Coder
Coder

Posted on • Originally published at itscoderslife.wordpress.com on

The effective engineer (Part-IIIa)

Again I started reading this book “The Effective Engineer” by Edmond Lau. I noted down these points while reading so that it can be kind of cheat-sheet for myself and others too. I strongly recommend buying the book and reading it at-least once.

The book is divided into 3 parts and my idea here is to write 3 blog posts one for each. So here is the second part of the series. You can read the Part-I here and Part-II here.

For Part-III, I am going to do a little different. The third part of this book is considerably a lengthy part especially the second chapter of this part. So I felt to break the final part into 3 sections each for a chapter in the book. Here’s is the first gist first chapter of Part-III.

PART III – Build long term values

Balance quality pragmatism

Establish a Sustainable Code Review Process

– Catching bugs or design shortcomings early

– Increasing accountability for code changes

– Positive modelling of how to write good code

– Sharing working knowledge of the codebase

– Increasing long-term agility

Code reviews: Over-the-shoulder, pair programming, tricky part only review, non-UI review,

Manage complexity through abstraction

How the right abstraction increases engineering productivity:

– It reduces the complexity of the original problem into easier-to-understand primitives.

– It reduces future application maintenance and makes it easier to apply future improvements.

– It solves the hard problems once and enables the solutions to be used multiple times.

Good abstractions should be:

– easy to learn

– easy to use even without documentation

– hard to misuse

– sufficiently powerful to satisfy requirements

– easy to extend

– appropriate to the audience

Automated Testing:

– Unit test coverage

– Integration test coverage

Unit test coverage and some degree of integration test coverage provide a scalable way of managing a growing codebase with a large team without constantly breaking the build or the product.

Establish a culture of reviewing code.

Invest in good software abstractions to simplify difficult problems

Scale code quality with automated testing.

Manage your technical debt

Hope you enjoyed this post.

Top comments (0)