There are a number of factors which apply to software estimation which often don't apply to estimating other projects:
- Custom (new) requirements.
- Changing requirements.
- Unclear project scope.
- New tools and techniques.
- Lack of consistent methodology.
- Interchanging skilled resources into areas outside their expertise.
- High variance in productivity by individuals.
- Starting the project without required tools.
While most projects will have some degree of these factors, software projects often have a high degree of many of these factors.
Most organizations require more time to do anything which is custom. Those that can handle custom requirements easily still limit the customization within a limited scope. Customizations outside the acceptable scope will significantly increase time required to do the customization.
Changing requirements require rework. In some cases work already done needs to be undone. Consider the cost of rearranging rooms in a house at various points in construction.
Project scope may be unclear or changing. Changes in scope will significantly alter the cost. If I ask you to estimate the cost of a truck you might suggest 20 to 30 thousand dollars. What happens to the the estimate if what I want is a semi truck and trailer.
Software tools, languages, and techniques are still evolving rapidly. The development team will likely have to learn as they go. This learning curve will alter the speed at which work is done. Some estimates suggest it takes 10,000 hours to become fully proficient. Estimates for Python suggest that it takes months to become fully proficient.
Many projects have little in the way of methodology. Even where this is a methodology, it may be poorly implemented or changing. As a result the team may be continuously learning how to do things. This will reduce performance. Recent reports indicate that using any methodology will improve productivity.
Software developers have skill sets which are not interchangeable. Many organizations consider one developer is a the same as another. Treating developers as interchangeable will result in developers working on task outside their skill set with resulting performance variations. Consider the impact on building a house if all you have are plumber and electricians.
Research on programmer productivity shows some programmers may be as much as 26 times more productive as others. This level of productivity variance can have a significant impact on estimates.
Many projects start without some of the basic tools required. Both hardware and software are often required to get a project started. Selection and setup of these tools may require skills not available with the project team. Organizations with a standard set of tools, and project setup processes are likely to see less variance in estimates.