Manage complexity through flexibility in Software Development
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. The main obstacle to tackling software complexity is the number of people and components that need to coordinate with each other for the program to work.
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. Estimates should be as accurate as possible but only as precise as necessary to keep the estimation cost low.
Audit your mistakes and try to spot the pattern. If you know where most errors happen, you can put in place a better system for prevention.
Automate error-prone processes when possible. Often, human errors are introduced during rote tasks like data entry that can be handled by software instead.
Create checklists. With indexes, developers no longer need to rely on their fallible memories for every single process detail. Lists are used in detail-oriented work across industries from engineering to medicine.
Establishing pre-defined processes using any of these techniques reduces human error while providing opportunities for automation.
[¹]: Frederick Brooks (1995): (The Mythical Man-Month)