"The third lesson I learnt was that you don't need great code to make a great product."
I really believe this to be true. Coders are far too analytical for their own good. If a product works great, then the poor code can be fixed later.
This comes from two lessons to us:
1) No matter how long you spend designing a feature, it'll probably not be 100% of what the user wants. Do a quicker "draft" of the feature, solicit feedback, and release fast to fulfill customer needs.
2) No matter how long you spend trying to write elegant code, the software will have bugs, and other kinds of problems. Do it quick, observe it in the field, take notes and do bug patches.
Getting the team on-board for these was hard due to the resistance of this being the perceived Microsoft way of doing things, but it has resulted in much higher customer satisfaction because they see continuous progress and feel like their feedback is turning into product (they feel part of the process) rather than tens of months of no progress followed by something they probably didn't want to begin with.
My attitude is simple: code like the person who will be working on the app next is standing behind you with a gun to your head. Be diligent in making sure your code is legible, maintainable and documented. If you can't get to one of these now, at least make a note to get back to it.
It's a case of making sure that you know you're doing the wrong thing, vs just assuming that it's the right thing. The latter causes all code to be bad, and the poor code never gets fixed.
But some of the ones with that ability would be better off a little bit less goal driven and spending just a few hours a month reading up on their tools. (And the rest of the world would be better off, too...)
Edit: (A bit clearer syntax.) I might add -- it is OK to do evil stuff if you are in a hurry, but at least isolate those part so they are easily replaceable. (Yes, most everyone should know this.)
I did feel pretty terrible about leaving the project at the time, and I never left a half-finished game again. I'm not sure this attitude makes rational sense from a selfish point-of-view, but I knew I was leaving my colleagues with more work by quitting.
At any rate, I'm sure it was a good learning experience all around. There is something particularly unique about game development in the software field that isn't necessarily shared anywhere else. I've heard many of these sentiments echoed.
1) Get a paycheck I can live on.
2) Get a mentor.
3) You don't have to finish a job before moving on if things aren't working out.
(not that I'd agree with #3, that just seems to be my takeaway from the story).