A set of software functionality designed to solve a specific problem or to provide a new functionality to the user.