Thinking with blinders

time to read 2 min | 383 words

imageMany of the  comments to my previous post were some variation on this one:

Have you consider what would happen if they actually followed your advice?
Do you really want to rewrite major parts of your application every time a new version comes out?

I carefully re-read my post, and I couldn't find anything there to suggest that to me in the post.

What I suggested is relaxing the mandate of absolute backward compatibility, which cause so many problems in both design and maintenance modes.

I never suggested that there should be no compatibility, and I certainly didn't suggest "let us just change things randomly to make everything breaks", which is what a lot of people seem to think I did.

Backward compatibility is not a binary value.

About my reaction for the breaking changes in SP1. I was quite annoyed with that, it was pointed out. Apparently some people find this to be inconsistent.

I don't think so, because you don't get to hold both ends of the stick at the same time. If you are going to promise 100% backward compatibility, with its associated cost (i.e, causing me, personally, to go into spasm of rage as a result of seeing yet another internal) then by God and all the angels, I am going to hold you to that.

If I have to pay the price for backward compatibility, then I want 100% compatibility.

However, I think that this is perfectly all right to reduce that burden, and that change what I am willing to accept.

Looking outside the .Net space, we have several very interesting case studies to observe: PHP, Python and Java.

PHP never cared too much for backward compatibility. From looking at its eco system, it doesn't look like it hurt it much. Just talk to any Java guy about the problems that backward compatibility are causing for the language and platform now (generics hack, anyone?).

Python 3000 is probably the best case study for making an explicit decision to break away from the backward compatibility concerns. Note that this is not what I am suggesting.

And just to repeat the key point of this post:

Backward compatibility is not a binary value.