I suspect that sometimes it only seems like speed caused a bad decision when in reality, the decision came because the programmer didn't understand some part of the domain, especially didn't understand how to design the code to be extensible beyond a certain area. Indeed, speed is an excellent excuse for just failing to extend beyond a certain area.
The reality might be that whatever speed you went, you would first create a failed design and only after seeing the failure be able to create the successful design.
I suspect that sometimes it only seems like speed caused a bad decision when in reality, the decision came because the programmer didn't understand some part of the domain, especially didn't understand how to design the code to be extensible beyond a certain area. Indeed, speed is an excellent excuse for just failing to extend beyond a certain area.
The reality might be that whatever speed you went, you would first create a failed design and only after seeing the failure be able to create the successful design.
So... no magic bullet for you!