[ComponentDesignPatterns | CategoryProtoPattern] '''Context''' You are determining the requirements for a solution that will contain both pre-built and developed components and frameworks. A pre-built component exists that might meet requirements, and you need to do analysis in order to understand whether any of the pre-built alternatives meets requirements. Sometimes the purchased solution is more expensive than the developed one. Your organization might perhaps have one or more solutions being used currently, and a global in-house-developed standard solution that meets all your requirements is desired. '''Problem''' How do you decide whether to purchase pre-built components or develop them yourself? '''Forces''' * Developing software is expensive; we can save time and money by reusing it. * Too many pre-built components are difficult, complex, and frustrating to assemble. * Assembling pre-built components requires less expertise than developing them. * Assembling pre-built components requires understanding assumptions about underlying component implementations, and less skilled developers can get in trouble and not know how to get out.. * Developing components gives the developer more control over implementation, coupling, and interactions with other components and frameworks. * Skilled developers are a scarce resource that are better used developing the solution than developing infrastructure components and frameworks that can be purchased elsewhere. * Experience in building the functionality the pre-built component provides can be minimal or non-existent. * Pre-built components often have bugs, and always make assumptions. These assumptions are usually difficult to change, so you need to understand their implications on the rest of the system and whether the components will fit in. * OpenSource or pre-built components with source code available provide the developer with the code behind the component. * The learning curve in understanding the design and implementation of a component can be expensive. * Skilled developers can be motivated by ''not invented here'' syndrome and may be inclined to blindly choose the build option over the buy option without a full assessment of the merits of each existing alternative. '''Solution''' Be cautious about acquiring pre-built components. Steal their ideas or steal the source code and use it to leverage your way into a more informed solution that meets requirements not necessarily fully offered by the pre-built alternatives. '''Resulting Context''' '''Known Uses''' '''Example''' '''Related Patterns''' ------ Any takers? --PhilipEskelin ----- Interesting point, we recently ran into a case where attaching a VisualBasic data control to one of our data sources meant that the process memory went up to 90MB and down again every time you did anything in design mode --- very slow and tedious. The VJ equivalent did not, so it's fixable. We can't get inside the component, and we don't want to rewrite this standard stuff ourselves. It would be really nice to be able to get in there and see what's going on. --SteveFreeman