Using versions or branches is very similar but also different.
Versions have the same project id, are in the same project (not really isolated)
Versions do usually reflect your deployment stages or the versions of your own software product.
Usually versions stays for a longer period of time. You usually don't create and delete versions on a daily basis.
Branches, are like separate projects (isolated, with own project id) but “inherit” the translation resources of their “parent project”.
This makes it simpler to see directly which keys are “overwritten” and which not. You can also invite “external” users with manager/admin role to the branched project, without having to worry about any influence on your “parent project”.
Branches do usually reflect your code repository branches or translation jobs for external translators.
Usually branches stays for a shorter period of time.
Overridden values are marked with the state icon overridden and can be filtered by that state:
The translations published to our CDN (or exported using the UI, CLI or API) are combined by the translations provided by you and the overridden values of the parent project.
Branch projects come with their own settings (own project id, own API keys). In order to load translations from the CDN you need to use the branch project id found in the settings page.
Here comes the good part. Branches are for free (unless you don't have more words in a branch than in the parent project).
When you merge the branch back, normal modifications costs occurs.