Time estimation in software development is probably the most difficult part for me when it comes to starting projects independently.
I studied this subject back in university but the classes were never accurate enough to reflex real world examples and I just can blame the teacher for using a 20 years old book talking about failures of WINWORD 1.0, IBM OS/2 and what the hell. The tools has changed, the people has changed and the programming paradigms too. I don’t know if I was doing something wrong but I never found useful any of these so called “techniques” to estimate cost in building software.
Every time a potential client comes to me asking for a solution I analyse the complexity of the project, the possible time I would have to spend in order to get it done, the time he’s giving me and the situation of the marketplace for the kind of software he’s asking for. Clients always come with “I have this problem, I need it fixed, how much for that?”, and they expect an answer immediately and you just have no time to open your spreadsheet and fill it with the variables.
All the techniques I learned at university doesn’t work as I expected. They are just too old or were designed for major software companies with dozens of developers and not for the rest of the people working independently or with a team of 2 or 3 people as much.
My algorithm has some failures. The client sometimes makes last time changes and since a commitment contract was not signed and was all verbally agreed, you can’t say no because you won’t get paid. It is almost a 100% sure that if you, an independent software developer living at Paraguay, try to make your client sign an agreement paper, he will run away :D.
I have a full time job but I also work as an external consultant in my spare time and I have to deal with these kind of situations very often.