The Physics of Software Projects
Imagine you're working on a project as part of a 5-person team. You’ve broken the project into milestones, features, components, epics, and stories and set an estimated timeline. Everything seems planned out—until one of these scenarios happens:
A team member leaves the project.
The company faces challenges and needs the project completed earlier than planned.
The project scope expands, with more features being requested.
If you analyze each scenario, you’ll notice they each impact one of three critical factors:
People
Timeline
Scope
When one of these factors changes, it inevitably disrupts the balance. To address the issue, you have to adjust at least one of the other factors. Let’s break it down:
- Fewer people mean the work will take longer to complete.
- Less time requires reducing the scope or adding more people to meet the deadline (though this isn’t always effective).
- An expanded scope may require either more time or additional team members.
Why Adding More People Isn’t Always the Solution
You might wonder: Why not just add more people to solve the problem? The answer lies in Brook’s Law, which states:
“Adding manpower to a late software project makes it later.”
Adding new team members, especially late in a project, incurs hidden costs. Time is required for onboarding, aligning with the team, and catching up on the project context. By the time these new team members are fully productive, the project might already be near completion, making the payoff minimal.
Mitigating These Challenges
One way to reduce the impact of these scenarios is to split the project into smaller, independent components that don’t rely heavily on each other. This way, team members can work in parallel with less dependency. However, achieving this level of separation is often easier said than done, especially early in the planning phase.
If these challenges resonate with you, I highly recommend checking out The Software Engineer’s Guidebook. The image I’ve attached comes from this great read
Let me know your thoughts—have you experienced similar scenarios in your projects?