So you've decided to upgrade Sitecore because you want to take advantage of the latest and greatest software or maybe the support for your current build is expiring or has expired. Before you get started, you need to know what requires special consideration in your build that may impact your upgrade path.
We are currently getting a lot of requests to upgrade sites from Sitecore 6.x to 7 or newer as the Sitecore support for 6.x builds comes to an end. If you are using Lucene, there was a significant change in the API in Sitecore 7 that will likely require you to refactor your code.
If your Sitecore site is integrated with another system you need to understand how it will be impacted by upgrading Sitecore. For example, if you are using Coveo, do you need to upgrade it at the same time.
Here is a link to Sitecore's compatibility table. Review it for the version of Sitecore you are currently running and the version you want to run to make sure there are no surprises.
Hardware and Software Requirements
If your intention is to run the upgraded instance on the same hardware as before, be sure to check Sitecore's hardware requirements as they've likely evolved over time. Additionally, changes in your site traffic (e.g. gaining traffic over time) should also be an input into you hardware specs.
Additionally, depending on the versions of Sitecore you are jumping to, there may be additional software (e.g. Mongo, Solr) and hardware requirements depending on your configuration and your desire to use xDB.
Modules are Sitecore add-ons that extend or create additional Sitecore functionality. You can download them from Sitecore's site, the Sitecore Marketplace, and even third party sites. Modules typically undergo their own upgrade path, separate, but in tandem with the Sitecore upgrade. You will need to understand if the module is supported in the new Sitecore version and what its upgrade path entails.
If you've customized Sitecore in any way (e.g. overriding interfaces, changing out-of-the-box Sitecore templates, etc.) you will want to understand how these will be impacted with an upgrade. Are they still relevant? Do code changes need to take place?
Is your build well organized into sub folders so you can easily identify those elements that were uniquely created for your build?
Are you using Sitecore patch files rather than editing the web.config directly? A clean web.config makes upgrading easier since custom entries are housed separately. It is common for Sitecore upgrades to change the web.config.