Depending on the series of the system you can see different causes.
With either an HD or SSD based system free space is a big issue!
- HD's the issue becomes a more fragmented disk so the OS & App need to work harder to find free space (this also pushes the systems hardware as well). I recommend having 1/4 of the disk free. I also recommend defrag'ing the drive at least once a year. Before doing an OS upgrade I clean things up and then after doing the upgrade I often find I need to defrag the drive.
- SSD's also need free space but unlike a HD they don't need defrag'ing. Drive size is a big problem with SSD's they tend to be too small for most people. Here the need of free space is in fact larger! Often I try to achieve 1/3 free on the smaller sized drives as the disk is also used for virtual RAM and these smaller drives systems also tend to have less RAM (8 GB) so the need of the space is more important.
With both running disk utility from an external boot drive to repair file permissions and drink issues is a common action item as well as clearing out the old cache & log files as they to build up over time.
- Using the wrong HD during an upgrade can be an issue. Make sure the systems SATA port I/O speed is listed within the new drives spec sheet. Often I find a fixed SATA III drive put into a system that can't support it.
- Make sure the systems firmware is up to date
- The older MacBook Pro's SATA cables have issues either the rev is not able to support the new drive or the cable is damaged.
- Fusion Drives can get messy, the drive is failing or changed out can create strange performance issues.
OS & Apps can also be a cause!
- After upgrading a drive after a restore from a backup you do need to give the system sometime to re-index the files. So the size of the backup can have a cause and effect here. You would see the indexer using most of the process threads.
- Making sure the OS and Apps are at the latest can be a good start. But, there have been times when the app was updated automatically when we hadn't updated the OS yet causing problems as the developer did not test things in the older OS as thoroughly as they did on the current OS.