An attempt to define BigDesign on its own terms, which means trying to say what it is in fairly attractive terms on a neutral framework. Commentary on the attractiveness (or not) of BigDesign go to BigDesignCritique. Corrections to what BigDesign actually intends to mean go here.
Few methods actually advocate solving all your problems on paper before you solve them in code. BigDesign is a DevelopmentStance that is instantiated in several currently popular methods. Here are some common features of BigDesign methods:
As a DevelopmentStance, BigDesign has made a strong historical case for itself, primarily by contrast to CowboyCoding. This stance is one of intense pre-meditation. Historically, BigDesign has spent a lifetime criticizing the cowboy way, defending itself from that way, and ultimately justifying itself by its dramatic improvements relative to the CowboyCoding stance. It is still not the case that BigDesign dominates the scene.
BigDesign developers are committed to maximum thinking up front. The basic BigDesign contention is that decisions that are made using the cowboy way are dangerous for at least two reasons:
First, because such decisions are likely to be trivially wrong, for their failure to take into account important factors that are not immediately obvious to the decision-maker. Computer programs are big and complex, and many seemingly minor decisions can have huge impact on the program-at-large.
Second, because ad hoc decisions tend to be instantiated in a broad, vague, and distributed fashion, they are quite likely to be resistant to change, improvement, or maintenance.
This stance usually involves some companion views. These are not so much a required part of the theory as they are an implicit constant companion to it, probably for historical reasons.
I don't equate the two. I like class diagrams as an architectural notation. I like use cases as a way to expose unfamiliar or inconsistent problem domains. I like deployment diagrams as a way to map logical to physical architecture. I use sequence and collaboration diagrams when CRC needs recording. I'm frustrated by the UmlCaseVultures inability to represent the range of things I'd like to model, but usually I can live with that. I suspect that the reason I like these parts of UML is that I don't use Smalltalk, but a guy's got to make a living ...
I'm actively attempting to combine the practices of XpAndUml, and I'll be putting up a document describing my take on this shortly. On the latter I bow to our wiki XPerts in all things, and hope they'll give it a hard critique.
I guess what I'm saying is that UML is a necessary evil on many occasions even though I see a great many UmlTotalFailure(s). --PeterMerel
That's exactly what I was looking for. Is there any other place where XpAndUml are discussed jointly?
Outside of wiki there is also:
Using UML is not ipso facto BigDesign, in my view. I frequently make sketches using Rose, print them out, then a few days later throw them away, which is hardly BigDesign behavior. But due to both its historical development and its key advocates, UML is intimately related to BigDesign: The fact that the three amigos are BigDesign'ers, and that UML is their baby, is inevitably going to make UML seem BigDesign'ish in many people's minds.
UML is not intrinsically linked to BigDesign, and I think you would find that neither GradyBooch nor JimRumbaugh advocates BigDesign - at least as described on these pages. (I happen to be a fan of SmallDesign?, but I have a hard time watching people being untidy in their arguments.) -- AlistairCockburn
Alistar, would you agree that there is a difference between BigDesign and HeavyWeightMethodology??
I'm tempted to suggest that the OO HighPriests? have, to some extent, managed to do away with HeavyWeightMethodology? while keeping BigDesign, at least in that they see everything as modelling. Witness the very high formallity of UML and the very high PercentageOfDesignTime. (Depending on whether you consider UML to be documentation or code.)
I would expect that a HeavyMethodology? would contain a BigDesign as a component. We no longer see a requirement for fully decomposed structure charts down to the leaf level before coding, so there is a lightening there, and they do recognize increments, iterations and prototypes. Unhappily, I can't see that the high priests of OO have gotten rid of the weight - witness UML Process and RationalUnifiedProcess, light though their proponents would like to believe they are. KentBeck, MartinFowler and I are all trying to counteract this weight, in our own ways. I just agreed to be a series editor for Addison Wesley on a series of books on light-weight methodology elements. The draft of the central book is emerging, the digest of it I posted at [1]. The point is that I disagree with the weightiness of even the amigos' methodological recommendations - or else they keep changing their minds depending on who they are talking to, or else they just haven't learned how to say what they mean. The result is that when I show up on a project, I cringe at the amount of paperwork / screenwork people are being asked to do, without a sense of what that is about or how to detect diminishing returns. That being said, I would say that I now encounter all manner of variations about how much BigDesign to do, maybe I've been crossing cultural boundaries a lot, but I've seen the entire spectrum in the last few months. --AlistairCockburn
My sense of the ThreeAmigos is that its not really a methodology in the true sense. You can't map it to a DevelopmentLifeCycle?, everything is just modelling and once you've done your model you've finished. Whether the modelling is done with a WaterFall TopDown approach, or a CodeAndHack? approach is never really specified. That's why I thought the distinction between HeavyWeightMethodology? and BigDesign was useful. --BenAveling PS I liked your MethodologySpace paper.
Here's my question about BigDesign in its own terms. BigDesign claims to be formal. Does it care about formally provable correctness?
See also: BigDesignDimensions, BigDesignUpFront UnderstandingBigDesign