Are third party dependencies evil?

I recently posted about a problem I had with the Microsoft CTP DataGrid I was using. I quickly got a response from Odi from Xceed, asking why I wasn’t using theirs. Good question, and deserves it’s own blog post.

xceed DataGrid

The truth is, I’ve been burned by third party controls in the past. In general, third party controls work great when used in the sterile lab environment. The problem is, it seems like every project I work on has some requirements that tend to break them.

For example, a recent website I worked on had a requirement that every page had to have an HTML extension, even though every page was an ASPX page. Depending on how it’s implemented, many third party controls just couldn’t handle it. In fact, it’s hard enough to get the core ASP.NET functionality working properly with some features such as postbacks. Adding poorly written third party components would have made things worse.

Ok, so why is it alright to use Microsoft’s controls instead of something from a third party? In my experience, the code the Microsoft gives you tends to be lacking in real functionality, but is usually very reliable. Even when they’ve had an issue, there was enough support to get a work-around, and probably a fix in the next service pack. Microsoft products tend to get better over time, and without any upgrade fees. They are a well established business with a guaranteed audience.

The 500 lb Gorilla

Let’s take the .NET TextBox as an example. Ever run into a situation where you’ve found it to be unreliable? I haven’t. I have run into a situation where a third party alternative had all the bells and whistles you could think of, but had some major issues. You push the up arrow and the application bombs. Darn. You could only use it in a certain way, or it wouldn’t work at all.

K.I.S.S – Keep it simple, stupid

Is this a rule, or a good practice to follow? Depends what you need. I use third party dependencies all the time. I typically only use them if they’re in widespread use, mature, and under current development so I know fixes will be round the corner. For example, here are a couple of great ones that I recommend:

  • Log4net
  • NHibernate
  • RhinoMocks
  • Spring.NET

If you’re curious what criteria I use when looking for a third party control, be sure to check out my post about 10 things to look for when evaluating third party controls.

In general, I think Joel has a good guideline:

If it’s a core business function — do it yourself, no matter what.

I’ve tried desperately to come up with a great example of when his rule doesn’t work. At one of my previous jobs, I wrote a lot of reports using complex charting. We had a great third party charting library, but we always had strange ways of working around its interface. It’s probably the best example that I might have to counter his rule, but it probably wouldn’t have taken any more time if we had written the charting ourselves.

Conclusion

If you need a quick and dirty simple control, and it’s already part of your toolbox in Visual Studio, just use it. If you outgrow it, or have some special requirements, see what is out there. In my case, I think the Xceed grid would have been overkill. Microsoft will fix their bugs, and my application will only get better. If you need a grid that does more than display some simple data, take a look at what Xceed or another vendor offers. Their control has certainly been around the block, and looks like it has a lot more features.

Kick It!

3 Comments so far »

  1. Odi said,

    Wrote on September 10, 2008 @ 4:58 pm

    Awesome that you responded with a blog post, thanks. I agree with your conclusion paragraph, but have seen that developers often do not realize they have outgrown the built-in toolbox control, and end up spending a lot of time trying to work around the limitations.

    As far as reliability is concerned, sure, the stock textbox is ultra-reliable. But what about all the extensions you have coded around it to get it to do what you need it to? That often lowers the reliability. For example, when you suddenly realize that the WPF textbox doesn’t have “masked textbox” functionality, and spend a few hours implementing and testing it, is it still ultra-reliable? You may have been better off opting for a 3rd-party control which has been better tested and been around the block.

    As for building your own DataGrid, I can’t imagine that would make sense, especially in WPF where you should really spend a lot of time designing your architecture or you can get burned. In Jan. 2007 we had logged about 11K person-hours to design and develop v1.0 of our WPF datagrid, and am quickly estimating nearly 30K hours at this point. That’s a lot of dollars put into this one WPF control, built entirely in North America by experienced developers.

    Sure, you wouldn’t build all the features we did in your custom grid, but it still is a considerable undertaking, and there’s risk in building software, you aren’t guaranteed to do a better job, finish on time, or even achieve decent results. But like you said, if you can find a control that’s “in widespread use, mature, and under current development” then strong consideration should be given versus building it yourself. How do 7 major releases and 12 service releases for a control less than 2 years old sound? And thanks to the free version, a huge number of users.

  2. Jason said,

    Wrote on September 10, 2008 @ 9:27 pm

    Odi, I think I’m in agreement with everything you mentioned.

    Your DataGrid is the first I would check out if I needed anything fancy. In fact, I had tried it out a little bit until I found out Microsoft had came out with one. In my case, I honestly only needed something as simple as possible.

    I saw yours a few years ago, and just based on the fact that you seemed to have one long before the competition starting thinking about writing one.

    I have no doubt that your grid will stay around and see great success!

  3. Will said,

    Wrote on September 12, 2008 @ 8:35 am

    Huh? Rhino follows KISS? There’s at least three different ways to do the same thing in the latest Rhino release.

    MoQ is a much KISSier framework. Rhino suffers from code bloat held over from previous versions.

Comment RSS · TrackBack URI

Leave a Comment

Name: (Required)

E-mail: (Required)

Website:

Comment: