On Reuse and Thrashing

time to read 4 min | 626 words

There is an interesting debate in the Castle deveoper list at the moment. It is interesting because I think that all sides agree on just about all the points under discussion. :-)

Anyway, it got to the point where the subject of 3rd party controls and Mono Rail came up. Mono Rail has support for Web Forms view engine, which means that you can use all the usual ASP.Net controls (the in-the-box ones, Infragistics, Component Art, Telerik, etc). As readers of the blog already know, I am... not fond of the Web Forms idea. At best, this is a leaky abstraction.

Hammett qouted someone telling him this:

"try saying to a CTO that they wont be able to leverage on third party controls"

Here is my (somewhat edited) reply that statement. Keep in mind that I recognize the difficulity in trying to sell something like this to a company. The ability to reuse their invesement

About a year ago I posted why I don't like the ASP.Net Web Forms model, my option hasn't changed drasitcally in the meantime. My response to the third party components issues is to direct to this post. And tell a tale from a far off land called the Here&Now:

I am working on a project now (over a year in development alone, several teams, complex domain, complex requirements) where the downstream team has evaluated and purchased both Infragistics and Component Art. (This included a source license for Infragistics, and maybe Component Art as well).
They were drawn to the big benefits of being able to utilize 3rd party controls, speed up their dev time, etc. 

Overall, I think that they spend quite a few man months trying to get those controls exactly the shape that they wanted. Eventually they abandoned most of them (there are remains here are there), and are using controls built in-house  (mostly based on the default MS ones) to do all their presentations. The adventure with 3rd party controls cost them tens of thousands of dollars. And their codebase has four sets of controls, Component Art, Infragistics, Microsoft, Inhouse, all of them doing roughly the same thing, all of them subtly different.

Granted, in many cases, you could do quite a bit with 3rd party controls, but I find that the minute that I need to do something extra, and I always need to do something extra, it is taking me more time to get it right than it would have taken me to write it from scratch.
This is why my part of the project has 5 calendar controls, each written for a specific page (need to do a lot of coloring of the data, different colors, algorithms and data per page), instead of a super complex single calendar.

In most cases, I find that I don't need all that extensability / features in a control, I usually need a very small subset (which you probably couldn't sell alone, so it gets a lot of extra functionality, to fit a lot of cases). Writing that functionality by myself wouldn't take much longer than learning a new control and figuring out how to get it to where I want.