well, in my current case, I don't need to keep backwards compatibility, because the system is not yet in production... but in a real-life case, I would have to keep it until all users had updated their apps to the new version
Versions come in many flavours1 and usually, the solution conveys with the company' business strategy for the app. Whether you "would" or not version, remains to be seen and decided. Your doubts come from the fact that you are trying to solve a problem that has not yet happened and that makes you see (or not) the so many "flavours" you can pick.
That said, don't version things if you don't need it. At the moment, you can replace|remove deprecated code, making the source code to be clean and concise. Use the SCM to retrieve old implementations and track changes, don't do it through the source code itself (comments or duplicated components).
Later, if you have to version, consider doing versions of components (classes, libraries, etc) instead of namespaces because backward compatibility is easier to treat with code (via OOP principles, patterns and another programming practices) than with namespaces or directories.2
If you find yourself having to maintain Nmaintaining N different versions of the source code and they gethave different SDLCslife cycles, then implement the branch strategy that best meets your needs offor maintainability, deployment and delivery. Or fork the code. Whatever route you pick. Take advantage of the SCM capabilities to version the source code.
As for versioning the web API. That's a whole different subject that worth its own question on S.E.
Note: There're alternatives to the well-known versioned URIs, what in my opinion is a huge mistake
1: source code versioning, app versioning, web API versioning, ... Each of which implementing different strategies
2: The later should tell about the application, about the business rather than versions and other details of the sort.