From Zero to AI

Lesson 4.2: Task Decomposition

Duration: 45 minutes

Learning Objectives

After completing this lesson, you will be able to:

  • Explain what task decomposition is and why it matters
  • Break down complex problems into smaller, manageable parts
  • Identify dependencies between subtasks
  • Apply decomposition to real-world and programming problems

Introduction

Have you ever looked at a massive task and felt completely overwhelmed? Maybe it was cleaning an entire house, planning a big event, or learning a new skill. The secret to tackling any big challenge is the same: break it down into smaller pieces.

Task decomposition is the practice of dividing a complex problem into smaller, more manageable sub-problems.

This skill is so fundamental to programming that it's often called the "divide and conquer" approach.


Main Content

Why Decomposition Matters

When faced with a big problem, our brains can get stuck. But when we break it into pieces:

┌─────────────────────────────────────────────────────────────┐
│                    BIG SCARY TASK                            │
│                                                              │
│     "Build a website"                                       │
│                                                              │
│         😰 Overwhelming! Where do I start?                   │
└─────────────────────────────────────────────────────────────┘
                           │
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                   DECOMPOSED TASKS                           │
│                                                              │
│  ✓ Design the layout          ✓ Write the content           │
│  ✓ Choose colors              ✓ Add images                  │
│  ✓ Create navigation          ✓ Test on mobile              │
│                                                              │
│         😊 Manageable! I can do these one by one            │
└─────────────────────────────────────────────────────────────┘

Each small task is:

  • Easier to understand — less cognitive load
  • Easier to estimate — how long will it take?
  • Easier to test — did this part work?
  • Easier to assign — someone else could help with pieces

The Decomposition Process

Here's a systematic approach to breaking down any task:

┌─────────────────────────────────────────────────────────────┐
│              DECOMPOSITION STEPS                             │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  1. IDENTIFY THE GOAL                                       │
│     What is the final result you want?                      │
│                                                              │
│  2. LIST MAJOR COMPONENTS                                   │
│     What are the big pieces?                                │
│                                                              │
│  3. BREAK DOWN EACH COMPONENT                               │
│     Can each piece be divided further?                      │
│                                                              │
│  4. IDENTIFY DEPENDENCIES                                   │
│     What needs to happen before what?                       │
│                                                              │
│  5. ORDER THE TASKS                                         │
│     What sequence makes sense?                              │
│                                                              │
└─────────────────────────────────────────────────────────────┘

Example: Planning a Birthday Party

Let's apply decomposition to planning a birthday party.

Step 1: Identify the Goal

Host a successful birthday party for 20 guests

Step 2: List Major Components

  • Venue and setup
  • Food and drinks
  • Entertainment
  • Invitations
  • Decorations

Step 3: Break Down Each Component

Birthday Party
├── Venue and Setup
│   ├── Choose location
│   ├── Check availability
│   ├── Book venue
│   └── Arrange seating
│
├── Food and Drinks
│   ├── Decide menu
│   ├── Check dietary restrictions
│   ├── Order/prepare food
│   ├── Buy drinks
│   └── Order cake
│
├── Entertainment
│   ├── Choose music playlist
│   ├── Plan games/activities
│   └── Arrange equipment
│
├── Invitations
│   ├── Create guest list
│   ├── Design invitation
│   ├── Send invitations
│   └── Track RSVPs
│
└── Decorations
    ├── Choose theme
    ├── Buy decorations
    └── Set up decorations

Step 4: Identify Dependencies

Some tasks must happen before others:

  • Must choose theme → before buying decorations
  • Must track RSVPs → before ordering food
  • Must book venue → before arranging seating

Step 5: Order the Tasks

  1. Create guest list
  2. Choose theme
  3. Choose and book venue
  4. Design and send invitations
  5. Buy decorations
  6. ... and so on

How Small Should You Go?

A common question: "How much should I break things down?"

The answer: Until each task is something you can actually do in one sitting.

Too Big                    Just Right                Too Small
──────────────────────────────────────────────────────────────
"Make food"                "Bake the cake"           "Pick up flour bag"
                                                     "Open flour bag"
                                                     "Measure 2 cups"
                                                     ...

When coding:
"Build app"                "Create login form"       "Type the letter H"

In programming, a good rule is: if a task would take more than a few hours to complete, it probably needs to be broken down further.

Decomposition in Programming

Let's see how programmers decompose a real feature:

Task: Create a user registration system

User Registration System
│
├── Input Collection
│   ├── Create registration form
│   ├── Add email field
│   ├── Add password field
│   ├── Add confirm password field
│   └── Add submit button
│
├── Validation
│   ├── Check email format is valid
│   ├── Check password meets requirements
│   ├── Check passwords match
│   └── Check email isn't already registered
│
├── Data Storage
│   ├── Connect to database
│   ├── Create user record
│   └── Store encrypted password
│
├── Feedback to User
│   ├── Show success message
│   ├── Show error messages
│   └── Redirect to login page
│
└── Security
    ├── Prevent duplicate submissions
    ├── Add rate limiting
    └── Log registration attempts

Notice how each small task is specific and actionable. A programmer could pick any one of these and work on it without needing to understand the entire system.

The Tree Structure

