Aldila' dello sforzo e delle conoscenze richieste, c'e' da considerare tutto il discorso su cio' che succede dal momento in cui sei convinto di aver finito, e quello in cui hai veramente finito: testing, debugging, implementazione di caratteristiche non concordate precendentemente...
Ci sono diverse metriche in base alle quali calcolare la complessita' di un programma, e quindi il costo. Si basano sul numero di righe di codice(stimato alla meglio), sul numero di oggetti utilizzati (in fase di analisi si puo' avere gia' una buona stima), o altri parametri.
Ci sono libri interi sulla stima dei costi del software, e aziende che si occupano solo di questo!!!