I identified places where I repeat code and can use small subroutines. That helped.
Time vs. Space.
If minimizing scan time is the priority, inline code is faster than using subroutines with multiple CALLs for each sub.
If minimizing code-space is the priority, placing large sections of common code in subroutines and using multiple CALLs can be more memory efficient.
It's like horse power vs. fuel economy in an automobile. It's hard to do both.
But if you are NOT doing any of this inside a FOR/NEXT loop, it's most likely a TRIVIAL bump to scan time regardless.
If a control system gets too complex (e.g. controlling a machine vs. controlling an entire assembly line), then it may be better to have multiple PLCs that are focused on all the localized "lower level" control, but then share data between the two for "higher level" (supervisory) control.
We had to split up a PLC program on a corn cooking batch process at one facility because it had 12 kettles. The program could handle up to 8, but we split it up between 2 PLCs (one of 8, the other 4). It was a hack of the original design for both systems, but we got it to work.