Reusable Software Components
Bottom-up design begins with known problems rather than the overall problem as a single starting point.
Where Design Starts When a Problem Feels Too Big
Some software problems seem too large to solve all at once. Faced with a problem like that, one possible strategy is to begin with the parts of the problem that are already understood, rather than trying to attack the whole thing as a single starting point. This article is about that strategy, which is called bottom-up design.
What do you think happens?
When a large software problem seems too big to solve all at once, where does bottom-up design begin: with the overall problem, or with problems the team already knows how to solve?
Reveal answer
With problems that are already known and solvable
Bottom-up design begins with known problems rather than the overall problem as a single starting point, and then reasons upward toward the solution for the whole problem.
What Bottom-Up Design Means
Bottom-up design is an approach in which design begins with known problems rather than the overall problem as a single starting point. The designer uses known solutions or reusable software components as building pieces, and the design reasoning then moves upward from those pieces toward an overall solution.
The word bottom-up describes the direction of the reasoning. The design starts at the bottom, with small pieces that are already understood, and works upward toward the larger goal. It does not describe how many pieces are needed.
Starting From Problems You Already Know
The starting points for bottom-up design are problems that are already understood and solvable. The source describes these as problems you already know how to solve. Finding them is the first step: look across the larger problem and locate the parts you can already handle, either with a solution you know or with a reusable software component that already exists.
Locating known starting points in a larger application
A team must build a small online store application. The overall problem is large, so the team decides to start from parts they already understand. Which parts can serve as starting points?
- 1Look for known, solvable problems
The team notices that they already know how to calculate a total price from a list of item prices. This is a known, solvable problem.
- 2Check for available or reusable solutions
The team also has a reusable component that checks whether a payment card number has a valid format. They can use it where it applies.
- 3Set aside the overall goal for now
The team does not start by designing the whole store at once. They start from these understood pieces and plan how they will contribute to the larger application.
The known pieces, a price calculation and a reusable validation component, are the starting points. The design then works upward from them toward the overall application.
Tracing the Upward Flow of Reasoning
A bottom-up approach can be read as a sequence of reasoning steps. The flow runs from left to right: the designer begins with a known problem, uses its solution or a reusable component, treats that result as a contribution, and works toward the overall solution. Each step adds one piece to the design rather than starting from the finished whole.
- 1Locate problems that are already understood.
- 2Use available solutions or reusable software components where they apply.
- 3Work upward by considering how those pieces contribute to the overall solution.
Combining Separate Solutions Into One System
Bottom-up design depends on combining solutions that were each built to solve their own known problem. Each separate solution or reusable component becomes a building piece. When the pieces are considered together, they form a contribution to the overall solution. The design reasoning then moves upward, so the final system is assembled from these pieces rather than designed from the top as one block.
Bottom-Up Versus Top-Down Direction
Top-down reasoning considers the larger problem first, while bottom-up reasoning starts from known pieces and builds toward the larger problem. Comparing the two directions side by side makes the difference clear. In each column below, the arrows show where the design reasoning begins and where it ends.
Working Together With Top-Down Design
Bottom-up design does not have to be used alone. In practice it is often combined with top-down design. A design can use top-down reasoning to consider the larger problem while also using bottom-up reasoning to build upward from problems and components that are already known. The two approaches meet at the point where a large view of the problem is matched against the pieces that are already available.
Mistakes Beginners Make With Bottom-Up Design
Common mistake Believing bottom-up design requires a fixed number of components
Why it failsThe source states that the flow describes the direction of design reasoning and does not require every project to have the same number of steps or components.
Do this insteadFocus on the direction: begin with known solutions and proceed upward toward the larger problem.
Common mistake Starting from the overall goal and calling it bottom-up
What it looks likeA designer writes the complete application plan first and only then looks for pieces to fill it.
Why it failsBottom-up design begins with known problems rather than the overall problem as a single starting point.
Do this insteadIdentify the known, solvable problems first, then reason upward from their solutions.
Common mistake Treating bottom-up design as a complete replacement for top-down thinking
Why it failsThe source says bottom-up design does not have to be used alone and is often combined with top-down design.
Do this insteadUse top-down reasoning to consider the larger problem and bottom-up reasoning to build from known components.
Common mistake Assuming any existing solution fits, without checking where it applies
Practice Identifying the Approach
A team is building a large reporting system. They begin by listing the small tasks they already know how to solve, such as formatting a date and reading a data file, and they plan to use an existing reusable component for both. Which design approach is the team using, and what clue in the description supports your answer?
Hints
- Ask where the team starts: with the overall reporting system, or with known problems?
- The source describes the identifying clue as starting with known solvable problems and available or reusable solutions, then working upward toward the overall application.
Key Takeaways
- Bottom-up design begins with known problems rather than the overall problem as a single starting point.
- Known solutions and reusable software components serve as building pieces, and design reasoning moves upward from them toward the overall solution.
- Separate solutions are combined into one larger system by treating each result as a contribution to the overall solution.
- Bottom-up design is often used together with top-down design: top-down reasoning considers the larger problem while bottom-up reasoning builds upward from known components.