In our company we have a definition of what a breaking change is.
It is a change
- that changes a method signature.
- that changes the behavior of a method.
- that changes settings, configuration.
- that adds dependencies to a module, assembly etc..
Would you say this is a good/complete definition of a breaking change? Is there something missing? Would you consider a change in the database schema a breaking change too (e.g. a new column or new table)?
Thanks in advance.
EDIT: Just found this A definitive guide to API-breaking changes in .NET
The first point is to decide what "breaking change" means in English*. In some places it would be merely something which stops the code from compiling / running.
From your list so far, I suppose you mean a change that will require other people to make a corresponding change. In that case, since each module of your product should have a well defined interface (be it to other modules, a public REST interface, the system's filesystem, a gui, a webapp, etc), then a breaking change is anything that removes something from one of those interfaces (or adds a new requirement for their use) - in effect, if you cannot take the previous version of the product and swap just the module with the change in, then it is a breaking one.
So, yes, database changes will typically be breaking changes (unless there is code to auto-upgrade and possibly auto-downgrade as required).
The main point is what is not a breaking change - changes within a module or to undocumented interfaces (i.e. ones that should not be used) are not breaking changes. If such things do break your product then there is a failure of encapsulation.
*or your (human) language of choice.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With