As your product functionality grows, it is important to manage the impact this has on developers and partners who have already adopted your APIs in earlier releases of your application and not force them to make code changes unless needed. Where possible, maintain backward compatibility such that even after your application has been upgraded in a subscriber org, existing integrations and extensions continue to work without modification (multiple versions of your application code are not stored in a subscriber org).
Without backward compatibility you can inhibit upgrades to your application within your customer base, as the time spent by Developer X addressing API issues can delay upgrades and be expensive. Some subscribers might have utilized consulting services to deliver the original work or be dependent on one of your partners for add-on solution using your API.
Versioning falls into two categories: versioning the definition (or contract determined input and output of data) and the functionality (or behavior) each API represents.