Drupal 9 is planned to be released June 3, 2020

This will be the easiest major Drupal upgrade in a decade! Most of the upgrade steps involve making your Drupal 8 site all up to date with latest Drupal core and contributed projects. Contributed projects will gradually move to use the latest Drupal 8 APIs (which will still be included in Drupal 9) and remove deprecated APIs (which will be removed from Drupal 9). Dries Buytaert showed how the complete process looks like in his State of Drupal keynote at DrupalCon Amsterdam 2019. Here is the Drupal 9 part:

You can help with getting contributed projects ready as well as use the same tools to get your own custom code ready in time.

Get contributed projects ready

The key tools to use are:

Read more about Upgrade Status, drupal-check, DrupalCI testing and Drupal8-Rector. There are also specific suggestions for drupal.org maintainers about branching and which deprecated APIs to follow when.

Step by step guide:

Check project status

  1. Have a local environment set up with Drupal 8 and at least one of the upgrade_status, drupal-check or drupal8-rector tools.
  2. Either take your own drupal.org projects or look for projects with a Drupal 9 plan linked from their project page (which helps you contribute to the right outstanding tasks in a way that the maintainer can work with). If neither works out, look for issues tagged "Drupal 9 compatibility" in projects you are interested to help with.
  3. Use the tool you have from step 1 to identify and manually fix or automatically fix deprecated API use.
  4. Submit the suggested fix to the drupal.org project (if the issue did not exist yet, submit as a new issue and cross-reference under the Drupal 9 plan issue of the project).
  5. Work with the project maintainer to get the issue committed to the Drupal 8 project.

Get your own code ready

You should have full control over what changes are made to your own code. Use the tools mentioned above to find and fix problems in your own code. Drupal 8 code with deprecated API use removed should still flawlessly work with Drupal 8, so you can do almost all the work (and in most cases all the work) to make your own code ready for Drupal 9 anytime, assuming you keep your contributed modules and Drupal core itself up to date on your setup.

Get Drupal core ready

Help is welcome in the following issue and its children: Remove deprecated classes, methods, procedural functions and code paths outside of deprecated modules on the Drupal 9 branch.