There’s a decades-long debate among software developers and architects over the relative merits of spending the time to develop a well-designed system architecture at the beginning of a project, versus a more progressive approach. Advocates of the former, often called Big Design Up Front or BDUF, argue that thier preferred approach leads to a more sustainable system that’s easier to work on and maintain.
Advocates of the second approach argue that BDUF often leads to wasted effort, designing features “ya ain’t gonna need”, and leads to over-complicated systems that are harder to maintain and expand.
So who’s right?
Here’s the thing…
Both groups are right.
As with most things in software development, it’s a matter of trade-offs.
It’s also a matter of context.
If you’re building a software system where the end goal is easily known or predicted, then BDUF may make perfect sense.
On the other hand, if you’re working in a more chaotic or experimental project, then spending a lot of time designing a systme that may be irrelevant before it’s written will obviously be a waste.
In my experience, the vast majority of software projects fall closer to the chaotic than the predictable. But even in chaotic projects, there are often predictable components, and some amount of BDUF may be appropriate on such components.