Try not to accept a dependency unless it is fully justified. These will unfold only as the development proceeds. The key to accommodating unknowns is being able to admit that you don't know. Guard against either individuals or teams pretending they know all the answers and try to breed a respect for lucid ignorance. Recognize that the real goal on a software development project is not to have the correct plan in advance, but to make the right decisions every day, as the unknowns become known.
Software requires intellectual prowess throughout the development phase and flexibility is the key.
This is where metrics and risk management come into play. Then development practices should be modified if metric results suggest that a process improvement is required. This model estimates the cost of software projects and has good predictive capabilities provided that environmental factors are carefully estimated and applied to the model. Plot actual task progress against planned progress for all major and sub tasks. This tool measures the complexity of single code modules.