tags:

views:

483

answers:

15

What prompts my question is this post from Jeff Atwood, and this post from Dare Obasanjo. It seems to me that there might be at least a few areas where third-party functionality is a better idea than custom code.

For example, should logging always be third-party? How about encryption? Or search?

I'm looking forward to everyone's feedback on this.

Edit: This question assumes that logging, encryption, and/or search isn't your core business.

+3  A: 

I fully agree that encryption should only be done by experts whenever possible. It should also be open source and have undergone a good deal of peer review.

mmacaulay
Unfortunately, the US government has set up a process that discourages open source cryptography. Certification of a crypto module under FIPS 140 is very expensive and doesn't lend itself to a decentralized sponsor. NSA has done some nice things with open source though.
erickson
+2  A: 

The area where I have consistently used third party controls was charting. It is a fairly common problem to have to chart some batch of data and the third party controls are mature and trustworthy.

epotter
+4  A: 

My rule of thumb is to use (or at least consider) third-party for anything that's outside the core purpose of your business.

Encryption's always been the prototypical example of this. But it extends to other areas as well.

Writing logging code for troubleshooting during development is entirely different than writing logging code used for monitoring production systems.

It's all about choosing which areas of development actually add value to your project. Using third-party stuff removes the risk that that component is incomplete/buggy/etc. but comes with the risk that it may not be as flexible as what you need.

Another example would be developing an entire web forum for a website, when you can buy a solution for much cheaper.

BQ
+15  A: 

Encryption should be third party most of the times, ...unless you're in the business of selling encryption systems.

Which is pretty much Mr. Atwood his point as I understood it, your core busines shouldn't be third party, so there's probably nothing that should always be third party...

Pieter
+2  A: 

I guess the answer depends upon the usage. If you are developing for profit, you would be likely to buy in components if the cost of using the component vs the cost of developing it results in more profit. This is particularly the case with large components when you do not have the in-house expertise to produce them.

A couple of good examples that I have used are the Infragistics controls and Dundas charts. Although we could have created these in-house, the costs in terms of time and lost opportunity would be huge compared to buying a couple of licenses.

Of course, sometimes we do this type of thing without even considering it as a component purchase. Streching the imagination a little, you could include the .NET framework, SQL Server, the Windows API, etc.

BlackWasp
+3  A: 

It depends. Is there a 3rd party library available that suits your needs and most importantly, the language and/or API you work with. Then go for it.

If you have reasons to do your own version, make sure it's not just "not invented here". Also, if you haven't had an in depth look at the market's top five leading products for whatever you need, you haven't done your job thoroughly enough. There are good chances you will find what you are looking for, and even if you can't use it, you still learn something even from the library descriptions. At the minimum you will learn which features you would need and which you don't. If you also get the source code to one of the libraries, this should be your preferred choice over a competing library with no source code but possibly more features.

steffenj
A: 

Don't forget that the time is a big issue for writing all things by your hand, it is not that you cannot do that but the problem comes from your customers or company they always want to find the fastest way to build their system. But if you have a non-profit project you can try building things by yourself. For e.g you can use JQuery or Dojo as your ajax toolkit if you are writing web applications and you want to set some ajax functionality, it will take time to build those things by your hand :)

But you also must be careful when using a third-party libraries, you must trust them because they can contain malicious code, or they are very poorly written and can cause you headache.

milot
A: 
alexmac
+1  A: 

There is not a definitive answer to this question because just like anything else in software development it depends on the situation. I would say that if the following 3 items are true than you shouldn't think about doing it yourself...

  1. If it's not core to your business or expertise.
  2. If someone else has written it for you and it is being used in widespread communities.
  3. If it meets your needs and requirements or it can be extended to meet your requirements fairly easily.
SaaS Developer
+4  A: 

"What functionality should always be third-party?"

None. there is always an exception or special case to overrule the egregious use of "always" when discussing an essentially engineering decision.

