I have recently been working with upgrades from SPS2003 to MOSS2007 so I thought I would share my experiences with getting through it.
First of all, read the Upgrading to Office SharePoint Server 2007 guide from Microsoft. It explains the upgrade process and provides detailed steps for the various options. In addition, read Joel Oleson's posts on upgrading. There are loads of valuable information and references in those posts. All up, there's a fair bit to study but doing your homework will save you grief and time down the track.
The two most important things to take away from Joel's posts are how to use the PRESCAN.EXE tool and how to choose which upgrade method to use. The PRESCAN.EXE tool has to be run and all errors surfacing from the scan has to be addressed before proceeding with the upgrade. Carefully consider your choice of upgrade method. Unless you have a very good reason not to, you should be using the Gradual Upgrade approach (aka Side-by-Side Upgrade).
Once you've understood the upgrade process, it is pretty straight forward. But do perform a trial upgrade first in a test environment that emulates your production environment. This will allow you to identify potential problems and estimate how long it takes before moving on to the real thing. And while you're doing this trial upgrade, document it thoroughly. Your upgrade of the production environment should then go smoothly and with minimal downtime.
Where it gets complicated, is when you come across customised site definitions (the PRESCAN.EXE tool will identify those for you). For each customised site definition you need to carefully consider whether to keep it, migrate it or ditch it. Again, refer to Joel's posts for an understanding of the issues and resources about how to address them.
Upgrading a heavily customised environment certainly is more complicated than upgrading an environment with less customisations done to site definitions (server templates). I guess, it's a healthy reminder that you should never customise just for the sake of it. Always have good reasons for changing the default environment. There are scenarios where it's not worth customising the UI.
On a final note, make sure there is enough disk space for your databases. When using the Gradual Upgrade approach, SharePoint needs space for the database with the original content, the database with the upgraded content and an intermeditate database used during the upgrade process. In total you need space available for at least three times the size of your original content. Trust me, it's no fun to have a four-hour upgrade job failing in the last hour because of a lack of disk space.