Advantages of Using Components  
 
The usage of software components provides the following advantages :-
 
  1. The code is already developed and tested and as such is proven . It is mature code . The risks have been taken out of the development - it can be relied on !
  2. Project unknowns are removed - the components are already working . Internal company cultures can be kept out of the way of effecting the successful development of projects . Success is guaranteed !
  3. The code does not need to be redeveloped - the wheel does not need to be reinvented .
  4. The long term capital cost of the software is minimised both in terms of ongoing development costs and in terms of code maintainence ( updates etc. ) costs .
  5. The capital value of the software is maximised due to the general nature of the software and hence it's broad area of application .
  6. The use of components allows you to move your business from one of a per customer contract basis to a fundamental technology basis thus maximising your market penetration . It allows you to embed extra quality within your products thus maximising your competitiveness .
  7. Project development time is greatly reduced . The components are already developed . They just need to be set up and configured .
  8. Development time and costs can be closely managed - unknowns are eliminated - the hard work has all been done .
  9. Connected work - eg. areas that require external inputs and require output displays - can proceed much sooner thus further reducing the development time of the project .
  10. The development cost is greatly reduced . The competitiveness and return on investment of the company is maximised .
  11. The use of components means that the project is designed with a definite architecture . As such the interfaces are clearly designed and the intercomponent relationships clearly defined . Further the project is designed in a manner that is easily expandable . This means that ongoing costs and development times are greatly reduced . Also maintainence costs are greatly minimised .
  12. A high level of knowledge and expertise is brought directly into the project and the company . The component supplier has experience over a large number of projects and clients and brings this experience directly into the component construction and supply .
  13. New knowledge , expertise and features are brought in as they become available .
  14. Companies starting off often don't have the time and resources to gain a large technological edge over their competitors . The usage of components allows them to gain this advantage .
  15. The link with the developer can be maintained thus ensuring that code maintenance and updates are easily handled . If external contract staff are used for code development there is no guarantee that they will be available subsequent to the project completion to maintain and update the code . If a component supplier is used maintenance and updates are supplied as part of the support service .
  16. Quality is guaranteed . Further the specification of the usage of specific component suppliers by the customer ensures that the project is designed to the desired level of quality and capability .
  17. Componentising a project means that all problems are localised , identified and solved . Further it also means that the project is easy to evolve , improve and upgrade . A change in one component usually does not effect other parts of the program .
  18. Extra features are easily added by just substituting the existing components with new components .
  19. Components have to be general . As such they have a far greater life time than project specific code .
  20. Component suppliers are usually highly motivated . It’s this motivation that ensures that you get the best product .
  21. Component suppliers are often prepared to expand the features and capabilities of their products in order to account for new market areas .
  22. The code is easily audited . Security is not an issue .
  23. Support and maintenance costs are minimised - there is only one piece of code to maintain .
  24. Support is supplied as part of the component license purchase .
  25. Copyright issues are not effected . The components can be used without effecting the saleability of the company's products whilst maintaining the original copyright of the component supplier .
 
Factors to Consider
 
Development Costs
 
The current economic times mean , even more than usual , that companies have to be as efficient as possible . Prices are being driven down and R&D budgets tightened . As such :-
 
  1. The lower a cost structure a company has the greater is it's ability to be able to keep it's prices low and to compete and survive . This is going to be a critical issue with component suppliers . Generally the small size , low cost , small volume companies are going to survive over the mid to large size , high cost , small volume companies . Customers are only going to be prepared to pay what they can afford not what the product may be worth . As such price breaks are forming up between a ' spare cash ' amount - money that can be easily and safely risked ( ie. not requiring a large sales base ) - and a ' significant purchase ' amount - money that requires a large guaranteed sales base to justify the expenditure .
  2. Clients of component suppliers have the very pressing issue of not only keeping R&D budgets low but also ensuring that the commercial risks are quantifyable and bracketable . As such using components - where the cost of the components is known and where the configuration costs are minimal and the project development time is minimised - becomes even more attractive than usual . The situation is very much becoming one of ' use components and survive ' .
 
Porting and Intergration Costs
 
When looking at component suppliers it is very important to evaluate them as regards the cost of porting their components onto your hardware . A well designed module will have a simple , clean and well designed hardware and operating system interfaces . The hardware and operating system will be accessed through single points . None of the rest of the code will have parts that have to be modified for individual platforms . This is very important as it can greatly impact on the porting time and costs . A good component supplier will also supply a broad range of device drivers . The will be easy and quickly adaptable to your hardware . Typically porting a well designed module - with the device drivers , fonts etc. being supplied - should take 2 days at most . It should be easily accomplishable and should be accomplishable by any decent engineer - in house or contracted .
 
