All seasoned programmers have lived through and can tell the tale of the lost project. Some of these projects were conscious decisions while others were secret skunk projects. They all suffered from the terminal affliction of "uncertainty" and its polarizing effects. Although each project varies, most follow the same path. In the early stages, knowledge is sparse, estimates are rough, and there is a large amount of uncertainty. As the project progresses, additional research, feedback, and refinement helps reduce the project's risks and uncertainty. In project management this is known as the Cone of Uncertainty. Construx has an excellent diagram illustrating the cone.
Unfortunately, many projects suffer from a lack of respect for uncertainty. Most projects perform fast, rudimentary estimating of tasks or features. This is typically a one time event and is perceived as a necessary evil as it takes away from development time. This is the wrong mindset as the cone only reduces with effort. Projects must be actively and continuously groomed to reduce uncertainty. Each additional review of the process brings with it new insights and provides further refinement. Sometimes these refinements bring to life additional tasks, reduce task load, or help to further outline a project's scope. In the development world, the phrase scope creep is synonymous with frustration and other negative emotions. This can be easily avoided with a continuous drive toward the accuracy of a project's estimates.
Programming methodologies such as Agile's Scrum provides an infrastructure for maintaining proper project focus. Features and ideas are placed in a larger product backlog, then proceed to a short iteration where work is completed. Recurring meetings are held to groom the estimates in the product backlog as new information arrives, feedback is received, or requirements change. It is encouraged to estimate as a team to further vet issues, concerns, and questions. Additionally, estimating is encouraged through numbering/sizing methods such as t-shirt sizes or the Fibonacci sequence. These methods allow for relative "person independent" estimating. This is an excellent framework for any project, Agile or otherwise.
The Cone of Uncertainty is another excellent tool in any developer's toolbox. It can be very helpful in detailing the current status of a project. The simple action of drawing the cone alone can be enough communication to project veterans. For others, it provides an opportunity to educate.