You may have noticed that decomposition creates a tree structure:

                    [Main Task]
                    /    |    \
                   /     |     \
           [Part 1]  [Part 2]  [Part 3]
            /   \       |        /  \
           /     \      |       /    \
       [1.1]   [1.2]  [2.1]  [3.1]  [3.2]

This is exactly how programmers think about code structure. Functions call other functions, modules contain sub-modules, and complex systems are built from simple pieces.

Common Decomposition Mistakes

Watch out for these pitfalls:

Mistake Example Problem
Too vague "Handle errors" What errors? Handle how?
Skipping steps Going from "Get ingredients" to "Serve meal" Missing the cooking!
Wrong level Including "breathe" in a recipe Way too detailed
Missing dependencies "Send invitations" before "Create guest list" Wrong order

Real-World Application: Moving to a New Apartment

Let's practice with another complex task:

Moving to New Apartment
│
├── Before Moving Day
│   ├── Research neighborhoods
│   ├── Set budget
│   ├── Find apartment
│   ├── Sign lease
│   ├── Schedule moving date
│   ├── Hire movers or rent truck
│   ├── Gather packing supplies
│   ├── Pack non-essential items
│   ├── Update address with services
│   └── Notify friends and family
│
├── Moving Day
│   ├── Pack remaining items
│   ├── Do final walkthrough of old place
│   ├── Load truck
│   ├── Transport belongings
│   ├── Unload truck
│   └── Return keys to old place
│
└── After Moving
    ├── Unpack essentials first
    ├── Set up utilities
    ├── Arrange furniture
    ├── Unpack remaining boxes
    └── Explore new neighborhood

By breaking this overwhelming task into pieces, each step becomes achievable.


Practice Exercise

Exercise 1: Decompose a Morning Routine

Break down "Get ready for work/school" into at least 3 levels of detail.

Start with the main categories:

  • Personal hygiene
  • Getting dressed
  • Eating breakfast
  • Preparing to leave

Then break each category into specific steps.

Example Solution
Get Ready for Work
│
├── Personal Hygiene
│   ├── Use bathroom
│   ├── Wash face
│   ├── Brush teeth (2 minutes)
│   ├── Shower (if morning shower person)
│   │   ├── Turn on water
│   │   ├── Adjust temperature
│   │   ├── Wash body
│   │   ├── Wash hair
│   │   └── Dry off
│   └── Apply deodorant
│
├── Getting Dressed
│   ├── Check weather forecast
│   ├── Choose outfit
│   ├── Get dressed
│   └── Check appearance in mirror
│
├── Eating Breakfast
│   ├── Decide what to eat
│   ├── Prepare food
│   ├── Eat
│   └── Clean dishes
│
└── Preparing to Leave
    ├── Pack bag
    │   ├── Check for wallet/keys
    │   ├── Add laptop/books
    │   └── Pack lunch if needed
    ├── Check schedule for the day
    └── Lock door and leave

Exercise 2: Decompose a Programming Task

You want to create a simple calculator app. Break it down into components and sub-tasks.

Hint: Think about:

  • What the user sees (interface)
  • What calculations it can do
  • How errors are handled
Example Solution
Calculator App
│
├── User Interface
│   ├── Display screen for numbers
│   ├── Number buttons (0-9)
│   ├── Operation buttons (+, -, *, /)
│   ├── Equals button
│   ├── Clear button
│   └── Decimal point button
│
├── Core Functionality
│   ├── Accept number input
│   ├── Store first number
│   ├── Accept operation
│   ├── Accept second number
│   ├── Perform calculation
│   └── Display result
│
├── Operations
│   ├── Addition
│   ├── Subtraction
│   ├── Multiplication
│   └── Division
│
└── Error Handling
    ├── Division by zero
    ├── Invalid input
    └── Number too large

Exercise 3: Find the Missing Steps

This decomposition for "Make a Cup of Coffee" is incomplete. What's missing?

Make Coffee
├── Prepare Materials
│   └── Get coffee beans
├── Brew Coffee
│   ├── Pour water in machine
│   └── Start machine
└── Serve
    └── Pour into cup
Missing Steps
Make Coffee
├── Prepare Materials
│   ├── Get coffee beans
│   ├── Get filter                    ← Missing
│   ├── Get coffee mug                ← Missing
│   └── Get water                     ← Missing
├── Brew Coffee
│   ├── Put filter in machine         ← Missing
│   ├── Grind beans                   ← Missing
│   ├── Put ground coffee in filter   ← Missing
│   ├── Pour water in machine
│   ├── Start machine
│   └── Wait for brewing              ← Missing
└── Serve
    ├── Pour into cup
    └── Add cream/sugar if desired    ← Missing

Key Takeaways

  • Task decomposition is breaking a large problem into smaller, manageable pieces
  • Use the 5-step process: Goal → Components → Breakdown → Dependencies → Order
  • Break down until each task is actionable in one sitting
  • Decomposition creates a tree structure — just like code organization
  • Avoid being too vague, skipping steps, or going into unnecessary detail
  • This skill is essential for programming — every app is built from small, focused pieces

Resources

Resource Type Difficulty
Decomposition - BBC Bitesize Tutorial Beginner
Problem Decomposition - CS Unplugged Activity Beginner
Divide and Conquer - Khan Academy Article Intermediate