I realize I said, Abstract away superfluous variables with function application which is not the kind of over-engineered mess you're warning us about. I'm referring to lambda abstraction, that is replacing an expression with a name and closing over the free variables in it with the parameters to the function.
The reason for this is that assignment is a common source of errors in imperative programs. We should aim to use as few of them as possible, define them local to their use, and limit their scope.
I'm only talking about small, local refactors that make the code yo wrote easier to understand and maintain.
Refactoring code to introduce new patterns or re-architect a module are better done earlier in the process and much more deliberately, I agree.