How to estimate development time?

Asked

Viewed 4,928 times

36

I’m starting to try to use Kanban in practice. In this case, I work alone, so I’m trying to get this answer in a context in which there is no staff available, let alone more formal processes found in larger companies.

When using agile methodologies it is common to try to make estimates. One technique I recently met is to use pomodoros and the Fibonacci sequence. With this technique we estimate the time in pomodoros: a Pomodoro refers to 25 minutes of work and 5 minutes of rest. To estimate a task we use the Fibonacci sequence numbers. A task can be estimated at 1, 2, 3, 5, 8, 13, 21... pomodoros and so on.

The problem I see is: in this case we have a specific time unit to use and we have a sequence of "allowed numbers" for that time unit at our disposal.

Anyway, it is still necessary to look at each task and say: this task requires X time units.

This seems to be really very complicated by several factors:

  • Sometimes it can be something we’ve never done before and we have no idea how long it takes,
  • Sometimes we thought something was easy and fast and in the end it wasn’t as simple as we thought
  • Unforeseen events can take longer. That is if there is not such a big complication in the middle of the road that it ends up "jamming" the development

These are just some factors that I thought complicate this. For me, who am starting now with the agile methodologies in practice even, I really can’t get a clue how to assign X time units to each task.

In theory it seems simple, in practice it is not that simple. So, how to make estimates correctly when using agile methodologies? How to get around these complications I mentioned? What is the "metric" used to assign a certain number of time units to a task?

  • 1

    super interesting the survey, but see : Estimate, is something inaccurate, for situations where unpredictable factors will occur, you raised points that reinforce this statement, ex:"something that we have never done before and we have no idea how long it takes"... I believe that the metrics derive from events that have already taken place... This is just one point that I have observed. Kanban, in my opinion, does not interfere directly in your questions, but something that could help would be https://pt.wikipedia.org/wiki/Ciclo_PDCA but let’s wait for other suggestions, I am very interested in the solution to the questions

  • I have used APF (Function Point Analysis). It’s a little complex to understand because you have to get out of your head about the development itself, but we’ve been able to estimate with a minimal error rate. https://pt.wikipedia.org/wiki/An%C3%A1lise_de_pontos_de_fun%C3%A7%C3%A3o

  • the biggest problem of developing software is to estimate, alive on the skin this dilemma every day +1 by curiosity.

  • Leonardo, your questioning is very good. I am not "expert" on the subject, but I have a lot of interest. As you are starting out and don’t have a team yet this tends to be more complicated, but my tip is to estimate how much you would take to implement a simple form. Let’s say this form (tested, validated) equals 3 on its scale (let’s not think about hours now, right?), so for every new feature you have to estimate try to think like this "how many simple forms is that?". That’s what I apply, and by the way I learned from other people. In the future if you have u

  • 1

    Dude, where did you see this Pomodoro-associated newsreel with Fibonacci? If Fibonacci in estimate were an exact time multiplier, wouldn’t it be much easier to just point out the exact time in hours? Pomodoro, in turn, is a technique to maintain focus and has nothing to do with estimates. And Kanban, in turn, is a method for managing process changes, not a software development method, let alone working alone. Answer for you working alone: don’t waste too much energy making estimates - use this energy to make software.

  • @Caffé, I saw in a course on agile methodologies. But in fact it may be the way I wrote in the question that got weird. I did not assume a direct connection. What I saw was that Fibonacci is used to tell the possible values of time units. Already Pomodoro I saw that it is a technique to keep the focus, but it provides "units of time", measuring the time in pomodoros. But not that the two things are associated. What I understood is that you can apply the two things together, measuring the time in pomodoros and not in hours.

  • 1

    @Leonardo I understood. But it is not the case to apply them together no. They are very different things. The idea of using Fibonacci sequence is precisely not to link the estimate to an exact time, but to the complexity degree of the task/requirement, and without ignoring that something complex does not always take more than something simple. Roughly speaking, it is another, among many, "kick an estimate" technique. There seems to be a lot of interested people and the question has not been closed. I will try to give a useful answer. (Later).

  • 2

    Tip metaphorical for life: you will need a ruler and of a team. The ruler will be used to measure, of course. No matter which ruler you use or how you measure it (meters, yards, etc), always use the same ruler (otherwise your estimates will never be useful). The team will be used to build, of course, but also to define productivity. Certain teams will take longer, others less time, to produce 1 unit size of your ruler. Normal. Know this. How? Kick, miss, store and refine. Next time the estimate will be more accurate.

  • Hello Leonardo, I could post here, but I think it gets bad to read, when you have enough theory. One of the techniques used is Points per Function, give a searched is very simple and very close to expected. Basically you will find the functions of the software and analyze the amount of fields in the table, interfaces etc...

Show 4 more comments

4 answers

15

How to make estimates ?

According to several experts, there are two ways to estimate a development of a software project, :

1-) By Analogy - Current project size estimates are based on estimates already developed in similar projects or the so-called historical bases of other projects or;

2- ) developing the technique of measuring the product characteristics and using a methodology and algorithm to convert the measurement into a size estimate.

Basic methodologies

Good in your case, in this article and in this article to know better how to design your own estimates on the basis of your jobs and how long it takes you to do a certain task.

An interesting method would be you use based on the Planning Poker,which has already been cited, which is a consensus game mainly used to estimate the effort or size relative to the development goals of a software.I advise you to take a look at here to learn more about the subject and also to take a look here to create your own online Planning Poker.

What can also help you make certain estimates of development time is to create a Diagrama de Gantt.

The Gantt diagram is a graph used to illustrate the progress of the different stages of a project. The time intervals representing the beginning and end of each phase appear as colored bars on the horizontal axis of the graph.

Example of Diagrama de Gantt :

inserir a descrição da imagem aqui

Complex methodologies

There are several methodologies for creating estimates of software development time, which are :

COCOMO ( Constructive Cost Model) [COCOMOII]

Model developed to estimate the development effort, deadlines and team size for software projects. It uses equations developed by Boehm (BARRY, 1981) to predict the number of programmers-month and the development time; they can be calculated using code line measurements or Function Points. Adjustments to the equations should be made to represent the influences on attributes, hardware and software during the project lifecycle. A disadvantage of this technique is that the coefficients of the metric (a,b,c,d) are not applicable to size or whether productivity is different, which makes it difficult to make comparisons.

Code Lines - (LOC)

The line-of-code measurement technique is one of the oldest measures of software development design size. It consists of counting the number of lines of code of a software program. In addition to being very simple, it is also very easy to automate its implementation , but, it has some disadvantages among which we mention: the dependency of the software language and the developer (PRESSMAN, 1995); absence of counting pattern and the fact that it can only be applied in the coding phase.

Metricas de Hasltead

It is a set of metrics proposed by Maurice Halstead (HASLTEAD, 1977). The principle of this method lies in the analysis and quantification of operands and operators and in the concept that from the knowledge of the measures, one can quantify the words and the extension of the study algorithm.

Puttnam s Slim Model (PUTMAN, 1978)

It is an estimation model that seeks to measure effort and time through the dynamics of multiple variables that presupposes specific efforts throughout the existence of a software project. It relates the number of lines of code to the time and effort of development. A disadvantage of the technique is its binding to the language used and the requirement of a certain time to obtain real values for the parameters of the formula.

Delphi

It is a technique that boils down to the consultation of specialists in a given area, in a given language and/or subject, so that, using their experience and understanding of the proposed project, they make proper estimates. Several estimates of the same project should be made, as it is common for them to carry influences and trends from experts. It is an empirical method, based on professional experiences that can be subjective. (Boehm, 1981)

PSP - Personal Software Process - (HUMPHREY, 1995)

It is a technique derived from the SEI-CMM (Software Engineering Institute - Capability Matutiry Model) that was developed with the function of empowering , improve and optimize the individual work process. The technique is divided into seven stages, in stages PSP0, PSP0.1 and PSP1 the size and time needed for product development.

PCU - Points per Use Case

They were created by Gustav Karner in 1993 as a specific adaptation of Function Points to measure the size of object-oriented software projects. It explores the model and description of the use case, replacing some technical features proposed by the Function Points. It is a simple and easy to use method but it is still in the research phase and there are no standardized counting rules. The joint application of PCU and APF has been studied in an attempt to explore the relationship between them. (EDMÉIA, 2004)

Analysis by Function Points (ALBRECHT,1983)

It seeks to measure the complexity of the product by quantifying functionality expressed by the user’s view of it. The model measures what the system is, its functional size and not how it will be, as well as measuring the relationship of the system to users and other systems. It is independent of the technology used and measures an application by the functions performed for/and at the request of the end user. ; can also be used in estimates.

Completion

Estimating the size of a software project is a critical activity because it has an impact both on the technical solution presented and on the management of the software project and should be performed not only at the beginning of the project but during the project lifecycle. The techniques presented above are just a few of the many that exist, and each one covers a certain area; there is no metric that completes the study by itself, thus, recommendsif the most appropriate technique is used to measure software design or the use of more than one technique together. Among the described techniques, the most popular currently is the Function Point Analysis technique. This technique is supported by the IFPUG (International Function Point Users Group), which is responsible, among others, for the elaboration and dissemination of a manual of counting practices (CPM - Counting Practices Manual)in addition to maintaining a certification program of professionals specialized in applying the APF technique. Function Point Analysis (APF) is one of the most sedimented size estimation metrics on the market and provides increasingly accurate results as artifacts from the analysis and design phase are generated.

Bibliographies

COCOMO - Constructive Cost Model. Available in: http://sunset.usc.edu/research/COCOMOII/

DEMARCO, TOM. Software Project Control. 9.ed. Rio de Janeiro: Editora Campus, 1991.

VAZQUEZ, Carlos Eduardo, SIMÕES, Guilherme Siqueira, ALBERT, Renato Machado - ANALYSIS OF FUNCTION POINTS, Measurement, Estimates and Management of Software Projects, 13.ed. São Paulo: Editora Érica, 2013.

MACORATTI, José Carlos - Software size estimates and APF. Available at: : http://www.macoratti.net/net_est1.htm

  • 1

    Although this answer basically contains text copied from other websites, I think this is an important subject. Please note that 3 of the 8 methods listed are not estimating but measuring the size of the software, to be made after the software already exists and not before. Of the others, some do not even contain the most superficial explanation, and one of them (Delphi) is a method of divination rather than measurement. Please also note that the Gantt Graph has nothing to do with software estimation, it serves to monitor the deviations between predicted and executed tasks chained.

  • @Yes, your observations are interesting, but I know that the Gantt Diagram is not about estimation,but it can also help to organize tasks in later knowing how to estimate more or less how long it might take to finish a certain task and consequently can serve to help create time estimates of a software.

12

There are basically two methods to estimate software development cost:

to) Guess how much will it cost.

b) Measure how much will it cost.

All estimation methods are derived from these two basic ways there.

The supporters of method the are always trying to hone their divination techniques and the supporters of the method b are always trying to improve their measurement techniques.

a) Estimation by measurement

It’s the oldest and most traditional way to estimate software.

One of the most popular techniques of this method is the score of points per function, which works more or less like this:

  • The requirements are raised
  • Use cases are designed based on the requirements
  • The use cases in the functions that compose it are detailed (there is a range of previously established function types)
  • Add the points of all functions (each type of function has a previously established number of points)
  • Multiply the total of points by a unit of value (time, money...)
  • A fat is applied.

There may be more factors influencing the project cost or price forecast (management cost, risk, aggregated value, etc.), but these other factors will be present depending on the nature and environment of the project and regardless of the estimation method chosen.

The value of each function point is a managerial decision that is based on previous experiences (own or market) and other marketing interests.

This is an incredibly effective method.

It is difficult to miss the estimate because the measurement is made on very detailed documents of everything that will be implemented. Each function is a very elementary software resource, like one of the letters of CRUD, whether the object is an entity or a relationship, etc. And it is easy to get the effort size right to make an implementation so small.

The problem is that telling everything that will be done requires you to know beforehand everything that will be done. That is, you have to do a good investment in understanding and detailing the scope even before starting to make software.

In projects of this type, this phase is natural take months and cost the work of various consultants, commercial and technical, who are usually the most experienced in the organization (the most expensive) because the premise is that this phase is completed with a lot of quality.

It is normal that this effort has other relevants in the project beyond the estimate, such as relying on comprehensive documentation produced at this stage to ensure that the right software will be developed, to rely on the documentation as a support for future maintenance, or to receive a subscription from the customer in this documentation (a contract) and armour counter-changes to ensure the margin or the deadline.

These other relevancies of the documentation bring a few more drawbacks to this method: you have to design the whole system before you learn all the necessary things about it, because learning, both from the client and from the team, happens during the implementation of the project and after the customer starts to see the software that is delivered.

If you hamper the changes, the customer may be missing opportunity to get more value from this project. And if you open yourself up to change, you’re throwing away the investment you made there in the beginning when you tried to predict everything that would be done and all the cost.

b) Guess by guess

This is the preferred process method Agile, since they value more the software running, earlier than comprehensive documentation; more collaborating with the client than the negotiation of contracts; they are open to change and even encourage it; believe that the best architecture and design emerge instead of being defined in advance; etc.

Since the idea here is just to allow change, it doesn’t make sense to invest a lot in closing a scope, so you usually build a macro view of the project and an approximate estimate, that can only be guessed since there is nothing to measure because it is not yet known exactly what will be done.

There are several methods of guessing. To define a general cost of the project before starting it, it is common to define the capacities or Features, that are the mega requirements of the project, guess how much it will cost each and add.

"Guess" is a correct term as it is admitted by the project that the future is uncertain, it is admitted that there is still no deep knowledge about each Feature or ability to be sure of all the work that will be necessary, and there is no intention to acquire this knowledge in advance - preference is given to start delivering software early and learn from it.

All estimates are based on previous experiences, and are difficult to achieve with precision because they are made on a macro and not detailed knowledge of the work that will be employed.

Still in theory you can deliver the capabilities provided within the budget because while parts of the software are made and presented to the customer, learning increases and allows you to stop performing work that previously seemed necessary.

The opposite can also happen and you identify that you made a very bad mistake in divination, and that it will be impossible to deliver the capabilities at the expected cost. In this case the new cost is assumed or the project is cancelled early before the damage is too great.

Note that in the other method you can also err badly - not the cost estimate but the forecast of what should be implemented because it predicted this without counting on the knowledge acquired during the project. In this case, when the project is cancelled, the entire cost of that initial phase is added to the loss. Or worse: since you already "knew" everything you needed to do and didn’t even want changes to come, you did not deliver the software in parts but left everything to the end - that is: risk of total loss.

Guesswork during the project

Well, so far I’ve only talked about the guesswork that happens at the beginning of the project. But and during the project, how the tasks are estimated (small requirements that will constitute the mega requirement - to such capacity/Feature)?

Here happens the same kind of divination based on empirical knowledge. Agile methods generally discourage estimation in hours, as they admit that one cannot predict with such a level of accuracy how much it will cost even a small requirement.

So it was invented story points which are an estimate of effort or size or complexity of the task, but are not directly related to cost in hours. The idea is that over time learn how many points can be made in a period and that this helps estimate the tasks that can be completed, according to their number of points, in a subsequent period of equal size.

In an effort to further untie the Agile estimates of the estimates in hours, we use Fibonacci scales or the sizes "P", "M" and "G" (type of t-shirt sizes) to discourage the association with hours (the immediate association becomes more difficult because the conversion calculation is more difficult or abstract).

To seek a more promising divination, there is still the Planning poker, that relies on the experience of several professionals at the same time to avoid deviations too large for more or for less. You can read how Planning poker works around or ask a specific question because only this gives a few paragraphs.

Down with the guesswork

Finally, the latest fad in the Agile universe is to look for alternatives so you don’t even have to guess estimates.

The reasoning is as follows: if measuring the project (here presented as "method a") does not serve the client well and if we are not so good at guessing ("method b"), how about forgetting this stop of estimating?

The name of this movement is #Noestimates And the idea, of course, is not just to stop estimating software, but to look for alternatives to it. Type "we can’t estimate, so what can we do instead to ensure the cost/value/term ratio for the customer?".

It is also considered that although the client needs to know how much he will spend and how long it will take, the estimate itself has no value for him, and what has no value, according to the Lean thought, should be eliminated from the process (OK, OK, this is another story, even longer, so another time).

Estimates for whom?

As I commented lightly, it is very questionable the value of estimates for the client.

Somehow he needs to know how much it’s gonna cost and when it’s done, okay. According to Agile methods, this can be solved with macro-capacity estimation/capabilities, interactive deliveries and open scope.

