Be Silent! They are Agile!
Yes, this is another response to Sam's post, and this time is has nothing to do with the CAB or P&P. This is about a few things in Sam's post that really bothered me:
- Let's leave out the fact that three of my best friends in the world designed and implemented CAB. That's just the personal stuff. My problem is simply that many of the assumptions and things they wrote are patently false. They don't know these people, they don't know CAB at all.
- But what I object most is how they are targeting the wrong team in Microsoft! The P&P teams are one of the ONLY if not the ONLY team(s) in Microsoft that do Agile XP.
- Here's a group trying to spread the good news of Design Patterns/Fowler, TDD, Agile and Iterations, etc and you have to stick it to them?
So, let me rephrase that.
If:
They are your friends and they are doing agile, TDD, XP, etc.
Then:
I must not criticise what they are doing, even if I think that they are doing something wrong.
I am all for Agile and TDD, and I love to see people using them, but I don't think that this makes them automatically successful, or that they will choose the best approach. And I am certainly not going to let the fact that someone is doing Agile or Open Source, or something else that I also believe in, to stop me from telling them that they are wrong.
I think that the P&P team is going in the wrong direction, I can see why but that is not relevant to the discussion, that they are agile (or Sam's friends) is not an issue, I still think they are wrong.
Comments
let the links begin!
1st. I'm with you Oren.
It doesn't matter how many posts you throw at P&P it's still way too crazy complex. to me, that is the wrong way to go.
Please excuse the grammatical errors, I'm ay ink blogger-.')
What is it that we're arguing about here:
The stuff the P&P guys put out (specifically CAB) is overly complex
The stuff the P&P guys put out is built in a vacuum and has no basis in real world applications
All of the above
You said "I think that the P&P team is going in the wrong direction". Fair enough as everyone is entitled to their own opinion and yours is as good as anyones. So are we offering a better direction for them to go in, or are you (and maybe Jeremy) just saying that rather than going right you can go left (or up/down, whatever) and you're saying that anyone can build what they need rather than learning CAB/EntLib/etc. and trying to build on top of that?
What I am saying that in my professional opinion, the CAB is overly complex for its use, and it is possible to take advantage of the underlying concepts in a simpler way.
I don't really have a constructive suggestion to refactor the CAB, since some of the basic assumptions there goes against what I believe (services vs. frameworks).
Here's what I don't like - 4 posts instead of one.
What I meant is that you and Jeremy seemed to be saying that they did things BDUF. I don't recall which post but there seemed to be multiple implications that they worked in a way that produced an up-front over-engineered piece of software. And I was trying to point out that those things are false and that you didn't understand how their software was developed. That's it, simple as that.
It's silly to think that Agile (or any other method) would gaurentee success. If the post seemed to say that, then it is my fault for not articulating my points. I really don't care what people use as long as it produces business value. Again, my points were focused around countering the seeming impression that this software was devloped in a vacum with a methodology that wasn't iterative and didn't have feedback loops. And that is false.
I get that you don't like CAB and you are allowed to have that opinion (or any other one you have). But the way you say things (I am far from the only one) seems to codemn others that choose differently. Is CAB perfect? Far from it. Is CAB too heavyweight? Probably. Depends on how you look at it. If you take into account all the things it is doing for you in complex Windows Forms apps, I think it is not perfect but offers a lot of value.
The question always comes down to buy vs. build. You take a look at your business needs and your development team skill sets. If the development team doesn't match for producing framework pieces like this or even growing them organically and there ar eextreemly tight deadlines, you look at "buy." I don't know the Castle stack well (I do know CAB very well plus WSSCF, SCBAT, etc) and you put together all the different pieces needed to do something like this it seems to be just as complex.
Single Responsibility Principal.
The let them say their piece of forever hold their tongues.
The CAB is complex, and in my opinion it is overly complex. Building a framework where you are not the first customer is usually a bad idea in my book, resulting in complex design, because the feedback cycle turns to be too long.
Not everyone should just build a framework every time there is need. Frankly, most developers are no where near as talented as people like yourself to build a framework just in time in an iteration system without blowing all the iterations. There is also that there is a lot more to a complex Smart Client than just the DI/IOC and Event Brokering that CAB provides. I am just curious if you work in that space. It seems to me that there are quite a few "plumbing" pieces needed tyo create plugable Smart Clients that dynamically compose their UI based on criteria that you specify as well as stitching everything up. Looked in that light there is a lot of value. Looked at as just the other things, it looks way overengineered.
Okay, now we getting somewhere.
Can you expand on what you mean by more than DI/ Event Brokering that you need in order to create a Smart Client?
From my survey of the CAB, I assume that you are talking about smart parts, but I really don't see a whole lot new stuff there. Maybe I missed something?
I know you want to keep having this conversation but it is Memorial Day weekend in the US and my kids are screaming at me to go to the Beach/Jersey Shore :) Can we pick this up on Tuesday?
Have fun, we will pick it up later
Having worked on a 14 person, year long project usign CAB , with some of the most talented developers I have ever met ... I can tell you CAB is practice is pretty awful.
3 months after I joined the project - it was cancelled, CAB had significantly contributed to that failure.
CAB itself is not good, and I think Oren only ever critised the CAB itself, not the developers who worked on it, nor their use of Agile or not.
There are at least three topics we can discuss here:
What is the charateristics of CAB? When should it be used? When shoudn't it be used? If I tell you about my project, will you be able to tell me whether I should use CAB and why?
If CAB is 'generally' not good (I believe it's Microsoft's goal to provide generally good tools), why was it built that way? Is it because of overengineering? Is it because of the process
Is it possible P&P can produce generally good products?
I don't really care about 2 or 3. Ayende talked about #1, speculated on #2, and implicitly refer to #3. I just want to know more about #1.
Happy Memorial Day!
@Casey
Now thats some good practical feedback, thanks for sharing.
Ayende, I think the content of your blog is fantastic. We come here to actually read technical content, even when opinionated. I don't know why anyone takes Sam seriously. This whole incident reminded me of some things I read years ago on a .net mailing list. I did 2 seconds of googling and came up with it:
Here is Sam's response to Miguel de Icaza beginning his open source mono project:
http://discuss.develop.com/archives/wa.exe?A2=ind0107B&L=DOTNET&D=0&P=27259
Here is what Sam Gentile thinks of open source:
http://discuss.develop.com/archives/wa.exe?A2=ind0107B&L=DOTNET&D=0&P=28240
So... Keep doing what you're doing. This community needs more choice and more voices outside of Microsoft. We need more people actually innovating and contributing like the Java community, and less of the content-free Microsoft apologists, who do nothing but angle for their next consulting gig.
Keep it up Ayende (and others), I certainly appreciate it (and I am not the only one!)
wow, that put things in perspective on so many levels.
I hope you don't mind if I join the party :) I tried to post this several times, but my comment was too long. So you can now find it here....
http://blogs.msdn.com/gblock/archive/2007/05/27/is-cab-complex-and-if-so-why.aspx
Rob,
That's beyond the pall. That was 6 years ago and not what I feel now. I am not aggainst open source and I use lots of OSS stuff on my current project. How about you identify yourself?
Rob,
This is not a war. It is not OK for you to dig up dirt. I posted a followup in which I said that my post had things that were not good and were personal attacks and shouldn't have. I also said that I highly respect Castle, StructureMap as well as things like CAB. I see no reason for this attack. I did not attack OSS stuff, I attacked the way I thought Oren was misrepresenting the PAG group and CAB. There is no need for this.
@Casey
If the project has failed this does not mean CAB has contributed his failure, it depends how has been used, how long has been "understood". I've introduced CAB fwk on a new project in February 2006, and up to now after 16 months we have done a mini-refactoring only. Maybe the CAB philosophy has not been mean very well by your architects. General speaking, when a project fails might be several causes even not technical.
Just a few word about my personal experience with CAB.
I worked one year in a very complex CAD/CAM project and used CAB to have a modular high decoupled infrastructure. Even if I did not use certain CAB costruct ( state for example ) we managed to do what we proposed, and the library looks very stable. The only thing I dislike is that we need to do some hack if we want to use CAB IoC in a non GUI project...
What I think is that, if we leverage correctly a IoC framework, should be really easy move to another one. Anyway at the moment I don't know any other framework that really can help the GUI part of the infrastructure: this is what CAB really offer more than, for example,Spring.NET or Castle. I'm not investigating the internal CAB design, I tryed to extend sometimes ( to have a proxy service as castle offers ) but I did not have so much time, and, indeed, not a real exigence.
The best frameworks in the world comes out of destillation from existing systems. The PAG do not have that luxery.
That is why what they produce is "practices" not frameworks, example implementations that are meant to get you started, inspired and lead the way.
That said, if what they build from a pure educational perspecitve will help you in yout applications, good for you, but they where still written for educational purposes (and partly for lobbying solutions to the product teams). PAG is not a product team.
ROFL !!!
Comment preview