En su contrato, especifique una tarifa por hora y realice un seguimiento de su tiempo. Cuando le dé el precio a su cliente, especifique que se trata de una estimación y que el resultado real puede ser menor o mayor.
Mantenga al cliente actualizado sobre el progreso, y cuando inevitablemente haga sugerencias, simplemente puede decirle el tiempo que le llevará (si el cambio está fuera de las especificaciones originales) y él puede decidir si el cambio vale la pena. Por lo tanto, solo se agregarán los cambios importantes para él.
Yo personalmente cubriría los errores aceptables frente a los inaceptables (soporte pagado versus soporte gratuito) en el contrato, y de esa manera al menos tiene algo por escrito desde el principio. Sin duda se preguntará por qué debería necesitar esa cláusula, así que sea sincero y explique que si sale una nueva actualización del sistema operativo que rompe algo, eso no es soporte gratuito. Sin embargo, los errores en su código de acuerdo con la especificación original en las plataformas especificadas estarían cubiertos.
Sin embargo, debo mencionar que solo he realizado trabajos de TI independientes en lugar de programar. Esto podría asustar a los clientes, pero solo asegúrese de que su trabajo se venda solo, sea más profesional, extrovertido y útil que el resto, y sea sincero con sus razones para tener un contrato más estricto.
Además, un cliente que no aceptará esa cláusula es muy probablemente un mal cliente.