- **Epistemic status:** #seedlings Learning to have an intuitive sense of how much time it would take you to finish assigned work will pay off in the long run, since a lot of jobs ask for estimations to get the work done. By providing accurate estimates, you will build trust with the [[Stakeholders]] of the project and [[Advance your career]]. ## Measure accuracy When someone asks for an estimate, you need to know how accurate that answer should be. Depending on how it is phrased, it can be interpreted differently. If you tell someone, I will get this done in 120 days, people expect for it to be delivered close to that time. If you say it will be delivered in 6 months, they know it might be in between 5 or 7 months. Two good rules of thumb are to **always account for entropy, adding padding in your estimations** and **when asked for an estimate say ''I'll get back to you" before providing one**. Not following these rules most likely will come back to haunt you. You can use the following table to provide estimates: | Duration | Quote estimate in | | ---------- | ------------------------------------ | | 1-15 days | Days | | 3-6 weeks | Weeks | | 8-20 weeks | Months | | 20+ weeks | Think hard before giving an estimate | ## Understand the requirements When you have a grasp of the domain (see [[DDD - Domain Driven Design]]) and understand what is being asked, it will help you feel more empowered when estimating. If you don't know the extent of the requirements and how those changes will affect the project, your estimate will be flawed. ## Design a model After having a grasp of the requirements, you can start [[Data Modeling]] to provide context on how it will be implemented can be useful to uncover patterns, missed requirements, processes or edge cases that would be found too late or not at all. The model is a [[Prototype to learn]] more and not the end result, therefore it can introduce inaccuracies. Utilize [[Atomic Design]] to get a bird's eye view of how the system will interact, to finding critical parameters you need to define before addressing the problem. ## Calculate the answer Depending on the complexity of the system, you will need to increase the amount of entropy calculated in your estimate. Don't be afraid to run multiple calculations when dealing with tasks that have medium to high complexity. ## Measure over time the estimates To be able to understand how to develop this skill you need to measure what estimate you gave, under what conditions, and how much research was done. The main point to understand with estimates is that you will have wrong estimates, and that is ok. Each opportunity is a learning experience. --- ## References - Thomas, David, and Andrew Hunt. _The Pragmatic Programmer, 20th Anniversary Edition: Journey to Mastery_. Second edition. Boston: Addison-Wesley, 2019.