Sunday, January 2, 2022

Logarithmic thinking and estimations in software development

Let's begin with a thought experiment. Imagine the quantity of one. Then, visualize the quantity of ten and one hundred, trying to "feel" the numbers. Compare these "feelings" of quantities. How much bigger does ten feel compared to one hundred? Or one compared to one hundred? Observe the image below visualizing these quantities:


Did your feelings correspond to the proportions in the picture? Or were the differences in your feelings proportionally smaller? Generally, our feelings of quantity comparisons are proportionally smaller than they are in reality.

This is due to our innate logarithmic perception of the world (A natural log: Our innate sense of numbers is logarithmic, not linear - and another related article: The Amazonian tribe that can only count up to five). This way of perception is present not only in intuitive thinking about quantities but also in our senses, such as sight and hearing. Our sense of light intensity. Daylight intensity is a couple of thousands of times bigger than the light of one candle - but we are not realizing it, we don't perceive it as such a huge difference. Hearing is another sense, which works in this way. The logarithmic way of sound intensity perception is projected in the Decibel scale - 20 dBs are 100 times more intensive than 10 dBs.

Logarithmic thinking and perception of the world help us capture the huge amounts and distances in our minds and help us in our daily lives. It helps us grasp vast amounts and distances and can even encourage us to take on big or seemingly impossible projects.

How does this relate to estimations in software development?

Logarithmic perception affects our sense of effort needed to implement a particular part of software, leading to underestimation in most cases.

Various techniques can help improve estimates, such as Fibonacci series scrum cards that counter our logarithmic thinking tendency (that is why I prefer them over e.g. T-shirt sizing).

Since the time quantity is the issue in our estimations, instead of focusing on the overall effort to finish a story, rather think about what of required work needed to finish the story can be done in fixed time units. Let's say in half man-day, of one man-day. 

I am not saying that you have to estimate particular parts of a story in "minutes" (it doesn't make sense with so many variables that can affect when a particular functionality will be delivered), but rather try to box work into more imaginable, static time units. 

And why use half man-day, or one man-day? These units help round down estimations for tasks under one working day, enabling you to finish work with a clear mind. 

This approach also facilitates more detailed discussions within a team during estimations (from both, development and testing points of view), leading to better, more granular subtasks that allow improved parallelization of work. More granular tasks help to shorten the feedback loop inside a team or in communication with the business. You can even realize that there are more stories inside one story (bigger stories = bigger miss in estimation). 

Remember, it's not about estimating subtasks precisely, but about splitting work into imaginable time units and starting a discussion about the implementation details of a story.

Instead of asking how much effort a particular story needs, ask what parts of the story can be done within a predefined time period.

Saturday, January 1, 2022

AI, ML, Robots and Brains (31.5. - 6.6.2021)

Society


Algorithms


Health


Robots


Cars


Brains