Friday, January 31, 2014

Why software estimates are not accurate:


One of the most exasperating thing any software engineer has to go through is to answer a client's question- "How long do you think it will take to finish this?".  And the second question is "How much is it going to cost?".
Unlike  other discipline, software development is always a new undertaking. It is always an one shot task and involves several variables, that makes its estimation extremely random. And further we human beings are very bad in making estimates. According to Frank Knight in his Risk,Uncertainity and Profits (1925)  every randomness has two components - risk and uncertainty. Among which risk can be measured with knowable probabilities using the standard statistical tool such as coefficient of variance , on the other hand the uncertainty is class of randomness which cannot be attributed to any knowable probability.  With the nature of software lifecycle , together with technological constraints and changing customers requirement the entire software development mostly comprise of Uncertain components rather than risk. As a result apriori estimates will always fall short.
Thus the entire process can be categorized into three categories using the class of awareness and unawareness as explained by Italian Economist Salvatore Modica and Aldo Rustichini in their paper Awareness and partitional information structures (1994)
i) Known Knowns: This is the type of software project where we know what to be done and we know how to do it. For example if we  have developed and school MIS system and now we have task to install it in new school with minor customization. In this scenario the entire software project has changed into the class of Job-shop.

ii. Known Unknowns: This is the class of software project where we know what needs to be done but we really have no idea of how to do it. For example A developer who has experience of developing an droid app needs to integrate his current app with some telephony based system or PSTN. Now lets assume that the developer has never worked in voice before then his project falls into this category. In this scenario he will have to  study Telephony system and will face knowledge cliff and high learning curve  before he can be pretty sure of how long it will take to complete the project. Besides he will have to hire right person with the knowhow . Which will eventually increase hiring and recruitment cost. Open source community is big help in these situations but if the knowledge has been patented then it's really difficult to accomplish it.



iii. Unknown Unknowns:
Though this term has often be dubbed as an abuse of language by former defense secretary Donald Rumsfeld, it is still legit. Software project that belongs to this class can lay claim on highly green pasture of development. For instance developing a software to navigate the robotic probe on surface of Europa (moon of Jupiter). In these scenario the developer neither knows what to do nor how to do it.  And its success will depend on how well the research and development team can handle the unknowns.


Besides these three class of awareness in software development project , one another class can be deduced as per philosopher Salvoj Zizek's extrapolation and that is

 Unknown Knowns: 
This class of problem generally arise in small software companies which witness attrition among its developer with high turn over rate. Without smooth succession planning the developers while leaving the firm takes away all their knowledge as a result the firm will have no knowledge of doing things that they previously had done.

So how to make estimates then ?
This is the big question ? Considering all the above facts it seems unreasonable and extremely presumptuous to make the estimates with any software development projects besides the Job Shop type. But problem is management and customers do not understand this issue. And especially if the gestation period is too long the entire project may turn into jeopardy. Besides the developers are generally more introverted in nature and have hard time communicating the problems .
There are mathematical model such as function point analysis and evidence based estimation. But still using these tools can only mitigate Knightian risk and does not properly address the  Knightian Uncertainity. Therefore the best way is to get involved with customers. Get their regular feedback and apply piecemeal approach. Agile approach is extremely helpful but its main drawback is people may lose sight of goal and rather focus on small task.  
  


So for any successful project following must be done


i. Divide work into piecemeal
ii. Get estimates of smallest tasks
iii. Build strong Knowledge Base
iv. Have separate R&D team that can provide the proof of concept
v. Receive regular feedback from client
vi. Have a proper succession planning
vii. Bugs are part of life , deal with it
viii. Never think that your estimates are correct. The best rule is estimates are never correct

ix. Never  have marketing team decide on the deadlines (most important). 

Thursday, January 16, 2014

All I want

When the rain falls

I seek out for sun

and when sun comes

I look out for clouds

And when the thunder rolls

I fancy the snow

and when sleet arrives

I long for breeze

and when wind blows

I do rain dance

My unsettled mind is ephemeral

as all I want is a rainbow