When I upgraded to the iPhone 3G, my biggest complaint was its battery life. What I forgot to add was that a few days after I wrote that review, it was pointed out to me that the network/radio usage of the iPhone's push synchronization accounts for a significant proportion of its standby power usage. So I turned it off, and have been far happier with the phone since.
- Settings → Fetch New Data
- Disable “Push”
- Fetch Hourly
If you really, absolutely need your calendars and contacts to sync immediately, you can always force a manual sync. Otherwise, for me this makes the difference between having to charge more than once a day, and having to charge every other day.
Honestly, I think Apple should ship in this configuration by default. I dare say the number of people annoyed by the short battery life dwarfs the number of people who would even notice their calendars updated more than once an hour.
Bonus Tip
If you know you're going to be away from your charger for a couple of days, turn off the 3G radio in Settings → General → Network. This will (obviously) slow down your data connection significantly, but the effect on battery life is substantial and under the circumstances you'd probably rather have a working phone, right?