I did my second organization wide (only 8 users) migration from Exchange to Google Apps over the weekend, and I thought I'd just summarize what I saw what I think are best practices for a migration.
1) Check with necessary staff to make sure you have a complete list of all mailboxes, aliases, and distribution lists you need.
2) Create all accounts before any other processes.
3) investigate the size of mailboxes you are migrating. One of the mailboxes I was migrating was 11.5 GB (he intentionally didn't want it to archive). It took 70 hours to download and upload using my home FIOS. In my case, I would rather have gotten his Exchange data on the LAN instead of the 33 hours it took to download the data from the server. I'd say it's pretty important to plan bandwidth utilization as it's very easy to choke up the bandwidth with a large upload. Ideally, you're uploading one mailbox at a time over the fastest upstream internet connection you have available to you.
4) alter the MX records (ideally on a Friday night)
5) wait at least 12 hours for DNS records to change so all mailboxes on the Exchange server are static and are not longer receiving an email
6) begin uploading data from the fastest internet connection possible - or multiple connections - if you can - I've had one instance where I've had trouble with the Google Sync for Outlook - https://tools.google.com/dlpage/gappssync - though I still think it's the preferred tool. Another option for uploading mail, which doens't seem any quicker and still allows you to upload only one mailbox at a time is the Google Apps Migration for Microsoft Outlook tool here - http://tools.google.com/dlpage/outlookmigration. The problem I had with the migration for Outlook tool was that it wasn't naming the labels/folders correctly. If you had a label folder of Inbox/General - it showed up as PSTNAME/Inbox/General and not as a subfolder of inbox. Strange - though easily fixed. I guess the real difference between the two is whether an admin is doing it or if it's being done on the user's computer. On an admin's computer, he/she can use the Google migration tool to upload a PST file while he/she has his own Outlook open. For a user on his/her computer, you'd want Google Apps sync so Outlook would be usable while the data is uploading. Though from personal experience, you don't want people uploading data during the daytime. It can completely choke off your upstream bandwidth.
7) emulate functionality as best you can of Outlook using these options:
a) enable iphones to use ActiveSync -> as a Google admin -> Service Settings -> Mobile -> Turn on Google Sync
a) set up iphones using this link for instructions - http://www.google.com%2fsupport%2fmobile%2fbin%2fanswer.py%3fanswer%3d138740%26topic%3d14252
c) enable calendar sharing using these instructions - http://mail.google.com/support/a/bin/answer.py?hl=en&answer=170958
d) enable users to allow delegation of their accounts - as a Google admin -> Service Settings -> Email -> Let users delegate access to their mailbox to others in the domain. (of note - this seems to be available in the premier version but not the education edition as of 11/15/10)
e) tell users how to delegate their mailboes using these instructions - http://mail.google.com/support/bin/answer.py?answer=170957
8) make sure each computer is set up properly with Outlook configured for the google apps account (using Google Apps Sync at https://tools.google.com/dlpage/gappssync). Set it up as the default profile and also rename the NK2 file so that the autofill address book is retained.
a) be aware that the autofill address book will contain some old Exchange specific addresses that will fail when sending from google apps. As such, it's probably best practice to manually open a new message on the computer and delete each user on the Exchange/Google server since each entry was probably an X400 address and wouldn't work on the Google Apps server and will just cause confusion.