How to estimate software development time

As was promised, this story is about honesty, courage and sailing dangerous waters.

Honesty is in making fair estimates with the risk of clients falling for a more pleasing estimation. Courage is in facing rejection followed by the struggle to prove your point. Dangerous waters are the pipe-dream estimates attracting inexperienced companies seeking prompt and efficient outcome.