In addition to the good information Slaven has provided, I can say that one of the problems with viewstate currently is that if anything on the page needs it enabled it has to be enabled for the whole page, though you can disable it on individual controls if you know thay don't need it. This is going to be improved when 4.0 .NET ships, it will be possible to turn it off at the page and turn it on case by case on controls as needed which is the opposite of the way it is now and will be much better.
A good while back, like before MS AJAX, I had things optimised in mojoPortal by turning it off at the page on the main content system page Default.aspx, but as more and more features begin to use ajax it was pretty much always needed so it is now enabled by default. If you have events you need to respond to on grids, repeaters, calendars, then you have to enable viewstate for those events to work. Some of the fancier widgets like calendar produce a lot of viewstate. Typically you will see more viewstate in edit pages that have bound controls that need to postback.
Some pages could be optimised further to reduce viewstate by going through and setting EnabledViewSate="false" on controls that don't need it. I've already done this on some pages where I've noticed very large viewstate, but there are probaly more places it could be reduced a little with this technique. Even labels and literals produce viewstate if its not disabled on the control and is enabled on the page, so adding EnableViewState="false" on those is a good idea. Again, though, when 4.0 .NET comes out this won't be needed.
Another thing to know is that by default the viewstate would all be in one hidden field not broken up as it is in mojoPortal. We break it up by enabling ViewState chunking from web.config, on the <pages element in the system.web section you will see maxPageStateFieldLength="100" which sets the max length for any viewstate field and causes it to be brooken up into hidden fields not bigger than that. Though doing this actually increases the total amount of viewstate size because the additional hidden fields produce a little more markup each. The reason to use viewstate chunking is because some firewalls seem to think a page with huge hidden fields must be malicious content and also because some mobile devices have limits on the size of hidden fields.
Best,
Joe