This isn't any kind of rant, just my opinion...
Canned, debugged library code is very nice to have, and indeed can speed up development time in many cases, but one must be extremely careful in applying canned library code. I prefer to keep interesting routines around as a template, or style-guide type of reference, rather than for actual use in programs.
If canned code is used, I like it to be in the form of a parameterized subroutine (most PLC's), or a stand-alone Function Block/Call (Siemens). The importance here, is that you define up the inputs, outputs, and temporary locations the function requires, and then pass them in and out to the actual routine.
I do NOT like having to modify addresses for canned logic, it just opens a (pardon the pun) can of worms if you mis-type.
My other problem with people liberally applying canned routines is that often they use something 'similar' to what is actually required, but not quite. That either requires modifying the canned logic, to 'open it up' (and making it no-longer canned), or adding wrapper logic to modify the way it behaves.
Also (being guilty myself of this sometimes), in trying to develop a 'Canned plug-and-play' type function, often times one can get so involved in the details of the function, and trying to adapt it to be universal, one loses sight of the original goal. This leads to longer development times.
What I find much more useful than canned logic, is (especially with newer 1131 type PLC's) to take a lot of front-end time to define up my data structures. More and more, it seems, designing a control solution is much more about designing a data interface to the control structures than the actual control structures themselves. If that makes any sense.
Even where I don't have user-defined data structures available (like PLC/SLC/Simatic 505/AD/etc), I'll define of blocks of memory and assign them the same for each machine section.
Out of a 30 word block for example, words 1 through 5 might be control and status bits, words 6 through 20 might be references/feedbacks, and 21 through 30 might be temporary working registers or transitional logic registers (one shots, temporary memory).
Liberal and consistant use of symbols and descriptions of things helps too.
Just my 1.33 cents (after taxes)