reusing past solutions to design problems
well- described solution to the most commonly encountered problems which occur during software development
generall repeatable solution to a commonly occuring problem in software design