﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Ayende @ Rahien</title><link>http://ayende.com</link><description>Ayende @ Rahien</description><copyright>Copyright (C) Ayende Rahien  2004 - 2021 (c) 2026</copyright><ttl>60</ttl><item><title>Brian commented on Consenting Adults</title><description>No compatibility turns to switching camps (in a previous job that was VB.NET was a breaking change to VB6) - so the company decided to go Java.
  
  
A lot of people, who were complaining about breaking changes were then out of job on top of it.
  
  
Three lessons here:
  
1.  As a developer stay up to date on technology and don't whine when you fall behind or don't understand it and when you know something 'big' is coming - be prepared.
  
2.  As a developer and CIO, be prepared for breaking changes when they do come and have a plan in place to deal with them.
  
3.  As a product company (in this case Microsoft): keep breaking changes to a minimum because you may loose large profits due to companies being frustrated at being forced to make a change and in their change abandon you all together.
  
  
I won't say the name of the company, but I know they gave Microsoft a LOT of money (probably well into the several millions per year).
</description><link>http://ayende.com/3744/consenting-adults#comment22</link><guid>http://ayende.com/3744/consenting-adults#comment22</guid><pubDate>Thu, 11 Dec 2008 18:36:44 GMT</pubDate></item><item><title>David Kean commented on Consenting Adults</title><description>I should comment that my above position is my own personal opinion and although I work for Microsoft, may or may not represent Microsoft's view as a whole.
  
  
&gt; To whine about being locked in by the expectations of the press, CEO's etc is a bit weak IMO.
  
My point was that if we don't do this - then people don't upgrade. No compatibility == no money. Simple as that.
  
</description><link>http://ayende.com/3744/consenting-adults#comment21</link><guid>http://ayende.com/3744/consenting-adults#comment21</guid><pubDate>Thu, 11 Dec 2008 02:39:54 GMT</pubDate></item><item><title>GT commented on Consenting Adults</title><description>Here's a free lesson for Microsoft:
  
if you make a business decision to do things a certain way, then fine. But don't defend it by saying something like "we have no option to do it differently", defend it by saying "this is the way we do business, and these are the reasons...". This is the honest and open approach. Whatever you do, you can't please everybody, so stick to your guns and be prepared for the consequences. 
  
  
To whine about being locked in by the expectations of the press, CEO's etc is a bit weak IMO.
  
</description><link>http://ayende.com/3744/consenting-adults#comment20</link><guid>http://ayende.com/3744/consenting-adults#comment20</guid><pubDate>Thu, 11 Dec 2008 02:07:42 GMT</pubDate></item><item><title>David Kean commented on Consenting Adults</title><description>Yes, but if that was an acceptable answer, then we wouldn't have any reason to shim applications in Vista when they did the wrong thing (we would obviously still shim when we did break compatibility). Unfortunately, press, CEO’s, and users don’t see it as the applications at fault when an application stops working; Microsoft and Windows is instead blamed. Compatibility is a proven adoption blocker, this is actually the exact reason why we’ve been adding functionality in service packs – as they are not seen as a new version and therefore large corporations don’t have a problem rolling them out.
  
  
I think the better way to approach this would be in a couple of ways:
  
  
1.	Release previews and CTPs early. I don’t mean Betas, once something has shipped in a beta, it’s already too late to change. This will allow customers, like yourself, to give us feedback early about the kind of extension points you think are missing. MEF and MVC are examples where we doing well in this space. More teams should and will follow.
  
2.	Release source without restrictions. This allows customers to simply copy and paste internal API that they think should be public.
  
