In order to address issues of dependency hell the Semantic Versioning scheme has been proposed and developers can follow this scheme to help them manage their dependencies. Semantic versioning defines a consistent scheme of version numbering which allows users and developers to infer compatibility between versions from their numbers. In essence, semantic versioning entails a three-part version number - major version, minor version, and patch. The patch number is incremented for minor changes and bug fixes which do not change the software’s API. The minor version is incremented for releases which add new, but backward-compatible, API features, and the major version is incremented for API changes which are not backward-compatible. In this way, it’s easy to see that software which relies on version 2.1.5 of an API is compatible with version 2.2.3, but not 3.2.4.