While the scope of your question is really too broad and many answers can fit to suit as needed, I would share a starting point specific to determine the need of site collection vs web application.
SharePoint Factors : As thanby added , A web application is generally a high level abstraction in the "arrangement of your portal sites". Generally they are defined to host large number of site collections. Web Application typically runs on their dedicated application pools and they should be really limited to as minimum as you can get. The reason is application pools are memory hungry and you certainly don't want your WFEs ending up consuming large amounts of RAM. So if you have 20 departments , you should not end up having 20 application pools. Thats the general idea.
Site Collections as the name says are designed to host large number of sites.
Your sites are designed to host large number of documents and items.
Said so , all content ultimately resides in a content database which is the most critical factor that comes into consideration for scaling up portal sites in SharePoint. So the question really is do you need separate content database per site collection or a single content database for all site collection.
Typically, 1 single web application and multiple large site collections mapped to their dedicated content database should suffice. Small set of site collections are mapped to a single content database.
Sizing factors :
Quick set of questions to decide whether you need a site collection for a department with a dedicated content database or single content database serving multiple department sites.
- No of users per department
- Estimate the volume documents to be uploaded and download per department
- Check for requirements pertaining to search , excel services , ECM and managed metadata.
- You may decide for an extended web application in case there is a need to connect partners to the same content using different authentication mechanisms.
Further you must read through the capacity planning section here to get some decent insights on this subject:-
SQL IO Optimization and Sizing for SharePoint 2010