3.	Reduce coupling. My team is responsible for enforcing this in the Framework as a whole (ie for example, we’re trying to remove ASP.NET's current dependency on WinForms - no joke). However, we have no control on how teams do this on an assembly by assembly basis. This will mean that if ASP.NET wants to turn a special switch in System.Data, then they should to do this via the same supported mechanism that customers would – no more InternalsVisibleTo. As more teams adopt MEF, hopefully most teams will get this for free.
  
  
Thoughts?
</description><link>http://ayende.com/3744/consenting-adults#comment19</link><guid>http://ayende.com/3744/consenting-adults#comment19</guid><pubDate>Thu, 11 Dec 2008 00:12:20 GMT</pubDate></item><item><title>Ayende Rahien commented on Consenting Adults</title><description>I would say that it prevents you from doing many useful work now (I refuse to use that i word).
  
  
But I have a very simple answer for people complaining, it can't really translate to English, but you can think about it as: there be dragons, deal with it.
  
That should be an acceptable answer. The moment that it become one, now we are talking.
  
  
</description><link>http://ayende.com/3744/consenting-adults#comment18</link><guid>http://ayende.com/3744/consenting-adults#comment18</guid><pubDate>Wed, 10 Dec 2008 23:51:20 GMT</pubDate></item><item><title>David Kean commented on Consenting Adults</title><description>Based on personal experience, what you are suggesting does not work.
  
  
For the last 5 or so years, FxCop has a public API for writing custom rules. It is not documented, not supported and we've repeatedly told customers that it was very likely to change in future versions. Regardless of this, people would personally email me upset that we broke their custom rules when we did change the API. Writing custom rules can be complicated as you need to understand IL to really get anything out of them, so these aren't just mort developers, these are advanced users like you and Jeremy. 
  
  
If this happens with an API that isn't even documentated and doesn't ship with the Framework, can you imagine what would happen when these APIs start appearing in MSDN and IntelliSense? Not only would the advanced users start using them, but everyone would. Mort goes with whatever works - if a class looks like it does the right thing, then he's going to use it. 
  
  
This would completely prevent us from ever innovating.
  
</description><link>http://ayende.com/3744/consenting-adults#comment17</link><guid>http://ayende.com/3744/consenting-adults#comment17</guid><pubDate>Wed, 10 Dec 2008 22:26:31 GMT</pubDate></item><item><title>James Curran commented on Consenting Adults</title><description>You seem to be missing David Kean point.  They don't "choose" to be backward compatible.  They literally do not have that option.  You may want to be treated like an adult.  
  
  
However, most large corporations insist on being coddled.  And if a new version of the framework/OS causes their application to stop working, they start screaming about lawsuits and "abuse of monopoly power".  
</description><link>http://ayende.com/3744/consenting-adults#comment16</link><guid>http://ayende.com/3744/consenting-adults#comment16</guid><pubDate>Wed, 10 Dec 2008 18:16:29 GMT</pubDate></item><item><title>Ayende Rahien commented on Consenting Adults</title><description>You need to run with the trunk version
</description><link>http://ayende.com/3744/consenting-adults#comment15</link><guid>http://ayende.com/3744/consenting-adults#comment15</guid><pubDate>Wed, 10 Dec 2008 14:18:09 GMT</pubDate></item><item><title>Tomasz Modelski commented on Consenting Adults</title><description>@ Ayende :
  
Does your NHibernate Query Generator work with NHibernate version 2.x ??
  
  
I succeded to run your generator v.1.9 as custom tool, but it looks like there are some changes in NHibernate 2.x namespaces, generated code does not compile with referenced Nhibernate 2.x
</description><link>http://ayende.com/3744/consenting-adults#comment14</link><guid>http://ayende.com/3744/consenting-adults#comment14</guid><pubDate>Wed, 10 Dec 2008 13:00:53 GMT</pubDate></item><item><title>Jeff Brown commented on Consenting Adults</title><description>Breaking backwards compatibility is just not an option for a framework with millions of consumers.
  
  
However... I believe Microsoft does have one problem regarding how it builds its frameworks: it often tries to squeeze in whizz-bang one-off features.  They look good in demos but that sort of development is simply not conducive to achieving SOC and OCP.
  
  
Here's one example.  There's some fancy auto-wiring for transaction enlistment in ASP.Net.  It actually works because ASP.Net sets an undocumented AppDomain-level user-data variable that the System.Data internals know to go read.  This kind of private wormhole is ridiculous in the extreme!
  
  
One might argue that Microsoft should be trying to enable everyone to build whizz-bang features simply by virtue of building its own in open ways using their own extensibility APIs.
  
  
Unfortunately, the problem is that it just costs more to build open interfaces that support first-class extensibility.  Also, it's hard to get the extensibility story right the first time.  Every API is a promise to maintain and support some abstraction pretty much indefinitely no matter how broken it might be.  Extensible systems tend to have a greater (hence more costly) surface area in that regard.  So in the end it's much easier and cheaper to just build relatively closed interfaces.  
  
  
After all, enterprises will just build their own abstractions on top of whatever is offered.
  
  
So it's not laziness, nor idleness, just pragmatic and conservative policies backed by some rather sound business and technical reasons...
  
  
You wouldn't like it if you had to re-examine all of the assumptions in your apps after each major framework release would you?
  
  
(That said, they could do to raise the level of abstraction a tad.  I've been burned by some issues involving the coupling policy and mechanism in framework classes.  Sometimes the framework is too framework-y whereas it should be more library-y...)
</description><link>http://ayende.com/3744/consenting-adults#comment13</link><guid>http://ayende.com/3744/consenting-adults#comment13</guid><pubDate>Wed, 10 Dec 2008 09:59:28 GMT</pubDate></item><item><title>Frans Bouma commented on Consenting Adults</title><description>Your post is a typical response from an open source developer who can say "that's in the trunk, get the latest daily build". They can't do that. Not now, not ever. What they release as v1, v2, v3 etc., is THE version 1, 2, 3 etc. There's nothing that can change that afterwards, as things were already released and millions of developers DEPEND on the state of the API in v1, 2, 3 etc. 
  
  
They therefore have to make absolutely sure that everything is in the api and that everything works. Max hit the nail on the head, backwards compatibility is a big BIG deal: the best thing that can happen to software engineers is that their software simply WORKS on vNext, and they get all the new stuff for free. You refer to 'zero friction' software over and over, well... frameworks which are backwards compatible are zero friction software: the developer can FORGET about changes in the framework from v1.abc to v1.abcd, and if he has to get a new daily build from subversion from some server. He can simply build the code he is supposed to write (the code is payed to write!) and focus ALL his energy on that. 
  
  
That's why backwards comparability is very very important. So much so, that it's likely one of the most important aspects of a framework. 
</description><link>http://ayende.com/3744/consenting-adults#comment12</link><guid>http://ayende.com/3744/consenting-adults#comment12</guid><pubDate>Wed, 10 Dec 2008 09:10:41 GMT</pubDate></item><item><title>Colin Jack commented on Consenting Adults</title><description>@Paul
  
Argh, I hadn't thought of the fact that it might be a typo. I was just loving the image created by "Actually, I don't really have a problem with cuddling".
</description><link>http://ayende.com/3744/consenting-adults#comment11</link><guid>http://ayende.com/3744/consenting-adults#comment11</guid><pubDate>Wed, 10 Dec 2008 08:54:25 GMT</pubDate></item><item><title>Gee commented on Consenting Adults</title><description>One of the reasons I no longer use PHP is because when a new version is released it will often break something somewhere in your code - backward compatability is in my opinion a big plus for .net
</description><link>http://ayende.com/3744/consenting-adults#comment10</link><guid>http://ayende.com/3744/consenting-adults#comment10</guid><pubDate>Wed, 10 Dec 2008 08:46:46 GMT</pubDate></item><item><title>max commented on Consenting Adults</title><description>Breaking stuff left and right is good for you, because you control the whole stack, and the stuff you don't control (the framework) is generally rock-solid and DOES NOT CHANGE. How much did you fume when MS broke one tiny little edge case in their SP just couple months ago? What would you say if more widely used things became "better designed" (from the point of view of existing code -- broken) every year or two? And don't even get me started on "I'll just target version xx.yy forever and ever" -- you might do that. but the vendor of the library you desperately need will decide to move on. What will you do then? Having to make changes to the application just to keep up with the moving target that is the framework is expensive. And from a general framework user's point of view it is an expense that he does not want. In short -- backwards compatibility is a BIG DEAL. 
</description><link>http://ayende.com/3744/consenting-adults#comment9</link><guid>http://ayende.com/3744/consenting-adults#comment9</guid><pubDate>Wed, 10 Dec 2008 08:10:05 GMT</pubDate></item><item><title>Jeff Handley commented on Consenting Adults</title><description>@naraga, yeah, I hit on that in my post too.
</description><link>http://ayende.com/3744/consenting-adults#comment8</link><guid>http://ayende.com/3744/consenting-adults#comment8</guid><pubDate>Wed, 10 Dec 2008 07:46:04 GMT</pubDate></item><item><title>naraga commented on Consenting Adults</title><description>Ayende i dont think that consenting adults has anything to do corporations trying to earn money. I think that exact opposite would happen - no progress at all. Corporations would be so scary to switch to new version of framework that there would be no investments to projects based on future versions. I almost completelly agree with Miscoroft policy in this case.
</description><link>http://ayende.com/3744/consenting-adults#comment7</link><guid>http://ayende.com/3744/consenting-adults#comment7</guid><pubDate>Wed, 10 Dec 2008 07:37:50 GMT</pubDate></item><item><title>Jeff Handley commented on Consenting Adults</title><description>Ayende,
  
  
I posted an article on why I think public virtual ubiquity would fail.
  
  
[jeffhandley.com/.../...al-ubiquity-would-fail.aspx](http://jeffhandley.com/archive/2008/12/09/why-public-virtual-ubiquity-would-fail.aspx)  
  
-Jeff
</description><link>http://ayende.com/3744/consenting-adults#comment6</link><guid>http://ayende.com/3744/consenting-adults#comment6</guid><pubDate>Wed, 10 Dec 2008 07:00:44 GMT</pubDate></item><item><title>Adam Vandenberg commented on Consenting Adults</title><description>When a new version comes out... aren't existing apps already targeting a specific (major.minor) version of the .NET runtimes?
</description><link>http://ayende.com/3744/consenting-adults#comment5</link><guid>http://ayende.com/3744/consenting-adults#comment5</guid><pubDate>Wed, 10 Dec 2008 05:00:44 GMT</pubDate></item><item><title>Jonathan Allen commented on Consenting Adults</title><description>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?
</description><link>http://ayende.com/3744/consenting-adults#comment4</link><guid>http://ayende.com/3744/consenting-adults#comment4</guid><pubDate>Wed, 10 Dec 2008 04:19:43 GMT</pubDate></item><item><title>flukus commented on Consenting Adults</title><description>I think I've said it before but I think the problem stems from MS throwing everything into the .net framework and developers that don't look into anything thats not in the framework.
  
  
So now the framework has 2 GUI libraries (winforms and WPF) and neither can be significantly refactored because it would break old code.
  
  
If it was in a separate (distributable) library they could break anything they want between versions.
</description><link>http://ayende.com/3744/consenting-adults#comment3</link><guid>http://ayende.com/3744/consenting-adults#comment3</guid><pubDate>Wed, 10 Dec 2008 03:20:50 GMT</pubDate></item><item><title>joe commented on Consenting Adults</title><description>I suspect you are right, Paul, but perhaps "cuddle" is a cunning and ironic lead-in to future post on what Microsoft is doing to some of it's "consenting adult" customers via poor guidance and near prohibitive licensing costs?
</description><link>http://ayende.com/3744/consenting-adults#comment2</link><guid>http://ayende.com/3744/consenting-adults#comment2</guid><pubDate>Wed, 10 Dec 2008 01:27:49 GMT</pubDate></item><item><title>Paul Batum commented on Consenting Adults</title><description>I think you mean "coddle" rather than "cuddle".
</description><link>http://ayende.com/3744/consenting-adults#comment1</link><guid>http://ayende.com/3744/consenting-adults#comment1</guid><pubDate>Wed, 10 Dec 2008 01:09:28 GMT</pubDate></item></channel></rss>