I think the difficulty in software comes from the fact that it’s very hard (impossible?) to provide estimates because you never know what problems you’ll run into until you do. And so how can you tell “project will take 8 weeks, times weekly rate, for a total cost of X” under these conditions?
A project can have fixed time and cost, but you won't know what the results will be. Hopefully you can define the project so that complete failure is highly improbable.