Monday 26 August 2013

For Pete's sake: "deprecated" does not mean "removed"

One thing I hate (of a very long list, it seems...) is people simply not getting what the notion of "deprecation" means. In the context of software (~ features) I mean.

For goodness sake: if one has a software system and one declares an element of that system to be "deprecated", this does not mean it's been removed from the system, or will now break, or will work in any way different from how it did before it was marked deprecated.

If we're talking about ColdFusion, and we were to say that <cfform> (pseudo-random example, but a frickin' good candidate for deprecation!) was deprecated as of CF11... then it would still work exactly the same as it does in CF10 in CF11 and every subsequent release of ColdFusion until it was finally retired.

All deprecation means is to flag that a feature will no longer receive enhancement (or bug fixing, etc), and that it will possibly be removed from the product at some later date. I would go as far as to say that if one was being professional about things, then simply saying in the release notes of CF11 that <cfform> was deprecated (but no mention of when it would be removed) then that's almost a guarantee that it'll still be there in CF12 as well. Deprecation is one thing, but the decision to actually remove something from the language ought to be flagged 1-2 version out (something that Adobe has never done).

So I really don't think Adobe have to be mincing around on eggshells (sic.) when they decide whether or not to deprecate <cfform> or <cflayout> or [whatever]. If it's decided those sort of things are not the way forward, then just deprecate them. Get it over with.

Just update the docs along these lines:

This feature is deprecated. It still operates as per the documentation below, but it is no longer actively supported for enhancements or any bugfixes. At some stage in the future, it might be removed from the product, but this is not currently scheduled, so it will remain in the product for the foreseeable future. To effect similar functionality via alternative mechanisms, consider: [list of alternatives here]

That's all you need to do.

And for anyone who might be wringing their hands over the future of something in CFML which gets deprecated? One word: parameterExists().