A well designed module will have a simple , clean and well designed Application Program Interface . This is very important as also greatly impacts on the integration time .
 
One of the factors that should be considered is :-
 
Is the module a separate , specialised , module that is only available from a single or small number of suppliers ? or is it readily available from multiple product suppliers ? If it is available from multiple product suppliers then the range of products supplied by those suppliers becomes critical as the fact that they can be obtained from a single supplier means that the integration costs of the components from the supplier with the components from the supplier are eliminated .
 
For example - if you are looking at operating systems , IP stacks and web browsers etc. it makes much more sense , integration costs wise , to buy from a single supplier .
 
One of the considerations with operating systems , and consequentially operating system suppliers , is the type of operating system supplied as this can impact strongly on the initial costs . Operating systems can be simple Co-operative Operating Systems which are low cost and very effective or they can be much larger and much more expensive Real Time Operating Systems . Very often when going for a Co-operative Operating System or an in house operating system the path then leads to sourcing separate protocol stack components . This is easily done but the added integration costs have to be factored in . When choosing items such as web browsers and email packages what should be a simple task of porting and integration can often be made very costly due to bad design of the browser and email packages . This is further aggravated by the need to purchase , separately , font libraries and rendering engines . This is why it is very important to consider suppliers who can provide not only the operating system along with device drivers , font libraries and rendering engines but also the web browser and email packages .
 
Ongoing Costs
 
Ongoing costs - code maintenence - updates and bug fixes - these greatly effect the capital cost and capital value of the components . As such it is very important to pick suppliers who actually produce quality code - not suppliers who say that they produce quality code but rely on expensive post sale fix up's which will not only delay your project release but will also have added costs that have to be factored into the purchase price .
 
A second factor that has to be considered - associated with the capital value of the components and hence modules - is how easy they are to upgrade and expand . This is dependent on the structural design of the modules . Basically if your component supplier is providing components that can be easily , cheaply and quickly upgraded and expanded this means that their subsequent development costs are minimised . This means that your ongoing costs - as you upgrade and as you produce new products - is minimised . This can be a very critical factor and can cause massive problems down the line .
 
Middleware Suppliers
 
Middleware Suppliers often don't supply operating systems . As such their products have to be designed such that they can be easily ported onto existing operating systems and hardware . Porting time is dependent on :-
 
  1. the complexity of the interfaces .
  2. the number of the operating system functions .
  3. the number and complexity of the platform specific functions
 
Typically porting should take no more than a few days - definitely not weeks .
 
A well designed middleware product should have the following basic features :-
 
  1. simple interfaces .
  2. simple platform specific - eg. device driver - requirements .
  3. extensively instrumented :-
    1. at entry points .
    2. at operating system call points .
    3. at operating system call return points .
    4. at strategic points .
    5. at entry points .
  4. extensive bullet proofing - should be able to handle all forms of data etc. ( whether valid or invalid ) without locking up , causing corruption or going into space .
  5. well documented - concise and easy to understand .
 
Knowing What You Are Getting
 
There are two quite different approaches to the market undertaken by companies :-
 
The first are very ' up front ' about their products and their prices . They provide full information on their products . They allow their products to be readily , freely and fully evaluated . You can see exactly what you are getting . These companies can be trusted and relied on . They design their products for the customer . They are good companies to deal with .
 
The second may provide the semblance of being up front but , in fact , work very hard to prevent full information being released on their products . They manipulate their customers into buying what the customer believes is a good quality product but is in fact a very expensive and very poor quality product . Often a lot of the problems and limitations of the product are buried below the surface . It's only when the product has been purchased that these become noticeable . They rely very much on emotion to sell their products . They design their customers for their products not their products for their customers . These companies should be avoided .
 
Avoid the ' Black is White ' company - the type of company that tries to make itself out as something it isn't and tries to change other people's perceptions of other companies away from what they actually are .
 
Look for companies where the staff really know what they are doing and can easily provide for new situations .
 
The Component Supplier is very much a Solution Provider in that the Component Supplier is providing a set of components to solve a design problem . This can often be :-
 
  1. a lack of available development time within the company .
  2. not wanting to re-invent the wheel .
  3. wanting to bring in expertise that is not present in the company .
  4. wanting to save development costs .
 
As such it is very important that the components easily integrate and provide a complete solution to your requirements .
 
Choosing the best suppliers is very much a case of having good judgement . This is , of course , very much reliant on good knowledge of self and of life .