Don’t do right the wrong thing

filipeguelber
bawilabs
Published in
5 min readJan 31, 2018

There is a Portuguese version here.

In traditional industry, it is very common to think of efficiency (to do correctly), once efficacy (to do the right thing) is presupposed. That is, the traditional industry knows what to do and seeks to do that in the best way to be more competitive.

The software industry can not assume efficacy as an assumption, but incredibly what is seen is an incessant quest for efficiency. This quest is made through new flavors of agility or trying to copy iconic business models, but sometimes a simple principle is forgotten:

there is no advantage in doing well that which ought not to be done.

Thus, prioritizing what to do should be considered as one of the most important activities in a software development team. In general, we comfort ourselves in the maxim of agile philosophy and leave all this to the client, who sovereignly decides what should be done. However, asking the customer what should be done raises what I have called The Customer Theorem, where the answer to that question will be a resounding “EVERYTHING!”

Thinking about new ways to prioritize a backlog is necessary and here I try to expose one that offers less subjectivity in choice. We should start by mapping the Return on Investment in the development of a feature (ROI), that is, the cost/benefit of that new development. However, this is a simplistic analysis that ignores the prejudice by not having the feature. By importing a term from the finance area, we can call it Cost of Delay (COD) that represents how much we fail to make a profit while that feature is not yet in production. Using COD to prioritize may be a smart strategy, but we still need a secret sauce because features require time to be executed. By putting their duration in COD as a divisor we have what we call COD3, Cost of Delay Divided by Duration.

Lets practice

I will use here the example of this excellent article written by Derek Huether.

Consider 3 tasks: A, B, and C.

  • Feature A: 3 weeks of effort and generated value of $ 3000/week.
  • Feature B: 4 weeks and $ 7000/week.
  • Feature C: 6 weeks and $ 9000/week.

Next, we will analyze some situations about which decision to make when evaluating which features to implement.

Do all the tasks at the same time

In a somewhat strange scenario (but common in many organizations), we could do all three tasks at once. So we would have all the value ($ 19000) in our 14th week.

For the 13 weeks, we were working without anything being in production and consequent without generating value, we incurred COD of all 3 features: $3000 + $ 7000 + $ 9000 per week.

Total COD = $247,000

Start at the smallest

Another reasonable strategy would be to do the smaller task first, perhaps with the intention of delivering value faster. Let’s see:

It would take up to week 4th to get the ROI ($ 3,000) from feature A; up to the 8th week for the next ROI ($ 7,000); and in 14th we would get the last ROI ($ 9000) which is the highest value.

For the 3 weeks we are working on Feature A, we incur COD of all 3 features: $ 3000 + $ 7000 + $ 9000 per week.

That adds $ 19,000 a week times 3 weeks, leaving COD at $ 57,000.

We will then start Feature B. During the 4 weeks we spend developing Feature B, we incur the Features B and C COD: $ 7,000 + $ 9,000 per week = $ 16,000 per week. That adds $ 64,000 (16k * 4 weeks) to our COD that is now at $ 121,000.

We start the last one, Feature C. During development, the COD is just the feature’s own (the other two are already in production), which is $ 9000 per week for 6 weeks. This totals $ 54,000 COD to be added to the previous $ 121,000, which ultimately totals:

Total COD = $175,000.

Start with the feature that generates more value

In this approach, only at the end of the 7th week would we have our ROI ($ 9,000), by the 11th week the next ROI ($ 7,000), and the final ROI ($ 3,000) on the 14th.

In 6 weeks working on Feature C, we would incur the COD of the 3 features: $ 3000 + $ 7000 + $ 9000 per week. That adds $ 19,000 per week, which multiplied by 6 weeks of work would total $ 114,000.

When moving to Feature B, during the 4 weeks of development the COD would be from Features B and A: $ 7000 + $ 3000 per week = $ 10,000 per week multiplied by the 4 weeks of development, add $ 40,000 to the total COD, leading to a COD partial of $ 154,000.

Finally, we go to Feature A. A COD during its development would be $ 3000 per week for 3 weeks = $ 9000 which added to the previous partial value of $ 154,000 results in:

Total COD=163,000.

It seems that we do not have more options

However, we can use Cost of Delay Divided by Duration (COD3), which considers not only the cost of not doing, but also considers the time spent in development, in order to maximize the value generated.

Start with the one with the highest COD3

If the COD3 order was respected, we would do Feature B first, then Feature C, and finally Feature A. For 4 weeks we would be working on Feature B, which would give a COD of $ 3000 + $ 7000 + $ 9000 per week, COD = $ 76,000 . For the next 6 weeks, we would work on Feature C, incurring a COD of $ 9000 + $ 3000 per week. COD = $ 72,000.
For the 3 weeks we would work on Feature A we would incur COD of $ 3000 per week. COD = $ 9,000.

Total COD= $157,000.

The image summarizes the data:

Surprisingly, making the feature of higher value is not the best decision from the economic point of view.

The next time you prioritize your portfolio, do not try to maximize the value delivered, limit the cost of not doing it!

--

--