Make it work, make it right, make it fast

I’ve recently come to appreciate

Make it work, make it right, make it fast.
— Kent Beck

Applied to an individual development task, it means to distinctly separate each of these phases of development and to only transition from to the next task when the previous one is complete;

  1. Get the feature to work as fast as possible. The goal here is only to understand the problem and find solution(s). Nothing more. Be prepared to discard any/all of the code you write.
  2. Refactor; Deduplicate code, clarify interfaces, sole responsibility, SOLID etc. This might mean a rewrite of any code written in step one. Or choosing a different solution.
  3. If there are any obvious performance bottlenecks with easy solutions, implement them now. But be careful to avoid premature optimisation.

Make it work, make it right, make it fast. — Kent Beck

Some people apply this to a whole project. This sounds like a good idea, but I don’t think it works in practice. Here are some one else's thoughts on that.