Building software is unpredictable
Software Development Complexity
Frederick P. Brooks led the division of IBM that programmed computer operating systems in the 1960s. He managed over 100 employees to create cutting-edge programs requiring intense coordination.
Brooks found his main obstacle was complexity. The number of people and components that needed to coordinate with each other for the program to work. Brooks also found that the relationship between complexity and errors is exponential, not linear.
Reducing Human Error in Software Development
If you know where most errors happen, you can put in place a better system for prevention. Often, human errors are introduced during rote tasks like data entry that can be handled by software instead.
With checklists, developers no longer need to rely on their fallible memories for every single detail of a process. Checklists are used in detail-oriented work across industries from engineering to medicine.
Refrain from relying too on long-term road-maps, as they are likely to change. Pick a release cadence, like once a month, and ship whatever you have. Pick a set of features and ship whenever it is finished—market what you have, not what you will have. Do not force programmers to commit to completing certain features by the end of a sprint or a specific date.
—
[¹]: Frederick Brooks (1995): (Mythical Man-Month, The: Essays on Software Engineering, Anniversary Edition)