There are certain things that should set alarm bells going from the beginning. A client being grumpy about costs before anything's agreed. Integrating with someone else's opaque code. Someone non-technical telling you how long it takes to code something. Trust your gut; if something worries you and you can't tie down the details, listen to the alarm bells.