I know it could be very different based on the situation, but for hosting a website with no plans to move the hosting server what is a good TTL to set on the DNS record?
I tend to leave it at Slicehost's default, 86,400 seconds (1 day). I drop it down to 10 minutes when I have a move pending and wait a day or two.
edit: These days (2016) I tend to keep it low - ~5 minutes.
The standards (written a long time ago in 1987) suggest 86,400 seconds (1 day) as the minimum default TTL.
It is important that TTLs are set to appropriate values. The TTL is the time (in seconds) that a resolver will use the data it got from your server before it asks your server again. If you set the value too low, your server will get loaded down with lots of repeat requests. If you set it too high, then information you change will not get distributed in a reasonable amount of time. If you leave the TTL field blank, it will default to what is specified in the SOA record for the zone.
Most host information does not change much over long time periods. A good way to set up your TTLs would be to set them at a high value, and then lower the value if you know a change will be coming soon. You might set most TTLs to anywhere between a day (86400) and a week (604800). Then, if you know some data will be changing in the near future, set the TTL for that RR down to a lower value (an hour to a day) until the change takes place, and then put it back up to its previous value.
Also, all RRs with the same name, class, and type should have the same TTL value.
See RFC 1033: http://tools.ietf.org/html/rfc1033
RFC 1912 (from 1996) suggests that 3 days may be more appropriate for
I have noticed it is becoming more fashionable to have shorter TTLs to be able to respond in emergencies (particularly within HA DNS environments) quicker.
I'd just leave it at the default set by your host, unless it's ridiculously high or low for some reason. Then if you ever do want to move bump it down to 20 minutes or so a couple of days before you plan to do the move.
4 hours should be just fine, providing an acceptable balance. That's what I use on most zones.
(note: this post applies to the TTL on the indidivual A/AAAA records, some other record types can have longer TTLs because they don't represent single points of failure in the same way).
You really need to think about this in terms of your disaster recovery plans. It's not about when you intend to move the site (for intentional moves you can reduce the TTL in the runup to the move). It's about when your host vanishes off the face of the internet or kicks you out for a TOS violation or kicks you out because they can't handle the DDOS that came your way.
If you don't care about your site being down for a day or so in those circumstances then go ahead and leave the TTL on it's one day default. If you have PI address space and BGP transit in multiple locations from multiple providers and intend to handle disaster recover at a BGP level then go ahead and leave it on it's one day default. On the other hand if you are using DNS as your mechnism of diveting your taffic to a failover site then you want a much shorter TTL, 5 minuites is quite a common value.