Over the years I have compiled a log of project metadata. Nowadays I use it to forecast and plan each project task.
The key part is having the task to time forecast for your overall environment (people, company culture, country, …) .<p>Every project starts with a drilldown of requirements to tasks (just name and description), the more detailed the better. For each task I add a subjective complexity. The mapping of complexity to actual time is based on previous projects metadata.<p>I try to add a task for each time-consuming effort, documentation, HW procurement, HW shipping, cabling, development, validation, acceptance tests, baby-sitting, billing.<p>The metadata is a living document, it adds more rows as the project progress.<p>For tracking the metadata, I use a Google Sheet for each project as a tracking project management. TODO file in steroids. There are two levels, one for the task and another for steps in the tasks.<p>Each of the rows have more or less following information.<p><pre><code> * id, name and description
* status
* owner
* area
* initial perceived complexity.
* final perceived complexity
* external perceived pressure
* dependencies
* total involved people
* initial estimated time
* dev starting time
* ending dev time
* real development time
* testing starting time
* test ending time
</code></pre>
The tracking is updated daily (last action before going home) or when a new task appears. It doesn’t take much time.<p>Once the initial per task forecast is done, I have also try to put the high level tasks and its dependencies in a classic Gantt waterfall (using projectlibre). The Gantt gives an initial idea of the time, but it has never been fully accurate, because as project evolves, there are always new and unexpected tasks.<p>Note that the pressure column in the list above, is one of the principal inputs to forecast, due to Parkinson's law.