I've thought about posting this for a while now and responses to my architecture post by Dave and Dru have got me thinking about it again.
I avoid open source frameworks or libraries in our production desktop applications. I don't have a problem with third party when it comes to web applications or internal apps. I use AjaxPro and skmRSS on Where's Tim and my home site. I use Indy.Sockets all the time in our internal apps.
Where's Tim is just for fun though and if it goes down, it's not that big of a deal. And our internal apps mostly just automate things that could still be done manually. When it comes to production applications, the apps that pay my salary, I get a bit possessive over what we deliver. ParaPlan isn't a helper application. It's is an agency's backbone. Our client's entire lifecycle of doing business is generated by, or inputted into ParaPlan. If our software runs into a bug and one person can't do their job, then everybody else's job is impacted by it. Kyle and I give all of our clients our cell phone numbers, and when something goes wrong, we get called and they have to pause their operation until we get it fixed.
For me to properly support our clients, and to keep my cell phone minutes under the allotted bucket, I need to understand everything that our code is doing. I don't feel comfortable using third party code because I don't always know the author's true intentions. Generally, it is intuitive and 99% of the time, it works. But I don't like taking the chance that it might not. We also have unit tests and pre-deployment processes that should catch most problems, but just because it worked on my machine and it compiled on the build machine doesn't mean it's rock solid. I don't want to be staring at a function at 9:00 PM on a Friday wondering why it's not working on a client's machine and trying to determine if it's my fault or a third party's library's fault. And I don't to be the one trying to explain to the client why I used somebody else's code and that's why they can't do their job.
I also feel that third party library's can limit your scalability. It's just another link in the dependency chain that could be broken as you adapt new technology.
The third reason why I avoid open source is purely selfish. I want to be the best developer I can be, and I would rather learn how to code the functionality than use somebody else's code. That might mean that it initially takes me longer to push something out the door, but it makes me smarter and more valuable to EnGraph. The next time I'm faced with a similar problem, I'll be able to use the knowledge that I learned instead of throwing a third party library at it.
I do use the Enterprise Library in my production apps. I feel better knowing that it is delivered by Microsoft.
In no way is this a knock against people that consume or develop open source libraries. I'm not scared of proprietary information, I post my code all the time. I also pick apart code from open source libraries to understand what they are trying to accomplish. I think the open source community is a great thing. It's just not something I want to use.
Technorati tags:
open source,
Dave Donaldson,
Dru Sellers,
AjaxPro,
skmRSS,
Indy.Sockets,
ParaPlan,
EnGraph,
Enterprise Library,
Where's Tim,
Kyle Archer