Code is clean if it can be understood easily – by everyone on the team. With understandability comes readability, changeability, extensibility and maintainability. All the things needed to keep a project going over a long time without accumulating up a large amount of technical debt. optimal Responsiveness
Smells Rigidity
The software is difficult to change. A small change causes a cascade of subsequent changes.
General Follow Standard Conventions
Coding-, architecture-, design guidelines (check them with tools)
Fields Not Defining State
Fields holding data that does not belong to the state of the instance but are used to hold temporary data. Use local variables or extract to a class abstracting the performed action.
Fragility
The software breaks in many places due to a single change.
Keep it Simple, Stupid (KISS)
Simpler is always better. Reduce complexity as much as possible.
Over Configurability
Prevent configuration just for the sake of it – or because nobody can decide how it should be. Otherwise, this will result in overly complex, unstable systems.
high
high
Immobility
You cannot reuse parts of the code in other projects because of involved risks and high effort.
Boy Scout Rule
Leave the campground cleaner than you found it.
Responsiveness to change
Root Cause Analysis
Always look for the root cause of a problem. Otherwise, it will get you again and again.
Micro Layers
Do not add functionality on top, but simplify overall.
actual
Cost of Change (CoC)
Responsiveness
CoC
Viscosity of Design
Taking a shortcut and introducing technical debt requires less effort than doing it right.
Multiple Languages in One Source File
C#, Java, JavaScript, XML, HTML, XAML, English, German …
Dependencies Make Logical Dependencies Physical
If one module depends upon another, that dependency should be physical, not just logical. Don’t make assumptions.
Viscosity of Environment
Building,