This may be because I’m beginner and I don’t know how to structure schematic ahead of time. I find myself needing to refactor a schematic into several ones once they grow too complicated I find it very painful in KiCad:
Select items I want to move to new schematic and cut them
Go to new schematic
Paste special → keep references
Add hierarchical labels
Connect hierarchical labels
Hope you have not forgot to paste as special instead of normal paste
Update PCB with relink
Annotate schematic
Update PCB wihout relink
Save schematic
Hope KiCad doesn’t crash (currently 8.0.x is unusable for me due to issue #17953 an 8.99 crash from time to time)
Save PCB
It’s a long and error-prone process and if you do something wrong and KiCad crashes you need to fix it manually. Is there a better way to do it or should I file a UX bug?
KiCad still has no way to move a section of a schematic to another hierarchical sheet without loosing the UUID’s that connect the symbols with footprints on a (partially designed) PCB. The Paste Special combined with Re-Link footprints is the only way I know to repair these links again.
The rest of your workflow is pretty much arbitrary and you just do whatever workflow fits the job.
One thing missing in your workflow: The Re-Linking after Cut and Paste Special relies on matching RefDes between schematic symbols and PCB footprints. Therefore you should ensure that these match before you do the Cut & Paste Special thing.