• ZeroBlockers
  • Posts
  • The Hidden Costs of Big Design Up Front (And How to Avoid Them)

The Hidden Costs of Big Design Up Front (And How to Avoid Them)

When you're building a software system a single new requirement can result in a complete redesign of the solution. While Agile software development advocates for iterative design, this risk of rework leads a lot of companies to continue the Waterfall practice of completing a Big Design Up Front (BDUF) before beginning development. But it's not as straightforward as it seems. BDUF can be a double-edged sword because, while it can help you avoid rework, there are downsides to this approach as well.

The software delivery lifecycle includes six key stages: plan, analyse, design, build, test, and deploy. Whether you are following the Waterfall or Agile methodology, you will need to go through these stages but the difference lies in the size of the work you do in each stage. In Waterfall, you do all the planning, analysis, and design upfront before you start building. In Agile, the intent is to do just enough planning, analysis, and design to get started, and then iterate through the stages as you go. However, in practice, many Agile teams still do a lot of upfront design.

Let's look at why this happens and the impacts.

Why We Do It: The Motivation Behind BDUF

The Business Case Driver

Companies have many more ideas than capacity to deliver. This means that they need to prioritise which ideas to work on. To compare ideas, management need to understand the costs and benefits of each idea and that’s where business cases become indispensable. A business case outlines the rationale for initiating a project including the proposed solution, the implementation cost, and the expected benefits. If a company deems the project worthwhile they will allocate a budget to it.

The image depicts a standard project workflow represented as a horizontal flowchart with several labeled steps. The steps include: New Idea Idea Triage Review & Approve Create Business Case Review & Approve Plan & Staff Project Detailed Analysis Design Develop Test Release Two annotations are included: At the "Create Business Case" step, there is a note reading "Document high-level requirements and get them estimated." At the "Review & Approve" step (after the Business Case), another note reads "Sign off the time, cost, and high-level scope."

Projects have a bad reputation of going over budget so governance processes are put in place to monitor and ensure that delivery stays on track.

As a result, technical teams have a lot of pressure to deliver. Iterative development works against this because it increases the chance of costly rework. In stead of doing real iterative development, teams continue with a big design upfront and then split the implementation into multiple iterations or sprints (aka Water-Scrum-Fall).

Resource Allocation

Another reason for BDUF is ensuring efficient resource utilisation. As mentioned above, companies have more ideas than capacity so the worst situation is for developers to be sitting idle. By having a clear design for the solution, you can better estimate the time and resources required to build it. This allows you to schedule the next project to start as soon as the current one is finished. The goal is to always keep the treadmill running!

While companies pay lip service to the effectiveness of the products that are being built, predictability and utilisation metrics are the ones that earn promotions.

Unintended Consequences of BDUF

Over-Specification

With a budget secured, nobody wants to have to request additional funding. The drive to avoid future change requests often leads to 'kitchen-sink' requirements specifications. Teams attempt to anticipate every possible edge case, user scenario, and future requirement. While thorough planning is valuable, this approach can result in feature bloat out of fear of missing something.

A swiss army knife with about 30 tools making it so large that it removes the portability benefit.

For instance, a team designing an e-commerce platform might spend months detailing rarely used features, such as niche payment methods or seasonal product filtering that affect only a tiny fraction of users. This over-specification not only delays development but can also make the system more complex than necessary.

Over-Engineering

Over-specification naturally leads to over-engineering. When designs must accommodate every conceivable scenario, simple solutions give way to complex architectures. A straightforward user authentication system might evolve into an elaborate identity management framework capable of handling scenarios that probably will never materialise.

This complexity comes at a cost: increased development time, more potential points of failure, and a higher maintenance burden. And future changes become more costly as well because the more complex the system, the more difficult it is to change.

Build-by-Component Approach

BDUF often encourages a component-based build approach, where different teams work on separate parts of the system simultaneously. While this parallel development might seem efficient, it can lead to integration challenges and delay valuable feedback from real users as the product cannot be released until all components are completed.

A graph representing the different pieces of work that need to be delivered on the left. The horizontal bars represent different start and end times for the different pieces of work highlighting how things can be done by separate teams in parallel.

Consider a team building an e-commerce platform. Under BDUF, separate teams might spend months developing the app, the web interface, inventory management, shopping cart, and payment processing components in isolation. Only when these components come together do integration and usability issues surface, and by then, making fundamental changes becomes extremely expensive.

Business Impacts of BDUF

Ineffective Products

BDUF approaches lock in numerous assumptions about user needs, technical constraints, and market conditions before any real-world validation. 90% of features fail to deliver the expected business value because they are designing based on what the business thinks users want, not what they actually want.

Consider Quibi, the streaming platform that raised $1.75 billion before launch based on detailed assumptions about mobile video consumption. They spent two years building proprietary technology and sourcing content. The only problem was when they launched nobody wanted it. While this is an extreme example, it is a very common experience for many feature launches.

Product Bloat and Usability Issues

Over-specification and over-engineering often result in bloated products that are harder to use than necessary.

In one study, Microsoft found that 33% of the features that they released actively harmed their product instead of improving it.

Increased Maintenance Costs

Complex systems require more maintenance. Every feature added through over-specification needs to be maintained, tested, and potentially updated when other parts of the system change. This ongoing cost is often underestimated during the initial planning phase.

Cash Flow Constraints

One of the most overlooked impacts of BDUF is its effect on cash flow. The big bang approach to delivery results in long lead times before any value is delivered. Smaller releases use less upfront investment and start earning revenue sooner. Delaying releases and increasing holding costs can be particularly challenging for smaller companies or startups working with limited resources.

Planning is Everything

Eliminating planning completely is not the right approach. You do not want to have to unnecessarily redesign a system when new requirements come in. The key is to find the right balance between upfront planning and iterative execution.

We need to plan for what we know we need rather than what we think we need. And the truth is we know very little. New features require users to change their behaviour to adopt the new feature over their current solutions. Predicting how users will react is nearly impossible. This means that we should lean towards smaller releases.

Another cost to consider is the cost to release. We need to find the right balance between the holding cost (the revenue we could earn if we released the feature now) and the transaction cost (the cost of releasing a feature). Luckily, with DevOps, the cost to release has dropped to effectively zero in many organisations.

Graph showing the relationship between batch size and cost. The x-axis represents batch size, and the y-axis represents cost. Three curves are shown: 'Transaction Cost,' which decreases as batch size increases; 'Holding Cost,' which increases as batch size increases; and 'Total Cost,' which forms a U-shape. The optimal batch size is marked at the lowest point of the Total Cost curve, where Transaction Cost and Holding Cost intersect.

With releasing costs removed as a factor we are just left with trying to find the right balance between the benefit of learning versus the risk of rework. We will dig into this topic in more detail in upcoming articles.

Conclusion: Moving Beyond BDUF

Big Design Up Front promises certainty but it doesn’t even deliver on that. Given the amount of assumptions required change requests inevitably appear anyway. Our goal of efficiency is replaced by increased holding, maintenance and opportunity costs.

By understanding these hidden costs and embracing more adaptive methodologies, organisations can build products that are not only functional but also responsive to user needs. Planning remains essential, but at a much smaller and more frequent scale.

For more insights on effective planning strategies, check out our course on Continuous Development.