In the previous chapter we came to understand what are the processes and causes that evolve a single monolithic application into a Monolith. We’ve also touched on the outcome of the process, the waste of time. This chapter we’d be talking about waste itself, trying to realize why efficiency is important and to set our minds to it.
One to Many
We’ve noticed we are working on a Monolith only once the waste got big enough to be measured. Measured in days. As a baseline we’ve said it to be 10 days. The extra effort needed to work on a Monolith is not an extra effort, it is a waste!
A 10 days’ waste on a single task is also equivalent to 10 tasks with a waste of 1 day. Or 20 tasks with half a day of waste. Half a day is how much it takes to trace, recover and redeploy to all environments after a small bug was discovered. As it goes unmeasured, we have no way to know how many half days of waste incidents we have today.
10 days is a waste of only a single engineer. If we are running, or running with, a group of 10 engineers, that is 100 days of waste. You can create an entire new software product line with that time. You can invest it into increasing your system’s reliability. Which is why waste is what causes your Velocity to drop. Time wasted instead of invested into what really is important [see We Were Born to Run: [In]stability and Velocity].
10 days may not sound like a lot to us, especially when it’s fragmented and scattered over a long time span. For some it may sound a given or part of the job itself. There is a mental gap between our understanding of the value of 10 days and our understanding of the consequences. Let’s try to bridge that gap so we can make better choices today in real time.
Calculating Inefficiency
It sounds reasonable that we personally have at the very least a 10 days waste. It is also a question of time span. 10 days wasted over a year is 5% of an engineer’s annual work time (a year would be our baseline for easier calculations). We would soon see that even 5% is a lot. It could also be on a time span of only 6 months, so that would be a 10% waste of an engineer’s annual work time. Over 3 months it would be 20%.
Here’s a thought on how to quickly track and measure our own inefficiency (or our group), or at least get a baseline for where we are now: For a while, log every waste of time. Write the date, the hour and the amount of time wasted. Once you’ve logged 10 days of waste, see how long it took you. See the time span and calculate the inefficiency. Example:
Date and Hour (mm-dd-yy) | Time wasted | Accumulated waste |
01-01-22 16:00:00 | 2h | |
01-05-22 10:00:00 | 1d | 1d 2h |
(more entries) | ||
03-01-22 15:00 | 5h | 10d |
The 10 days’ waste was reached on March 1st after two months. Two months is about 80 days. 10 days waste out of 80 days is 12.5%. You are running at 87.5% efficiency. That is 60 days of waste a year.
Alternative to Waste
Budget wise, if an engineer’s annual salary is 200k$ (and it is more than that), each decrease in 5% inefficiency saves the company 10k$. 10k$ out of 200k$ may still sound like nothing because we have a mental tendency to think in relative terms. According to Dan Ariely (world famous behavioral economist), in order to understand the value of money we need to think in alternative terms. What is the alternative value of 10k$?
One kind of alternative value is to compare it to other costs, let’s say our AWS bill. 10k$ is running an AWS EC2 server with 32 vCPU and 64gb of memory for an entire year. 10k$ is running an ElasticSearch cluster of 450GB storage with fault tolerance for an entire year. We must wonder why we are working so hard on saving 10k$ on our AWS bill, but doing nothing to save the same amount by handling inefficiency.
Another alternative value would be employees’ well being. 10k$ is financing a road trip across the US for one engineer and his entire family for an entire month. 10k$ is sending one engineer to 10 conferences. For a group of 10 engineers, 5% is 100k$ annually saved. For a company of 60 engineers, 5% is 600k$ annually saved. These sums are the costs of taking the entire group or company for a week-long vacation in Hawaii. What would we prefer, maintaining a Monolith or going to Hawaii? Tough choice.
Let’s be honest here. Although investing money back into people is an amazing incentive to reduce inefficiencies, practically speaking it is most likely beyond our reach. We’d need to convince the CEO and hope he won’t say now is not the time.
Time is a Resource
I had a CTO who would always say “there is always money laying on the floor”. I would like to pay courtesy to it and say “there is always time laying on the floor”.
We can only save money, not make money out of being more efficient. But we can make more time out of being more efficient. And time is a precious resource (our capacity to be more exact), because every project or task requires our engineers’ time.
Let’s think of personnel management. We always need more hands. We always work very hard to get the budget for it. We always work very hard to recruit one more set of hands and then more on on-boarding. For a group of 10 engineers, each decrease of 5% in inefficiency is like another half an engineer joining the group. We don’t have to look only outside for more engineers. Being more efficient is looking for more engineers inside without increasing your budget!
We could also look at this in terms of interest and capacity.
Let’s say we wish to buy something that costs 105$ next month. We only have 100$ today so we can not afford it. Unless we do something we can never buy it. Alas, we can not put in more work hours to earn more money and we can not put aside money for savings. The only alternative we have is to put it in the bank. We’d be getting 5% interest and next month we’ll be able to afford to buy it.
Same goes for incoming projects. We’ve been given a heads up that next month a new major and time sensitive project would start. We’d be telling our superior that “we don’t have the time for this”. “Okay”, he would say, “make time for this. If you won’t I’ll give it to the competing group”. If we won’t do something, we won’t be giving our engineers this really career changing project. Investing in removal of inefficiencies is like mining for time. Mine for time, win the project. Or find something else to invest time in, like removing even more inefficiencies (compound interest) !
Or we shouldn’t do anything with it. We could just work less hours and spend more time with our friends and families. Ease is also of the greatest of values.
Next, let’s talk about another evolution process. The one that evolves our applications into a Bundle.