Principles of Package Design: Preparing your code for reuse