Job Opening: Principal Software Engineer - Mob (US, CAN, MX)
Hunter Industries Careers

Software Estimation Paradox

Software Estimation Paradox

People can estimate well what they have done many times before.

Software developers automate what is repetitive or time consuming.

To estimate something well one must have repeated it many times before and not automated it.

Why would a software developer not automate something repeated many times before? 

Does estimation lead to waste?

Given the software estimation paradox we can posit software that can be easily estimated could have been automated. We can also say that software estimation in an environment where estimates turn into deadlines increases the amount of waste produced. This inherently works against core concepts in lean software development.

How do we reduce the waste?

To reduce the waste we should be changing the incentive structure. By incorporating good design, continuous delivery, continuous integration, vertical slices, and prioritizing small features on cost of delay, we can begin to realize value quickly and drastically reduce the waste produced. 

What should we do next?

How to prioritize software development without estimates
If we take all of the features we have to do next. Continuous Delivery and Vertical Slices allow us to pick a feature based on that feature's cost of delay. After selecting the feature, evaluate for any features that contain technology that we have never used before or design choices we do not know. We call these items known unknowns. Note, in a traditional estimation process we would have done an investigation period to be able to estimate these. Once known unknows are found, budget time to produce proof of concepts, or determine that the feature is impossible given our current knowledge. Once all known unknowns are eliminated, work toward deploying the feature until any new unkonwn unknowns are found. If any unknown unknowns are found, once again budget a proof of concept until no unknowns remain. At that point deploy and choose the next feature. Combine this process with the Core Development Process and the code will maintain a high quality and continue forward extracting value along the way.

How do we safely implement the reduction in waste?

There are many processes and technologies that support movement in this direction. Slowly incorporate the following practices in this order and gradually you will begin to see a transition.
  1. Agile Retrospectives
  2. Learning Sessions
  3. Kanban
  4. Single Item WIP
  5. Unit Testing
  6. Super Small MVP
  7. Continuous Integration
  8. Zaroboogz
  9. Automated Acceptance Testing
  10. Continuous Delivery
  11. Iteration based on Cost of Delay

Have feedback? Join the discussion in the comments! Also Check out the #NoEstimates hashtag on twitter.

1 comment:

  1. This is a fantastic blog! Would love to read couple of paragraph on the core development process.