Don’t get me wrong – I don’t like sealed and internal classes any more than the rest of us. It does make it difficult to test and extend. I’m a TDD proponent (Green wristband and all) and I’ve had to deal with these classes.
But, I’ve also been on the other side – supporting MSFT’s customers. Not the ones who are in the ALT.NET community, some of whom have a sense of responsibility when it comes to using things not marked public. They know if they get the rug pulled out from under them that it’s not MSFT’s fault, but their own.
No, the ones I’m talking about probably haven’t heard of ALT.NET. Or .NET User Groups. Maybe they’ve heard of PDC and other Microsoft conferences. But in general, they are in a closed environment, doing work inside large organizations (or medium organizations). Many of which have hefty support contracts with Microsoft, and hefty licensing contracts too. In other words, they spend a lot of money – something a public company loves.
These are the kinds of developers who would use the classes when they are public, warning label or not. And when the change happens which breaks backwards compatibility, they’re they ones who found a way to not only use the thing, but make it the absolute core part of their application that can’t be ripped out, and that has now caused their application to go down, costing their company 10s of thousands of dollars an hour.
And guess who they call. And guess who has to come out and fix it. And guess whose been woken up at 2am from a dispatcher in Bejing needing to know if I can catch the next flight out half-way around the world to try to help these customers who are screaming bloody murder and calling Steve Ballmer.
That, folks, is who Microsoft deals with /all the time/. Don’t get me wrong, there are some very smart developers all over the world, working in a variety of crappy places. Let’s also not forget that Microsoft has generally been known for backwards compatibility – at the detriment of code bloat and progress forward.
They know the cost. They understand the problems. Being vocal about it is great, because it has an impact. But at the end of the day, their job is to please their customers, and their customers demand backwards compatibility and some really do need to be saved from themselves. That’s the market Microsoft has created, and made lots of money from. Those are the people we need to show better ways to.
At the end of the day, I echo the sentiment to open up the classes as much as possible. Find some way to balance all of this out. In 10 years, I truly hope we’re at the point where TDD is not just accepted, but assumed as part of a normal professional software developer’s M.O. And to do that, we’ll need the ability to mock and inject and fake.
But we have to realize we’re dealing with a big cash cow for a very large company. One that isn’t going to move easily, but one which hopefully we can herd off.