For something so important, code readability is shockingly ill-defined. We often present it as a grab bag of rules: Use expressive variable names. When a function gets big, split it into smaller functions. Use standard design patterns.
But we’ve all seen code that follows the rules and is still, somehow, a mess.
We might try to solve this problem by piling on more rules: If variable names are getting extremely long, refactor the underlying logic. When one class accumulates tons of helper methods, maybe it should have been two. Don’t use design patterns in contexts where they don’t fit.