https://chronologist.com/blog/2012-07-27/theory-of-constraints-and-software-engineering/
-
Throughput:
TE
is the rate of cash generated through delivery of working code into production. It is computed as sales price minus direct costs, such as packaging, delivery, installation, training, support, and networking. -
Investment:
I
is all money invested in software production systems plus money spent to obtain ideas for client-valued functionality. This does not apply to time spent by staff (that's Operating Expense). It does apply to the money spent on by-the-hour contractors. -
Operating Expense:
OE
is all money spent to produce working code from ideas. It is primarily direct labor of software engineers, but it also includes selling, general, and administrative costs. So, our fixed overheads. -
To repeat, Throughput:
T = Revenue - Totally Variable Expenses
-
Net Profit:
NP = T - OE
-
Return on Investment:
ROI = NP / I
To make the correct decision, you need a positive answer to one of these three questions:
- Does it increase throughput
T
? - Does it reduce operating expenses
OE
? - Does it increase the return on investment
ROI
?
Favour, in order:
- Increase in
T
- Decrease in
I
- Decrease in
OE
Throughput = capability delivered to production (assuming they meet demand). this includes adding new capability, as well as improving existing capability.
Inventory / WIP = undelivered capability.
Investment = nothing; it's all covered by OE.
Operating expenses = all our overheads, including our time (salaries).
Capability = an ability to do something one either requires far more effort to perform via some other more manual means, or some entirely new ability.
Production = the environment where the capability produces value.
- Increase
T
: Deliver more capability in the same timespan. - Decrease
I
: Impossible; it's already zero. - Decrease
OE
: Reduce the cost of software and services. Have less people on the team. (Both are counterproductive to 1. above.)
Throughput = new programs in use by paying users.
Inventory / WIP = new programs not yet in use by paying users.
Investment = nothing; it's all covered by OE.
Operating expenses = all our overheads, including our time (salaries).
- Increase
T
: Delivers more new programs in the same timespan. Do projects that earn more. Charges more for projects. - Decrease
I
: Impossible; it's already zero. - Decrease
OE
: Reduce the cost of software and services. Have less people on the team. (Both are counterproductive to 1. above.)
Throughput = access granted to paying users
Inventory / WIP = paying users not yet granted access.
Investment = what we spend on granting access to paying users. time spent processing the data. also a small fraction of the total infrastructure spend.
Operating expenses = everything else we spend. all the non-access-granting-specific costs. all other overheads.
- Increase
T
: Grants more access in the same timespan. - Decrease
I
: Impossible; it's already zero. - Decrease
OE
: Reduce the cost of software and services. Have less people on the team. (Both are counterproductive to 1. above.)
Value Demand: all the demand that eventually produces Throughput.
Failure Demand: demand created by a failure to produce value for a previous demand.
E.g.
- Repeatedly answering the same questions instead of writing an FAQ. Not consulting the FAQ and asking the question anyway.
- Redoing work due to missing information, misunderstanding the need, or producing poor quality.
The Investment into Inventory that never completes Throughput.
Any effort beyond the necessary Investment to complete Throughput, either due to having to redo things more than once (failure demand due to poor quality), or because the process itself is too complex or arduous (failure demand, or extra mandatory effort, due to presence of debt).
Technical debt is within the code and/or data in our software systems. E.g. half-finished features, or an architecture that prevents adding new capability.
Knowledge debt is within our documentation / support materials. E.g. missing or incorrect FAQs.
Process debt is within our system of work. E.g. doing things because of tradition, rather than because they provide value.
It reduces Throughput: we have to apply extra effort when delivering.
It generates Failure Demand: we do things incorrectly, or more than once. We distract people with things they can't succeed at (like asking them to do something without providing all the necessary information).
It creates Inertia: we are unwilling to pursue new capability due to the high debt associated with the area in which the capability would/does exist.
Besides, for more precise notation, I suggest using the following abbreviations.
TH
to indicate Financial Throughput (the one you have written about above)TP
to indicate Operational Throughput (widgets/hour or user stories/day).