Further, the decision to go third party should almost never be made on basis of a given "functionality." There is no such thing as such a perfect library that you never need go anywhere else for that type of functionality.

Going third party is a decision that should be made based on

  • Cost of going third party vs cost of doing it in house
  • Development time required placed against deadlines (ie, it might be cheaper inhouse, but your development timeline might not allow it regardless)
  • Ease of integration, debugging, maintenance, upgrade paths - it may be that you can develop something that will "do the job, but barely" inhouse vs not much more money for something that will take care of you for years to come
  • Ease/cost of testing and proving - security packages are notoriously difficult to test well

However. There are some things where it's really tough to believe that going in house is better. For instance, you can write a competitor to OpenGL and DirectX, and in certain applications (scientific computing, etc) there are good reasons for considering such a path. But in general you wouldn't dream of it. Even though it's "free" it's still a third party dependency, and you could end up on the skids because of a bug which only affects how you use these graphics languages.

In other words, some incredibly complex or hard to prove/test things exist which should almost always go to a third party. Security is another one. Don't write your own hashing algorithm unless you are 1) certifiably crazy and 2) have at least 3 excellent business reasons to do so.

But "What functionality should always be third-party?" None. There's always an exception.

Adam Davis
A: 

Anything that is outside your core business is a good candidate for third party solutions. You want to spend your development time creating that core functionality that is unique(ish) and can not be purchased and used in a cost effective manor.

For example, lets look at web gridview control. Can you develop and extend a gridview yourself? Sure you can, but to develop, code, and test you grid view is going to take X amount of time and resources, which you can translate in to dollars. Now you have factor in reoccurring costs for support, maintenance, and bug fixes.

Now lets use the arbitrary amount I remember reading in some mag about the average US developer making $40 per hour including their benefits. There are whole web control suites available for around another approximated $800 per developer license. If your developer spends more than say 25 hours total on this one control, you could have purchased a whole suite and spent 5 hours integrating and testing.

Now hopefully I didn't get too confusing there, but the general gist is if you can buy it off the self it will probably save time and money, and instead focus on things you can't get off the self which are usually your money makers.

Loscas
+2  A: 

If you can buy it cheaper than you can build it, and the bought functionality meets your business requirements, then buy it.

Grant Wagner
A: 

I'd say for writing boiler plate code, or redundant code which is copy and paste almost every time should be done through a library. For me, validation code almost always has me making stupid mistakes, because it's boring. Spring.NET is amazing for this. I'm so glad my boss encouraged me to try it.

+1  A: 

This question is the inverse of the question: what software should you create?

Which is obviously silly.

For both there is no one answer, it depends on the needs of your business. Do you need to build a better search engine for the entire internet? Almost certainly not. But if you are Google in the late 90s, you do. 3rd vs. 1st party is just a matter of which office you work in, every 3rd party is a 1st party to themselves.

  • If all you need is good enough: use something off the shelf.

Either you'll create something lower quality or you'll waste money and effort on something that doesn't matter that much, or both.

  • If it's the foundation of your business: build it yourself.

If you can build something better, and you can build a business out of that better thing, then do!

Wedge
A: 

seems you have all the answers you need, but i would just like to throw my opinion in here along with everyone else's. clients pay you to make applications that work specifically for them, and that's usually why they go to you; something they need isn't found in any other product on the market. thus, your focus should be on developing that specific part they need.

undoubtedly your application will need to do other things as well. maybe it will need to connect to a database, or encrypt certain lines. this is where third-party libraries come into play. you don't want to waste time writing a new driver for a database, or a new encryption scheme that might have holes you don't have time to test. you want to use the ones that already exist, and have been extensively tested and optimized.

remember, the faster you finish, the less they will have to pay. this makes them happy and want to come back to you. this also means you make more because even though they pay less, you can work on more projects, which means more money.

in conclusion, you should rely on third-party libraries in miscellaneous modules.

anonymous