I’m in the midst of reading Thinking in Systems: A Primer (affiliate link) to my list of recommended reads for Product Managers. It is one of those books like Principals of Product Development Flow that show you why things work at a deeper systemic level that you’ve just been emersed in.  It’s a book that points out the water for the fishes.  

I had a moment of illumination when reading her description of the reinforcing and balancing feedback loops that drive physical systems. That while we do not always deal with physical systems, many of the same constraints are in effect for software product management.

But any real physical entity is always surrounded by and exchanging things with its environment. A corporation needs a constant supply of energy and materials and workers and managers and customers. A growing corn crop needs water and nutrients and protection from pests. A population needs food and water and living space, and if it’s a human population, it needs jobs and education and health care and a multitude of other things. Any entity that is using energy and processing materials needs a place to put its wastes, or a process to carry its wastes away.
Two Stock Systems

Thinking in Systems; Donnella Medows

In the book she explains the way that systems behave.  Each with stocks (boxes), processes (water taps), and balancing and reinforcing feedback loops (arrow flows). In the book she uses many examples from the physical world an example of oil and gas extraction, which has strong limits on the amount of the actual resource available.  

A diagram of a two stock system with balancing and reinforcing feedback loops for oil extraction.
Two Stock System Diagram

Maybe you look at this and don’t see software but in product development we are subject to these reinforcing and balancing loops which both drive and constrain how fast we can iterate and build.  

  • Our resource is our total addressable market of customers there are hard limits to the total number of people that want to buy your product and the number of dollars that you can get them to give you.
  • Extraction is the process of selling them our product. 
  • Yield per unit capital is the cost of acquisition for your customers. This gets more expensive as you move from your first perfect customer into more diverse adjacent users.   
  • Capital is the value that we have to sell to customers.  In software this is the product or service that we can sell to customers. 
  • Investment this is where the magic of product and engineering happens. We convert money and time into capital.  
  • Deprecation is the process by which our software goes out of date as soon as we build it.  Bugs are found, packages need updating, integrations need to be maintained. The more software we have the more of the balancing function of deprecation acts on our software, the slower we end up going.
  • ​​​​​​Profit is profit, the more of it we reinvest back into our investment, the stronger the reinforcing feedback loop is.  The more we divert to extraction, the slower our investment goes. 

Obviously, this is a gross simplification of the product development system, but that is what models are for, helping us see part of the world in a comprehensible way.

Also, worth reading from Donella Meadows: