Application Kata: Software Forecasting
Write an application to help with software estimation forecasting. Yes, forecasting instead of estimation. Because forecasting shifts the burden from the developer to management.

Usually developers are asked by management how they think a set of tasks (future tasks) is going to take (effort). Developers then do whatever they need to do and in the end come up with a figure - which most likely is far off from what it's gonna take in the end.

This approach is accepted despite its notoriously bad results. But not only are the results bad and therefore lead to much conflict and stress and wasted money, to produce them is costing a considerable amount of time in the first place. That time is also wasted.

The application to write is supposed to help in this situation. It takes the burden of estimation off developers. There is no more estimation according to some gut feeling. Instead historical data is used to make a forecast. And that can be done any time by management itself. Plus, the forecast provides a range of values labeled with a risk. So whoever needs to look into the future can do so according to his certainty need.

Historical data

Historical data of finished tasks has to be delivered to the application as a CSV file of this format:

3;reporting
4;ui
10;persistence,bugfix
6;reporting,ui
2;bugfix

Each line contains the effort a task took to get accomplished. The number is an integer and its unit depends on the user. It could be days, hours, minutes, whatever - as long as the unit is the same for all data.

Each effort can optionally be tagged with one or more categories it belongs to.

Forecast request

A forecast is requested by entering a number of future tasks that need to be done. Each task can be labeled with a set of categories found in the historical data, e.g.

ui
bugfix
reporting
persistence,bugfix

If more than one future task belongs to the same category mix then that could be stated with a multiplier, e.g.

2 * ui
3 * bugfix, ui

How the future tasks are entered is up you. Choose a console or GUI or web user interface as you like.

The point of this approach is to not burden developers with estimations. Rather they should only be asked to assign future tasks to categories. That should be very easy to do.

Forecasting by simulation

Given a set of future tasks and a long list of historical data a forecast is calculated by simulating the accomplishment of the future tasks by picking their efforts from the historical data. Example:

Historical data:
1;x
2;y
3;x,y
4
5;z
6;x
7
8;y
9;y,x