Answer by A Quora admin:
A long time ago there was a movement called "Spiral development metholology" — The below diagram is more of how to use this methodology in a team environment;
…But it's very helpful towards your individual professional development.
The essence is – design, code and demonstrate the smallest piece of useful code and KEEP adding to it.
This is something that most really, really good programmers that I know code for — they know that "good code" has layers. And if there is a problem during development, they can easily go back to the previous layer and see what's different or changed.
PS- a "version" is not a layer…
In respect to this, this is where the "abstract class" came to being — the class abstraction becomes the governorship of the layering of the problem.
Basically, you're always building up from something that works as intended. If it doesn't work the way you'd like – go back to the previous iteration of the spiral.