Lavorare come libero professionista è un problema costante per me. Se mi capita di sbagliarmi, perdo soldi.
Il problema con la stima per la programmazione è precisamente quello che molte persone hanno identificato qui - sono le incognite e le trame che possono soffiare e stimare in terre mai più.
Quindi sempre più io quello che uso è un approccio duplice
A. Se il problema è in un dominio noto su un software che conosco perfettamente, eseguo una semplice dissoluzione mentale e fornisco una citazione. Spesso con i clienti chiedono un ballpark in anticipo quando discutono del progetto e con questi sono di solito felice di essere d'accordo - Sono sul lato della cautela, ma questa è solo un'esperienza basata su progetti precedenti.
B. Se il problema è un dominio sconosciuto. In questi casi cercherò di identificare quali sono i problemi chiave in anticipo e codificheremo un caso di test intorno a loro per "scoprire" il problema. A volte si può convincere il cliente a pagare per questo come studio di "fattibilità", ma anche se non si può mettere il tempo a disposizione e il problema è più economico che quotare il client X, trovarlo ha bisogno di nX tempo per risolverlo.
Identificare quali problemi rientrano in A o B, e identificare quali sono gli elementi chiave in B, è un'esperienza negativa, ma penso che la regola generale sia universalmente applicabile: isolare sempre i problemi cruciali in primo piano e affrontarli prima. Una volta che sono a conoscenza, le tecniche più convenzionali possono essere utilizzate con una certa sicurezza.