Never ever breach trust of the client as a freelance software developer.
Recently I got my house's bathroom redone as the pipes had developed leakages. In India you don't get a trained and certified plumbing professional as they all come in the category of labourers with basic or no formal education. They learn their trade on the job and start their practice. Sometimes, they work as a freelancer or under some bigger contractor.
While dealing with him, I learnt a lot about ethics and why the clients are apprehensive about your pricing or you in general. He did a good job but there were lot of problems in the way he made money.
Problem 1: Breach of Trust
He did not tell us the correct material costs. He would get all the material as none of my family members had time and we were ok to pay extra for this service provided he tells the correct material cost. But he did not and inflated the costs. When I found out about correct cost, I was not happy as he lied to us.
Outcome: He lost my trust and probably next time I will not hire him or if I have to, I will buy the materials on my own.
Learning: Never ever break the trust of the client. If you want to charge for extra work, always tell the client upfront. Because if you don't and the client finds out later, it will be a breach of trust and you will not get more work from that client.
What I do: Because of this reason I always ask my clients to pay for the server or domains directly to the company and not me.
Problem 2: Not completing the work on time
He did not complete the work on time. He kept extending the work and giving execuses like not well or had some work but he wanted the cost of labour to be paid on time. I asked him to complete the work first when I saw this lacklustre attitude, he kept on saying I will complete the work tomorrow. But tomorrow never came for quite some time.
Outcome: I had to reprimand him and withhold his money as a result.
Learning: Never ever make excuses. If there is a genuine delay, inform promptly. Keep communicating about the status of the project so that the client is at ease and sees that work is being done.
What I do: I keep my clients informed regularly about the project status and if there is an increase in scope or there is a delay, I tell them in advance.
Problem 3: Not keeping records for the work done and payment received
Although I kept the records of payment and work done, he did not. This led to lot of confusion and discussions. When I confronted him about the lack of records, he did not have anything to say.
Outcome: Time wastage and bad temper.
Learning: Always keep record of work done and payments. And refer to them in case of doubts.
What I do: Before starting the project, I make sure that there is a written agreement signed with scope of work and payment schedule included. This works as a record for both parties and one can refer anytime there is confusion. Also, all the changes or additions in work is communicated via email so that there is a record.
As a freelancer it is very easy to become undisciplined but discipline, commitment and integrity is what sets professionals apart from fly by night operators. If you hire me, I will never take things for granted and you will gain a partner for life.