Straight to the point: iOS 4 ruins the perfectly good iPhone 3G and 3GS by killing performance. I can't understand why Apple allowed this to happen. Of course “Antennagate” got all the press, but the WSJ reports that Apple is finally investigating the performance issue on older hardware.
I know the problem is wide-spread. The day iOS 4.0 came out, my brother connected his 3GS to iTunes which helpfully steered him into an upgrade that killed his performance. He immediately called to warn me. Too late... as a developer I'd already upgraded (though I had my concerns). Inquires at my local Apple store came with unofficial acknowledgement that the loss of performance was, ahem, not unique and that a non-sanctioned downgrade to iOS 3.1.3 would be helpful.
Though I was patiently waiting for an upgrade that would fix the performance issue, it still hasn't come (4.0.1 wasn't it). Thankfully going through a few technical machinations allowed my to downgrade to 3.1.3 from a previous backup image, but is isn't trivial nor for the faint of heart. If you need to go this route, search Google for "ios+3.1.3+downgrade" (without the quotes).