That need to rewrite is important and often neglected when coding. Modern programming languages, especially object-oriented ones, are interface heavy. This means that before you can make anything happen you need to write down a lot of preliminaries, often making important API decisions before the best design has emerged. Once it does emerge, there's so much written down already that it feels counterproductive to back up and rework the interfaces. These languages create a penalty for rewriting that encourages working around early design mistakes rather than fixing them. I believe this dependence on interfaces before code is a major reason for programs being so much bigger than they used to be.
A huge detriment of interfaces, along with other such back-compatibility, is horrible, horrible, inefficient ugly inelegant stupid code. This is the problem that intel's x86 has, windows has, and java has.
It's a bit like "rich people's problems".
"taste" matters a lot here imho. starting from a bare minimum set, and growing it organically seems to be one way out of the tar pit.
I really do think go's 'real interfaces' i.e. types being implicitly convertible to interfaces which have matching method sigs is a tasteful stroke of brilliance, especially for a lowish level language.