
Phil Christensen wrote:
Wasteful coding? Who do you think you're talking to here? I am suggesting that the '90% coding' suggests to me that design discussion starts when most of a concrete implementation is available. It wasn't your term but you have taken offence at what I said.
Well, I disagree. I find it strange that there should be such a rejection of the idea that one can achieve some degree of concensus on a design approach before coding starts. It seems to me very wasteful if someone should expend time getting an implementation 'mostly there' if in fact there is a devil in the detail that will come up and bite it and invalidate the whole thing - and the only way to do that is to be prepared to discuss abstract design approaches *before* coding. Even if there is no resource available to code it, it can leave a documented concencus that can be used to bootstrap implementation when resource becomes available. There are some aspects of system design relating to distributed and asynchronous systems that are *not* amenable to iterative refinement and refactoring - you can't generally test and refactor your way out of a design that is fundamentally deadlock prone, for example. It may be that the way that people like to 'collaborate' in open source does not generally extend to design review, but that's wasteful and ultimately foolish for exactly the same reasons it is in everyday work, and it suggests a particularly limited view of what 'collaboration' and 'teamwork' means in the context of software development. You can't force wouldbe contributors to do differently, and ultimately you may get results that work, but its very inefficient and there have been some high-profile attempted contributions to (say) the Linux kernel that have been bounced after huge amounts of work, when it would have been apparent that the design approach would never be accepted if it had been reviewed up front. In some respects the BSD projects' approaches (or at least aspirations) make them more attractive. Sometimes, anyway. It would just be nice to find a project where design is welcomed rather than some macho 'code is king' bullshit. Would you be happy to work on a team at work that spends so little time on design? Why should working on a distributed volunteer team be materially different? The question really is whether you want to encourage collaboration of design and design review, or not?