In our global code, we try to never change the inputs/outputs of a function once it is created.
If it needs to be changed, we actually write a new function instead and leave the old one intact allowing the legacy code to keep using it properly.
The only problem with this approach is it leads to developer confusion when trying to select the correct function.
Example: Do you want, GetString, GetVarString, GetVarString32 ???
We once thought maybe putting a serial date in the function name would help, but it made the code hard to read.
Many of those functions just call their newer versions with the parameters reorganized and adjusted. Others are simply blanked out when they are no longer needed.
So far, the best we have is descriptions in the function on if it is deprecated and what replaces it.
It's no wonder software projects inevitably get slow and bloated. Our code is about 10 years old now and still has very little rot. Thankfully most of those global functions were well thought out when they were written, requiring very little maintenance.
Keep Up with TechRepublic