And how much will each task cost? How much will each of those 10 small requirements you plan to develop in the next two weeks cost? Do you really need to calculate this? Who will sell this measurement to? Who will pay for this effort? What is the value of nailing a Fibonacci number on each post in the picture?

So, if you are working alone or if your project allows, if there is no manager charging you, try to get rid of short-term estimates because your real value for the project so far has not been demonstrated.

Concluding remarks

As we talked about in the comments, the relationship between Fibonacci and Pomodoro does not exist.

Pomodoro is a technique to maintain focus.

And using Fibonacci sequence numbers in the estimates is precisely an effort to unlink cost estimates in hours.

A benchmark to give value to the answer

Ron Jeffries, one of the guys who signed the Agile Manifesto, who created Extreme Programing and who helped invent these "story points" and "team speed", is engaged in the movement #Noestimates. Even he has already apologized for having invented this business of estimating in points. Follows:

"There are a number of ideas on how to estimate using something other than time [hours]. Stitches, gummi bears, fibonacci numbers, t-shirt sizes. They were originally invented to obscure the aspect of time, so that management would not be tempted to misuse estimates. (I know: I was there when they were invented. Actually I must have invented the Points. If I invented it, I’m sorry now.)"

See this apology and many intererssantes things on: https://pragprog.com/magazines/2013-02/estimation-is-evil

  • I’m sorry, but I laughed when I read the "Apply a fat" item. That is to say that you use method B, when you actually use method A but with all the bureaucratic work of method B. :)

  • Yeah, @Luizvieira, it would be comical if it weren’t tragic. Of course it’s not formally called fat. Formally, you "considers the General System Characteristics (Gscs) for calculating the Adjustment Factor Value (VAF) and applying it to the Adjusted Function Point Count (Unadjusted FP Count) to obtain the Adjusted Function Point Count (Adjusted FP Count))". As many of the Gscs are super subjective, you assign to them the value they well understand in order to get the final fat they want.

  • Excellent response, +1.

6

Software estimation is critical to any project. Cost, effort and time estimates are usually demanded by customers and the project manager needs to have a basis for planning and making decisions throughout the project. Estimation also contributes to a greater understanding of the problem and provides a horizon for the completion of the project or iteration.

Planning requires you to make an initial commitment, even if it later turns out to be wrong. Whenever estimates are made one should look to the future and accept some degree of uncertainty.

...our estimation techniques are very poorly developed. And, more still reflect a somewhat false assumption that everything will be fine...as we are not sure about our estimates, software managers often do not have the necessary firmness to make people wait for a good product (Brooks)

An estimate is nothing more than an estimate. Mathematical processes may give the false impression of veracity, but the basis is subjectivity based on an abstract definition of the system.

Estimating is to provide a vision of the project clear enough that the management can make good decisions on how to manage the project for that it achieves its goals (Mcconnell)

Uncertainty in the estimate. Basically, know what has to be done, otherwise your estimate will probably be wrong.

Cone da Incerteza

At the beginning of the project the uncertainty reaches its peak, but decreases as the tasks are completed. The earlier the estimation occurs, the worse the estimates will be. Early estimation of all software tends to generate worse estimates than in cases where it is done at later stages of the project.

While it is often necessary to estimate all software, it is important to redo the estimation when getting an up-to-date position on the development stage. Software is changeable, requirements change over time.

Some Pet Techniques and Models:

Planning Poker

Some agile processes, such as Scrum, see software design as a game. In this line, some authors consider the best way to estimate a kind of poker with backlog user stories (Cohn, 2006, p. 55). In Planning Poker, all members of the development team come together. First, each member receives cards. Each chart contains a story point scale value defined for the project. For each user story, members secretly choose the card with the value they consider to be the size of that story. So they all show their cards at the same time. When there is consensus, the estimate would be reliable. If one or more values are discrepant, the members discuss among themselves why the user story would be more or less complex. After entering a consensus, a new round of cards is held. This is done until everyone agrees with the estimate. The "Gilites" claim that this technique has worked well for the following reasons (Cohn, 2006, p. 59):

• those who know how to do the job are the ones who make the estimates;

• dialogue makes estimators have to justify their estimates, so they think about what they are doing;

