… I would bet that your abstraction and refactoring will be better after you’ve explored how that code is being used than predicting how you think it will be.
That is true, but also contradicts a bit the chapter “Repeat yourself”: to remove a duplicated code you need duplicated code. If you have duplicated code, then you are abstracting and refactoring a code that is being used. There is no predicting here. On the other hand refactoring every duplicated piece of code may not be the best solution.
There is also a BIG misunderstanding on the K.I.S.S. principle: it has to be simple to use, not just to read. Very often simple to read means simple to use, but sometimes simple to use means not very simple to code and so not very simple to read. That’s why we use frameworks, and frameworks that are easy to use (Vue for example) tends to have an increasing appreciation over time.
Finally, being strict on D.R.Y. principle improves your coding skills a lot. Being strict on K.I.S.S. allows yourself to upgrade to programmer 2.0, but first you have to be able to follow the D.R.Y. principle.