Meep-Eep wrote:Fred Ford wrote:Another of our cardinal beliefs is rapid prototyping. If you can get to testing and iterating the experience quickly, then you can prove or disprove your ideas in short order.
This is something which only really got through to me relatively recently. Trying to get everything perfect on the first try will often leave you with nothing usable (Nothing concrete that is; you do gain useful experience). In my case, heaps of half-finished projects.
Especially in games, but also in other software jobs I've had, I've watched upfront over-design create huge problems. When you have this big document on which you've worked for a long time, the tendency is to resist changing course (i.e. throwing out large portions of your design) when things inevitably don't go as envisioned. I've seen too many projects flounder, because the architects were too in love with their mapped-out vision.
It's clearly visible in the SC2 code that it is an evolutionary work. In many places there are hacks upon hacks upon hacks.
This must have cost Fred a lot of time on occasion, when the existing code at the time wouldn't be able to support what they were trying to do, and he had to rewrite large parts. (The thing with restructuring this kind of code is that when you pull on one string, the entire fabric falls apart, because everything is interconnected.)
But at the same time, I think that SC2 wouldn't have existed if they had tried to design it all in advance. Pragmatism often wins from perfectionism.
Don't two hacks on top of each other cancel out? One thing to remember is we only had the faintest clue of the whole that we were making. We had some pieces that we liked: melee, cool algorithmically generated planets, MOD music, etc. So the code pretty much evolved to parallel the evolving game design. Paul and I would be sitting side-by-side, one of us would say "What if . . .", I would start coding, and he would create some temporary art and sound assets and the 'hungry monster' would be off and rampaging.
Notwithstanding my earlier remark about pragmatism, and without intending to denigrate Fred's achievement, I think that the development of SC2 would have benefited from some advance architectural design (though not as much over-design as I have been prone to). I bet that Fred will have reached the same conclusion.
I wonder what his code looks like now, after 18 years of additional experience.
I like to think that 18 years has had at least some effect, but I think I will always be a post-architect rather than a pre-architect. What I mean by that is I will always 'hack' something in to test assumptions and then later try to make it 'fit' with the existing code architecture. If this becomes too burdensome, then I will re-architect the code. One side-effect of this, I think, is that I never fall too much in love with anything I've written and so if a better 'mouse-trap' presents itself, I'm happy to use it.
So I'm glad to see that Fred and Paul are using their own judgement, and if either one of them happens to read this posting, I hope it serves to encourage them to keep doing just that.
Thanks - and for more than just your post.