Services exist in order to serve external clients. They do so by exposing a wide range of external interfaces which are later used by the clients to interact with the service. After initial deployment, and potentially several times during their lifetime, services may need to be changed for a variety of reasons, such as changing business needs, re-factorization of code, or to address other issues. Each change introduces a new version of the service. Each new service version potentially introduces changes to the external interfaces exposed by the service. Our goal, as developers, is to be able to freely change our service internals (and sometimes, when needed, external interfaces), and on the same time, allow existing and new clients to keep using the service. In order to do so, we need to form a set of versioning guidelines.