Everyone wants a stable, fully-featured, performant software.
In a rush to get to super awesome software architectures with bind boggling performance, correctness and essential needs are sometimes forgotten.
I have personally made that mistake at least once (and probably more). In an attempt to avoid repeating the past I have decided to use documentation in place of premature optimization.
At every stage when:
Stop an think at what would be delayed by this!
If there is no immediate need to implement such ideas write down in a document in this section what is to be done, why and how it would help, and why were these changes delayed.
Of course refactors and optimizations should NOT be rejected or ignored when needed: