1) Make it work [in the nominal case]
2) Make it correct [in the edge cases]
3) Make it fast [without breaking the other two]
This, plus "Make the bad people pay" gives you working software in no time.
1) Make it work [in the nominal case]
2) Make it correct [in the edge cases]
3) Make it fast [without breaking the other two]
This, plus "Make the bad people pay" gives you working software in no time.
1) Make it work, if that's important and worth the time
2) Make it correct, if that's important and worth the time
3) Make it fast, if that's important and worth the time
Most of the time is spent hunting for what the software is supposed to be. Prototype, prototype and prototype until you get even close to what it's supposed to be. Treat everything as temporary until then, before applying any real importance on any of the above. Even then, you'll rather be rewriting it anyway, focusing on what's important, because your assumptions at the beginning were most likely wrong. You shouldn't hang yourself for those early decisions just because you invested too much time and effort on making them work.