I prefer to have a single "Project" form with lots of display logic that will show or hide items depending on some choices "what type of project is it?". For me, this makes more sense than having people have to remember to add several different forms. Anytime a human has to make a choice, it's inviting a mistake.
Having said all that, a complicated form is not without it's drawbacks, maintenance being the preeminent one.
I have a few rules regarding form creation:
1. Don't forget that every custom field is an attribute added to the database. The more fields you have, the more complex and unwieldy your database is.
2. Scrutinise every field request.
3. Avoid multi-part questions; "yes, no, other. Then a second field for the "other".
4. Field names:
• Don't duplicate built-in field names.
• Field names should be as short as possible.
• If it's a multi-use field, name it vaguely like "Total Amount". If it's specific use, name it concisely like "Total Days Off".
5. If it's multi-selection, use checkboxes. If single choice only, use Radio Buttons.
6. Use a "Deprecated Fields" section that is hidden from all but admins. This way you can hide deprecated fields without deleting them from historical objects.
7. Always check to see if you already have a field that can be used instead of creating a new one.
That's all I can think of off the top of my head.
As far as external sources go, that's sometimes a maintenance drain. You have to keep up with all the changes and updates on the source database. For some sources it's easy but for some, like Facebook, they change everything all the time with no notice and it constantly breaks your apps and field mapping. I think you have to consider the source when deciding.