Firstly, in the same way that software is built from pre-existing software routines, so should the bulk of a contract be built from a library of pre-existing clauses. And the reasoning behind this approach is the same for software and standard contracts: it saves time and reduces errors.
Secondly, like software, standard contracts have bugs. For contracts, bugs are things that don’t produce the right end-result or which cause too much customer friction. Sometimes the bug was there from the start (the contract was not developed as well as it should have been), sometimes the bug arises because the market has changed and expectations are now different.
The important thing to recognise is that for a standard form contract to do its job well, it can’t be static. Like software, it needs new releases in response to the business’ experience and in response to user demands.