What are your obligations when charging by the hour vs charging by project?
Essenzialmente la stessa cosa. Sii professionale.
If you agree to take on a project, give a rough estimate that it might take 10 days for you to work on and charge £X per hour - are you obligated to work for free after those 10 days are up and you have still not managed to complete your project due to unanticipated issues?
No - finché dura circa 10 giorni, allora stai bene. Definirei circa 10 giorni come ovunque tra 50 e 120 ore ai bordi estremi. Qualsiasi cosa per più di 120 ore (un superamento del 50%) è praticamente impossibile.
Sebbene "problemi inaspettati" lasciano molta imprecisione. Professionisti esperti anticipano molti più problemi rispetto ai nuovi sviluppatori. Tuttavia, se il cliente sa che sei un nuovo sviluppatore (e sai che stanno ottenendo uno sconto significativo a causa di esso), allora c'è un po 'di spazio di manovra qui.
What if you have delivered the project but bugs are found - should you fix these bugs for free if the 10 days are up or should you charge your client?
Bugs? Sì, dovresti correggerli gratuitamente. Non ti viene pagato per 10 giorni per produrre codice non funzionante.
Ora, di nuovo, "bug" è un po 'vago. Ci sono bug di tipo show-stopper (come, il programma non viene eseguito - ovviamente la tua colpa) e bug di bordo (il programma taglia il testo su Windows localizzato in turco con IME cinese abilitato - non proprio ragionevole). La maggior parte cade da qualche parte nel mezzo, ma l'onere della prova è su di te.
Ci sono anche bug delle specifiche: questi sono i più difficili. Dovrai usare il tuo giudizio per decidere se avresti dovuto ragionevolmente prevedere, mettere in discussione o sottintendere il cambiamento delle specifiche. Ancora una volta, ti metterei l'onere della prova.
Per un progetto di 10 giorni (80 ore) con uno sviluppatore verde, altre 10 - 15 ore di correzioni di bug non sarebbero chiedere troppo. In ogni caso, proverei a calcolare il pagamento - anche se probabilmente farei altre 5 o 10 ore gratuitamente prima di licenziare il cliente.
Also, for the above project, what should be the result when you start on the project, but after the 10 days for whatever reason you have to give up and tell your client that you cannot do it anymore? I realise that this does nothing to build your reputation and relationship with the client but are you obligated to pay back the money paid to you or do you just deliver the half/nearly completed source code and help them find someone else to complete it?
Restituisci i soldi. Se non riesci a finire il progetto, è probabile che non puoi giudicare completato a metà. Se il cliente ti ha assunto, è ancora più probabile che loro non possano giudicare completati a metà. Se riesci a trovare qualcun altro per finirlo, puoi subappaltarlo - la differenza in ciò che ti fanno pagare e ciò che hai già fatto è il tuo profitto (o perdita).
Alla fine, è spesso meglio piegarsi al cliente e calcolarlo come una lezione appresa. Dopo un po ', sarai in grado di individuare i "clienti problematici" ed evitarli (o ricaricarli) all'inizio. Imparerai anche a stimare un po 'meglio, a costruire costi di bugfix sui tuoi prezzi, ecc.
Come sviluppatore studente, hai un margine di manovra. Nessuno è in grado di farti causa per il costo di un progetto di 10 giorni. Non avrai mai più affari da quel cliente (o dai suoi amici) di nuovo - ma, dal momento che hanno ingaggiato uno sviluppatore studente, è probabile che vogliono solo manodopera a basso costo e non capiscono quanto costa effettivamente assumere un buon sviluppatore comunque. Non stai perdendo molto in futuro se non i mal di testa, anche se a costo di una coscienza pulita.
Il mio consiglio? Finiscila - ti sentirai meglio, il cliente si sentirà meglio, e sarai uno sviluppatore e un uomo d'affari migliori per questo. Non è che valga la pena di lavorare per anni - e hai tutti i tuoi amici su Stackoverflow e Stackexchange per aiutarti. ;)