I've been doing Flash for 9 years and I still find this a difficult thing to get right.
There is a balance of power between designers and developers, which will inevitably tip one way or the other.
If you work for a developer led studio, then you are lucky, as the designers will be instructed to make a design that fits your functionality. In Flex / MXML this is the only way to work.
If, on the other hand, you work in a graphic design/creative/advertising studio, you will be instructed to build whatever the designer puts together in PhotoShop, whether or not it is feasible to build within the time.
The key to getting around this is communication and education. Designers and design-focussed managers may not know what is involved in creating a particular piece of functionality, and if you explain to them why a particular thing is hard to do they might be persuaded to go and rethink their design. On the other hand, they may well think you're just a whiner! It never feels good when you have to tell someone "sorry, I can't really do that" when you know that you could make it work, given a few late nights!
As well as the things you and others have already noted, like using FlashDevelop and external AS classes, here's some other things I recommend:
- Start with a site map / wireframe that both the developers and designers agree to.
- Load all your text from XML into dynamic text fields, and make sure your buttons etc are designed to expand to fit content
- Make sure your designers have some idea how to correctly cut-up graphics and lay them out in Flash. A developer shouldn't be messing about in PhotoShop when you're up against a deadline.
- Make sure you get all you graphics assets well before the deadline - inevitably there'll be things they've missed and things that need changing.
- Be firm and don't let your design team try to sneak in extra features at the last minute.
- Let the designers use the timeline for character animation etc, but for simple tweens use an ActionScript tweening engine.
Hope these tips are some use!