The course of a software project cannot be planned very far into the future. First, the business
environment is likely to change, causing the requirements to shift. Second, once they see the system
start to function, customers are likely to alter the requirements. Finally, even if we know what the
requirements are and are sure that they won't change, we are not very good at estimating how long
it will take to develop them.