Hello all
I would like to eventually launch a discussion which might go beyong BabylonJS, which is why I post in Off topic … Feel free to share your valuable experience
I use to develop a lot of stuff on my free time, and I often struggle with the “breaking change” issue. Basically I feel like when it comes to updating a software or API (for example adding a new feature or correcting an old one) we often have the choice between :
- Inserting a breaking change (and potentially break the tool for unknown N users)
- Inserting (or keeping) useless code complexity for the only sake of not going “breaking change” for a few people
My last example in date is my project WebGPU AI Life :
- I added a way to “save” a SEED by generating a custom URL
- I added a custom URL parser to retreive a seed
Problem : Later on I added the ability to choose the number of families (from 1 to 8). So I had to edit my seed parser. But since it had already shared on tweeter, and people was already sharing to each other some seeds on the V1.0, I had to “trick” my new seed parser so that old seeds (not specifying the number of families, at the time fixed to 4) also work on the new server version
I call it a “problem” because just for the few people who might continue sharing to each other the obsolete seed URL, I’m keeping a “dirty” version of the code with lines I would love to get rid of, just to avoid breaking change.
And I guess I’m not the only one since I have seen already several times, after a feature request or modification request, @Deltakosh , @RaananW or @Evgeni_Popov (or others…) saying something like “Yeah but that would be a breaking change”. Which I’m totaly fine with, don’t worry
But sometimes I feel like due to this, maybe a software is not “as good as it could be”. Because we are not perfect, and cannot think about all issues and usages by advance, and by a matter of fact, we often come to the conclusion that this or this function would make “more sense” to be called in another way, or be part of another class, or etc, etc…
How do you guys deal with this ?
I would say when it comes to a public software like BabylonJS, it’s generally agreed (I won’t speak about Blender ) to use the version naming convention MAJOR.MINOR.PATCH
with :
MAJOR
= breaking changeMINOR
= new featurePATCH
= debug
But I don’t know if it’s the case for BabylonJS… Do you guys follow this rule ? I think that following this rule also means tracking the “to be changed on next MAJOR” code, so exactly the list of little code patches which are known as “dirty”, remaining only for not breaking, and would be removed/fixed on next major, etc, etc…