IMO: A subroutine represents a (update: re-usable) functional block and avoids duplication of its implementation. Size doesn't matter in that sense - i.e. other than it being an indication of efficient coding of the subroutine if it is optimally small
(Update: I don't mean obsessively small as in golf - just not ten lines where one will do!)
-M
Free your mind
Comment on Re^5: Dynamically Changing Your Namespace