I find the difficult thing with this advise is that people always want to skip step 1.<p>From my experiance once you introduce the principle of refactoring repeated code into functions no one wants to repeat code and will go to great length to justify abstractions before they know if its needed.<p>I see this with teams following iterative product development processes as well - they never want to build the 'simplest thing' first and learn. There is usually an idea of the final product and people want to jump straight to that.<p>Would be interested to know if anyone else has seen this and how they have overcome those challenges.