I'm assuming you are using an AB PLC.
Look at the program in post 5 of this thread
http://www.plctalk.net/qanda/showthread.php?p=260919
The particular problem in that thread isn't relevant to your question, but observe how the program is organized. The program contains two subroutines. In this case each subroutine demonstrates a different way to solve a problem.
Ladder 2, the main ladder, calls two subroutines. Ladder 2 contains only rungs that call the subroutines. No other logic exists in Ladder 2.
Ladder 3 contains one subroutine
Ladder 4 contains the other subroutine.
When someone wants to look at only one part of the program they can quickly find out where that part is by looking at ladder 2 and then selecting the right subroutine.
Subroutines can be a very powerful tool for program organization. A programmer might choose to divide subroutines by zone (Conveyor 1, conveyor 2, Robot1, Robot2, etc.) or he might choose to divide by operation (Fill, Mix, Heat, Drain).
Subroutines can also be created to improve program readability. Its much easier to troubleshoot something if you can go to a short subroutine rather than hunt through a long monolithic program.
I often program a dedicated output subroutine that contains all the actual output points. In my experience when a maintenance tech wants to troubleshoot a particular actuator he will first hunt for the output address. Putting them all in sequential order in one subroutine makes it easier for him to find it. From there he can then back track.
Subroutines also make programming easier by helping you to break a complex process into a series of smaller tasks. As a general rule of thumb I try to break a program into small tasks that can be programmed in twenty rungs or less. If a task can't be programmed in twenty rungs or less then I haven't broken it down enough. In the first example I mentioned (conveyor/robot) the robot might be broken down farther to pick up part, orient part, place part. From time to time I may need to have a longer subroutine but for the most part I try to keep them pretty short.
Unless you are using a bottom dweller like a Micrologix 1000 then you are probably not going to run out of subroutines so don't be afraid of using as many of them as makes sense.
edit to add:
Do a forum search, there are lots of threads on helpful ways to use subroutines.
Here a a couple:
http://www.plctalk.net/qanda/showthread.php?t=61978
http://www.plctalk.net/qanda/showthread.php?t=54275