• group discussion, according to some studies, leads to better estimates.

Planning Poker is usually done more intensively, but less detailed, at the beginning of the project, in order to generate the initial estimates necessary for the overall planning and the number of iterations. At the beginning of each iteration, it is suggested to take something around an hour to detail the estimates of the user stories that will be implemented, which at this point are divided into tasks. Estimation time varies according to iteration size.

Object-oriented pet

Object-oriented systems can be estimated through object-oriented modeling, such as UML (Unified Modeling Language). Values are assigned to each object of the system and thus a general estimate can be arrived at. Some measures suggested by Pressman (2009, p. 506) are:

• number of scripts for user-system interaction scenarios;

• number of important and system independent classes;

• number of support classes not related to the domain (database, user interface);

• number of support classes related to the domain;

• number of subsystems.

Estimation oriented to use cases

It is possible to use use use cases to estimate a software. Estimates of each use case would make it possible to plan the project with a whole.

However, as use cases are very abstract and different people work at various levels of abstraction. There are no parameters to define a standard measure for the effort required to implement a given use case (Pressman, 2009, p. 507). As a result, the estimation with cases of use is not recommended, being little used.

You can go much deeper into this universe, I recommend:

The blog State of the art (much has been taken from her)

Software Engineering - 8th Edition

Mythical Man Month

Scrum In Action ....

6

Just do not give -1 your question because it is worth thousands of dollars for the software industry :-) and certainly the answers you read above are compilations of what is taught in Universities in the disciplines of Software Engineering. But now, I’m gonna take off my teacher hat and put on the pro hat to answer. Using my own experience to answer and not quotations from what I no longer use and one day worked well, but today for my projects and customer profiles no longer work.

If this subject were easy it would not be necessary so many books on Software Engineering that is not Engineering (as we know). Just as I do not like to call a method what does not have well defined and predictable behaviour and the possibility of always having the same results if applied under certain conditions. Like Fred says. Brooks: "there’s no silver bullet". But one thing I like very much to defend is the famous triangle of the PMI: term, cost and effort that are variables strongly coupled to the requirements. Simple and easy to understand: it will affect one or more of these variables. Example: Shortened the deadline will have to cut requirements. Increased scope? Will stretch the deadline by effort (and here comes the classic mistake: increase the team have no problems with deadline - Mongolian horde).

If you are a mathematician or know the methods of linear programming as well as Simplex, you would understand that, for complex problems, there are possible solutions to arrive at what is called an optimal solution (not said correct). I assure you, there is no complete single method capable of ascertaining for sure what you want, because they are ideas, not formal methods. Work with interpretation of requirements.

If you’re going to use an estimate to put a price on your work, I say forget it. Extremely fallible because they estimate requirements that cannot be frozen throughout the project. They change. That’s why Sfw Engineering is not Engineering. No use. Appreciate the commitment effort, never just considering the scope of the frozen requirements. Large software factories mix approaches to align the project price by adjusting according to the term / tempering effort with profit and risk analysis.

There are companies selling sprints. I find this approach very interesting. They don’t give a final price of what they don’t see or what can change a lot. It sounds surreal but there are customers mature enough to understand that this is an interesting and functional model. For your case, to be practical estimate your effort month what you can deliver this month and sell the sprint based on your cost/profit. Give an approximate idea of the amount of sprints and ready. Forget unit hours, man/month (in your situation) to estimate term. I am not going to suggest a complex thing to be applied in a software factory by several professionals since it will work alone in this project and there is no way to have a Q&A area to ensure success (in short).

Always remember that quality does not come from correct compliance with methods. It goes far beyond that. It is not because we adopt a method or model A or B that we will have a quality assurance in estimating, developing or delivering.

I hope I’ve helped you find a place to start.

  • Not all answers are compilations of what is taught in universities. Read my answer to the end and note that yours here comes to corroborate what I have already said there.

  • @Caffé said that the answers are, not only said his. plural and not necessarily only his article. I said this in my reply?

  • And did I say that you said it was just mine? :D

  • @Caffé, I need to drink coffee kkkkkkkkkkkkkkkk. What would make you happy, delete my answer? I can do it without problem no friend! -D

  • 1

    There is no way I would like to see this answer deleted. I find it excellent and I think it adds value.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.