BDUF vs emergant design

October 18, 2021

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.

Related Content

Pick a methodology: Scrum, Kanban, XP, Lean or DevOps?

None of these items directly replaces or conflicts with any of the others. In fact, you can use them all simultaneously.

Planning vs short feedback loops

In the debate between planned architecture and short iterations, whose right? Both are right, of course.

Why "Consider refactoring this" comments are silly

Code is always subject to refactoring when the need arises. Adding a comment to that effect is just noise.