Framing software reuse: lessons from the real world