Pay high attention to choosing the right name for every thing [variable, method, class, test, package, .. ]
- Apply SRP principle in all levels
- Favor Composition over Inheritance
- The OPP and Reflection don't mix
- Avoid using Static class
- Follow Tell, Don't Ask principle
- Abstract the commonality and eliminate redundancy
- IF-Else is potentially anti-pattern
- The better, The code-base evolve diagonally (More details: https://lnkd.in/er3uVNV , https://lnkd.in/gSvFmhh)
- We will not hit the functionality from one shot, develop it in rounds "in Agile" [Happy path scenario, enhancement, fault scenario, boundaries, ..]
- Study the anatomy of the problem carefully. The analysis should not only from technical perspective, do the analysis semantically.
- Diagram the design then document the achieved implementation and learnt lessons
- The refactoring gives a new live to the solution
- Always align
- Avoid hard coding and strings, develop over configurable business rules and meta-data.
- Design for Testability
- At the end, It depends!
open question: We should ask ourselves when writing a code, to what extent will this code live or survive? Have we taken into account the possible changes? How will the code absorb a thrown stumbling-block and afford the growth?
"The first principle of software engineering isn't DRY or YAGNI or one of the SOLID principles; it's common sense."
-Tim VanFosson
Top comments (0)