First, let's differentiate between upgrading to D10 and migrating to D10. It's not just semantics. If your site is built on Drupal 8 or Drupal 9, you'll upgrade to Drupal 10. If your site is built on Drupal 7, you'll migrate to Drupal 10.
At a high level, this means one is more complex than the other. Drupal 7 and Drupal 10 are two completely different codebases. So, in order to move from Drupal 7 to Drupal 10, the codebase of the D7 application needs to be evaluated and (in many cases) sections of code need to be re-written to conform to the new standards on which D8 and above are based. It's a labour-intensive process and the reviewers must be meticulous when evaluating code, content and configuration.
Going from Drupal 8/9 to Drupal 10 (and all subsequent versions) is significantly less complex because your D8/9 codebase is (for the most part) already D10-ready... and if your Drupal 8/9 site was properly architected and kept up-to-date then the move from D8/9 to D10 is more accurately termed an upgrade, as opposed to a migration.
The next important thing to address is time frame. Drupal 7’s end-of-life (EOL) is forever being pushed out, Drupal 8's EOL was November 2021, Drupal 9's EOL is November 2023. Beside the fact a complex D7 application can take quite a bit of time and effort to migrate, the best agencies are filling their schedules - quickly! Wait too long and you could be in for a very unpleasant surprise.
Regardless of whether you're upgrading or migrating, the best place to start is with a Drupal 10 Readiness Audit by Thinkbean. We'll accurately assess the resources required (time-line, effort, budget) for either path and provide recommendations as to what you'll need to do to prepare for clear sailing to Drupal 10.