Mine are as follows:
- Cohesion - how strongly-related are the parts of any given whole?
- Coupling - how proper are the relationships between structures?
- Encapsulation - how difficult is it to create inappropriate coupling?
- Redundancy - how many places do you need to make the same change for the same reason?
- Focus - how easy is it for you to find where a change needs to be made?
- Readability - how easy is it for an equivalently-skilled developer to understand?
- Testability - how easy is it to verify that the system does what it should?
I don't know how far back these ideas go. I just know I didn't codify them. Someone else came up with this way of analyzing code quality and it resonated with me.
These terms represent my language of design-health. By attending to these things, I can keep a design on track. Ignoring them all but guarantees it will go off the rails.
These terms represent my language of design-health. By attending to these things, I can keep a design on track. Ignoring them all but guarantees it will go off the rails.