While I agree mostly, you can overdo the "grug". For example it is possible to underengineer (underabstract?) a software for years until realizing that simple things are still complicated, and you forget to built good abstractions once the patterns have emerged.
If you build abstractions, you need a way to correct them anyway, making breaking changes to their contract.