I have been having this experience for sometime now, when a client needs a software product and contacts me, the client usually wants to know the time frame on which this product will be accomplished. Usually as a software developer I might not be able to fully determine how long it will take me to finish the job since I may encounter an error that may take me weeks (sometimes months) to solve.
If I tell the client the expected time frame based on my analysis i.e. no matter how bad it gets, I should be able to finish the job in lets say 6 months maximum (for example). My client usually says NO! six months is too long, I need it urgently, maximum should be one month. If I refuse to accept the time frame given by the client he may give the contract to another developer who accepts the short time frame of the client and yet does not execute the job in time.
On the other hand, if I accept the short time frame of the client and get the contract (knowing fully well that it will be impossible to finish it in time), I will only succeed in getting the contract and then later come up with excuses as to why the job is not completed in time. This now seems to be a norm, but deep down I feel I am learning how to be dishonest in order to get contracts. So is it a bad thing or is it just a business strategy?