Background:
I work at a company with a large SAP investment, and we also have dozens of large .NET systems (mostly internally for engineering systems), and Java platforms (mostly for external web applications). As such, we have large development shops on ABAP, C#, and JEE.
Question:
In short, We need a better way to determine when Commercial, Off The Shelf (COTS) software should be used, and when we should leverage our own developers.
Criteria:
I'd like to build a decision tree based on best practices to help with this question.
At the highest level, Jeff Atwood's related post sums it up well: The Best Code is No Code At All
A little deeper, I'd like to see criteria like:
Is a COTS system available that meets most of the requirements? (If yes, a COTS system may be a good option: (Avoid reinventing the wheel))
- If so, is there a fully exposed API available? (This is essential to integration / customization)
- If so, is the source code available? (This is essential to deep integration / customization)
Is the system designed to meet a core business function / create a competitive advantage ? (If so, custom development may be a good option: See Joel Sposky's: In Defense of Not-Invented-Here Syndrome)
- If so, will custom development allow for code reuse in future / other systems? (There are many advantages to reusing existing code)
What is the TCO for the custom application vs. the COTS product?
Are there time constraints that could not be met with custom development? (If yes, a COTS system may be a good option)