Describir: A software development environment that assists in the use and design of reusable modules