A new project is thought up in the mind of a project manager who wasn't good enough to write real code. Ironically they get to decide what code you should write. It is half baked and ambiguous, but they always ask, "what is the LOE for this". LOE stand for level of effort, they want you to give them a deadline for when you can complete this fuzzy idea. To give you an idea of how insane these ideas can be, I was once asked to build something "like itunes". "How long do you think that will take you?".
Most peoples first thought is that the idea shouldn't be half baked, but this isn't possible. The time it would take to work out all the details is nearly as large as the time it takes to write the code. It makes much more sense to start writing the code and let the details reveal themselves as you run into them. It will nearly halve the cost of the project, but herein lies the dilema. It's impossible to give an accurate estimate if you do this, but they expect one. They may even say that the deadline isn't important, they just need something for the higher ups. This is a lie, if you miss the deadline they will demand answers.
The most obvious choice is to guess, and then triple your guess. If you think it will take a week, tell them 3 weeks. The problem with this is they won't be happy with that deadline. They'll pressure you for a shorter one, and their first impression of you on this project will be negative and first impressions are important. But again, if you give a deadline and miss it, you'll catch shit for it.
The solution to this is to work for someone that understands this dilema, unfortunately most of us are not that fortunate. For us this is a riddle that will forever go unsolved.
Bill Gates can write code....maybe you can work for him ;P
I'm interested in learning how to do it myself......I've tried learning on two different occasions...both times I ran into similar problems......I followed the instructions to the letter, but for whatever reason it wouldn't work.....downloaded the program....the compiler....put in the code.....and no "hello world" shesh