Too often I run into people who are way too concerned about velocity in software development and do a lot of math jugglery to make a plan look great to them and their bosses. The task breakdown in software development projects are empirical, it is not that scientific enough to drill it down to plain numbers and apply optimisation techniques on it or swap people like machines between tasks.

But many managers break down the tasks as if there is no communication or sync up required between people and if at all there is some communication, then people have to communicate over formal structures and contracts. If you trace these back to what it is, you get waterfall process with rigid contracts and control structures.

Teams are built with people; people get bored, fall sick, need vacations and skills vary between individuals. Planning needs to take into account task rotations, interactions between teams, contingencies, people skills, training & staffing issues, context and above all requirements that can change entirely or scope that increases a lot after deep understanding.

The result of managers treating work division in software like labour work results in unrealistic expectations which produces an output that is always on fire and setting self fulfilling prophecies that software teams don’t deliver hence need to be micromanaged.

Software development is a dynamic system with a ton of moving and evolving parts, in a dynamic system the whole is much more than the sum of the parts. A plant as a whole is much more than when seen as leaves, stems, branches, seeds, flowers, trunk and root.