29

In our company we have a definition of what a breaking change is and we try to avoid it as much as possible.

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

FuryFart
  • 2,304
  • 4
  • 27
  • 43
  • 1
    This question appears to be off-topic because it is more a conceptual question about software development and as such will better fit to http://programmers.stackexchange.com/. – TLama Feb 13 '14 at 19:54
  • check this https://en.wiktionary.org/wiki/breaking_change – GingerJack Feb 10 '16 at 06:02

1 Answers1

35

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.

Chnossos
  • 9,971
  • 4
  • 28
  • 40
Oliver Matthews
  • 7,497
  • 3
  • 33
  • 36
  • An excellent summary. I would add to this that it is valuable for everyone to understand why there needs to be a classification of changes according to this definition. A typical scenario could be that you have licensed your software product to a third-party, and that they are concerned with any updates that you provide them with. Is the update a drop-in replacement? Or will it drive a lot of extra development and verification work? If you can answer the question as to why it is important to define what a breaking change is, the definition as such should be pretty easy to work out. – David Pettersson Feb 12 '14 at 21:45
  • so the "breaking" in bootstrap 5 documentation means, it is a breaking change right ? – legacy Jun 05 '21 at 03:53