Which version are you updating from? Code freeze is recommended, to minimize the duration of the update, but it is also important to ensure you always keep at least one environment in the original version until after production environment has been updated. This will ensure business continuity can be kept (always having at least one enviornment to support production in the same version).
In general, updates should not take too many months. To achieve this, it is important that you focus first on a basic update (without adopting new features) and once all environments are in the new version, you start adopting new features along with new business functionality.
The timeline really depends on how much customization you have and the level of compliance with out of the box features you have. Going from 7.22 to 8.6 is a big leap, so it can take a few months. As mentioned previously, it will be key to focus on moving the application as-is, to minimize the update duration.
In terms of process, I suggest you to follow the documentation available: