I've got a client on a shoestring budget.<p>I told them... listen, we can get real expensive, really fast. So if you help me, I can help you. They build specs in powerpoint, excel, paper etc. We discuss them (in person typically at a scheduled meeting where we discuss these features as well as business consulting about where to take the business, how to grow it, what features have been requested, what to add, etc.). My team then develops what they want.<p>The customer then QAs the software to make sure it's good. This saves them a TON of money.<p>They're happy, I've got an easy client to work with and my devs enjoy working on the project because the requirements are well thought out. My client is happy because they're getting a good value (both in terms of less $ on dev and the money they spend on business consulting is put to better use since they've done their homework).<p>Contrast this with another of my clients (with a larger, but dwindling budget). They typically say "go develop x" with no real guidance. We develop X, but once they see it they say "that's not what we wanted." After a few cycles of this, and frustration from both sides, we simply now say "you've thought about X, why not tell us what you've got in mind so that we build the right thing first?" It's made things move a lot smoother... enough so that this client is now extremely aggressive in their release cycling (and it feels like a hamster wheel)... which we're working on... (including charging 2x for forced weekend work - "It's Friday at 3pm. If this must be deployed Monday, then we're going to have to work over the weekend and that is at $xxx rate." We've not worked weekends for them since :)