Forgiving and unforgiving systems Link to heading

In business, velocity of delivery and productivity is important. Recently, I have spent some time thinking about all the projects I’ve worked on and the varying levels of productivity achieved. I believe that one of the most important reasons for productivity or non productivity in software projects is whether the systems that you’re working with are “forgiving” or “unforgiving”.

Defining forgiving and unforgiving systems Link to heading

Forgiving Systems

  • Are ones where operator or builder errors do not prove so prohibitively expensive (in terms of money or time) that operators and builders need to spend the bulk of their time designing around the landmines in the system.
  • Minimize cognitive complexity.
  • Are easy to heal or even self-heal if they get into a bad state.
  • Become easier to contribute to as builders and operators get more experience on them.

Unforgiving Systems

  • Create high cognitive load on builders and operators and make integration designs more complex.
  • Spread complexity to other systems that integrate with them.
  • Do not make it particularly easier for builders and operators to contribute as they get more experience on them.