Methodologizing The Bittersweet Estimation
programmingcollaboration
Published at Mar 14, 2023
Estimations are crucial for software development teams as clients rely on them for launch plans, marketing strategies and budgetary decisions. Providing high-precision and high-accuracy estimations is important to gain clients' trust and maintain reputation.
Before delving into the topic, it's crucial to distinguish between accuracy and precision, which are two separate concepts. Precision refers to the ability to provide a specific value, whereas accuracy deals with how closely that value aligns with the actual result. By maintaining this distinction, we can develop a more effective methodology for providing estimates across a variety of projects.
  • Precision is important during the bidding and negotiation phase to establish trust with clients.
  • Accuracy is crucial for maintaining long-term success and reputation upon project completion.
  • Why do we estimate?
    Estimations are vital for clients, but they also hold significant internal value. After defining the project's definition of done and breaking it down into milestones and tasks, our team estimates for various internal reasons:
  • Learning: Estimation is a skill that improves with practice and creates a time frame for thinking before starting a task, leading to better accuracy and discovery of more efficient ways to complete a task.
  • Assignment: Estimations help assign tasks to responsible team members.
  • Planning: Estimations help determine the deliverables and enable the creation of a continuous delivery pipeline for clients.
  • Prioritizing: Tasks are prioritized based on their estimated time and the value they add to the product, to maximize the overall value of the deliverable.
  • Subtask Creation: Large tasks may be divided into smaller sub-tasks based on estimations.
  • Measuring Team Performance: Completed tasks and estimations are analyzed to measure team and team member performance.
  • How do we estimate?
    Although predicting the future is not a strong suit for humans, our brains are exceptional at pattern matching. This ability to learn from past experiences and apply them to future situations has helped us survive in the wild as well as in the business world. Therefore, it is essential to keep a proper record of the tasks performed and create a legacy that can be used for pattern matching.
    Moreover, software development processes are intertwined with research and learning processes. Providing estimates without adequate knowledge and experience about the necessary development steps can result in meaningless and misleading results. Hence, it is important to consider the risk parameter in addition to effort and complexity when giving estimates.
  • Effort: Indicates the time needed to complete the task, rated on a scale of 1-5.
  • Complexity: Indicates the level of difficulty in developing code or designing the task flow, rated on a scale of 1-4.
  • Risk: Indicates the level of knowledge and experience that the team lacks about the task, rated on a scale of 1-3.
  • Each task that reaches the team for estimation is given a value on these three dimensions. The highest value for each dimension serves as a red flag.
  • Effort Rating 5/5: The task should be broken down into smaller and more quickly completable tasks.
  • Complexity Rating 4/4: The task's technical design and implementation strategy should be reconsidered.
  • Risk Rating 3/3: Team has insufficient knowledge about the task. Effort and complexity ratings are set to their maximum values. A Research Task is created with Risk:1 and assigned effort and complexity values. Assignee must update the ratings after completing the research task.
  • Example