This explanation assumes that you have a good understanding of retiming.
On previous architectures the correct thing to do was to analyze the top, say, 100 failing setup paths in TimeQuest and look for patterns in the list, or even better, to compile multiple seeds and look for patterns across compiles. You could then confidently focus your efforts on the paths that showed up most frequently.

With the HyperFlex architecture in Stratix 10 you must instead focus your attention on the critical chain. This is preached in the Stratix 10 High Performance Design Handbook [1] but I want to explain it further since it’s a point of confusion for FPGA designers. There are 2 main reasons.
First I’ll remind you of the definitions of critical path and critical chain.
The critical path is the single register-to-register path with the longest delay in the design. It is therefore the path that limits FMAX. *
Like a broken record, I’ll repeat: The critical path within the critical chain will vary from seed to seed due to retiming. This is why you shouldn’t focus on the top failing path in TimeQuest since it will constantly change.
Your next step will be to figure out a way to change the design to allow more effective retiming of the reported critical chain (ie. add more registers, alleviate retiming restrictions, restructure the logic to reduce retiming dependencies, etc). The Retimer and FastForward reports will give you suggestions on what to do. Once your changes are implemented the Retimer will figure out the optimal way to balance the registers in that chain for you.
A second, often overlooked, reason why it is misleading to look at the top failing paths is that the Retimer does not optimize the second-place critical chain! There’s no point in doing that since it would consume runtime for no FMAX gain. Once the Retimer hits the FMAX-limiting chain, it stops. By the definition of critical chain it simply cannot reduce and balance the path delays further and therefore the design’s FMAX cannot be improved. Since the second-place chain in the design (ie. the chain that’s almost as bad as the critical chain but not quite) does not get optimized by the Retimer, it will likely contains paths that are almost as critical as the design’s ultimate critical path. Thus, these paths are likely to show up in the top 100 failing paths in TimeQuest. But these paths might actually be good candidates for retiming, if the Retimer had worked on them. This would mean they’re not true design bottlenecks and would not show up in the top-100 list if, I’ll say it again, the Retimer had worked on them. But it doesn’t work on them because there’s no point — the design is still limited by the ultimate critical chain.
If you’re wondering why the Retimer doesn’t work on them as a way to identify the 2nd- and 3rd-place critical chains to give you more information on what to optimize, this is because this “lookahead” is precisely what the FastForward tool does. FastForward tells you what the next critical chain will be if you solve the current critical chain. And it keeps iterating like this until it hits a wall. It’s also a good idea to see if FastForward hits the same “future” critical chains across seeds.
So in summary, on Stratix 10, it is most correct to focus your optimization efforts on the critical chain identified by the Retimer. If you’ve been an FPGA engineer for a long time, this will feel like an unnatural change of habit (it sure did for me in the beginning).
* Technically a path starting or ending at an I/O pin could be critical but we’ll keep it simple and consider only reg-reg paths since that’s most common.
References
[1] Intel Stratix 10 High-Performance Design Handbook. [Local Copy]
[2] Hutton, Mike. “Understanding How the New Intel® HyperFlexTM FPGA Architecture Enables Next- Generation High-Performance Systems“. [Local Copy]