• 2.1 Concept of outsourcing. • 2.2 Six different sources of software. • 2.3 How to evaluate off-the-shelf software. • 2.4 Reuse and its role in software development Concept of outsourcing • Outsourcing is a business practice where a company contracts out certain tasks or functions to external service providers rather than handling them in-house. This practice is commonly adopted to improve efficiency, reduce costs, and focus on core business activities. • Software Outsourcing is defined as “A method of employing a third-party service provider or expert to develop a software project.” Outsourcing software development has become prudent for every business to continuously evolve. It is challenging for businesses to stay abreast of changing technology trends, manage overall operations, within budget and also gain an edge over the competition. This makes hiring a software outsourcing company a strategic decision for efficient, cost-effective, and successful software development. Previously, this outsourcing method was more inclined to the financial stature of the business, but now there are hundreds of influencing factors responsible for outsourcing software development. • “Software development outsourcing involves hiring an individual or a team from external sources to handle some or all of the software development projects”. • Software outsourcing takes place when companies choose to have custom software solutions developed by a third party. Outsourcing software development has many advantages including cost reduction, improved efficiency, mitigated risk, and enhanced security. 4 Common Types Of Software Outsourcing • Homeshoring: this involves delegating the project to a software development team within the city or country you’re in. With close proximity, the teams can be invited to face-to-face meetings. • Nearshoring: this type involves tapping an outsourcing company to work with that’s located in a nearby country. It comes as a good option if you prioritize skill set expertise, cost-effectiveness, and minimal to no timezone difference. • Offshoring: offshore outsourcing work is commissioned to distant countries. It can entail large timezone distinctions and language barriers but gets you access to more expert developers that might not be available for the first two options. • Onshoring: the last type of software outsourcing involves bringing back a software development team to the organization's home country. What Are The Basic Outsourcing Models? • Staff Augmentation: this model involves giving the outsourcing company the job of putting together the software development team, handling day-to-day operations, and bringing the project to completion. However, the client can have a call on who to hire and fire, how big the team should be, and how the responsibilities should be distributed to each developer. • Dedicated Team: with this model, the outsourcing services handle every aspect of the project, and the team is retained for future projects. • Project-Based: unlike a dedicated team that works with a client long-term, a project-based model, as the name suggests, works with the client on a per-project basis. The outsourcing services handle most of the decision-making aspect of the project and the client simply gets updated through progress reports. Six different sources of software. Information technology services firms: • Organization lacks resources to develop in-house system • Suitable off-the-shelf solution is not available • Help companies develop custom information systems for internal use • Develop, host and run applications • Provide other services • IT Service firms employ consultants with domain-specific experience Packaged software Producers • Produce pre-packed or off the shelf systems • Products range from broad-based packages to industry specific packages • Two types of software • Turnkey – cannot be modified to meet specific users needs • Non-turnkey – can be modified • Off-the-shelf software can meet up to 70% of an organization’s needs. Vendors of enterprise solution software
• Also called Enterprise Resource Planning (ERP) Systems
• Consist of a series of integrated modules • Each module supports individual traditional business function • Accounting • Distribution • Manufacturing • Human Resources • Integrated to focus on business processes rather than business functional areas • Enables an organization to integrate all parts of a business process in a unified information system • All aspects of a transaction occur seamlessly in single information system Benifit • Single repository for all aspects of a business process • Ensures more consistent and accurate data • Less maintenance • Flexibility of modules • Additional modules can be added as needed • Additional modules are immediately integrated into existing system Disadvantage • Complexity of implementation • Extended implementation time • Reliance upon consultants • Often, organizations must change the way that they do business in order to use systems • ERP vendors Cloud Computing • Software is rented or licensed from third party providers • Run at remote sites • Applications are accessed through the Internet or a VPN • Applications bought, installed and maintained by service provider • Users pay per-use or month-to-month license • Includes software as a service as well as hardware as a service • Some examples: • Google Apps • Salesforce.com • Predicted that by 2015 will create 14 million new jobs. • Total market of $1.1 trillion. • Reasons for Choosing Cloud • Freeing internal IT staff • Faster access to applications than internal development • Lower-cost access to corporate-quality applications • Concerns • Reliability • Security • Compliance with government regulations • Sarbanes-Oxley Open-Source Software • Freely available • Includes source-code • Maintained by a group of interested individuals • Some examples • Linux • Firefox • mySQL In-house development. • Complete system • Hybrid systems Off-the-shelf software. • Off-the-shelf software refers to standardised programs that are mass-produced, easily accessible to the public, and ready for use immediately. They give a wide range of customers a comprehensive set of features that help operations run more smoothly. • Example Figma, Canva, Photosop, Gmail, Outlook, Windows Linux etc. How to evaluate off-the-shelf software. • Phase 1: Candidate product identification This phase identifies an initial set of candidate products and collects information for these products for subsequent phases of the evaluation process. The main sources for identifying candidate products are by reading literature, attending conferences and talking to experts. • Phase 2: Features identification In this phase, each product is studied separately in detail and its features are identified. As the first product is studied, an initial (or informal) set of features is generated. Any new and potential useful features existing in other candidate products and not in the features list is added to the list. At the end of this phase, a more comprehensive set of features is obtained. • Phase 3: Features classification In this phase, features obtained from the previous phase are studied in more detail and divided into two main categories: functional and non-functional features. Further, the functional features are subdivided into two categories: technical and general features. Then all identified features are sorted into these categories. • Phase 4: Measurement criteria identification. In this phase, measurement criteria are identified for each set of features. The measurement criteria are established based on the nature of each feature. • Phase 5: Scoring In this phase, products are assigned scores for each feature based on the identified measurement criteria identified in the previous phase. • Phase 6: Importance ranking In this phase, an importance rank is allocated to each feature. The importance ranks used are: critical, important, less important and optional features. The rank allocated to each feature depends on the user needs. • Phase-7: Initial selection If only one product supports all the critical features then the selection is made and the evaluation process ends at this phase. 6 If none of the candidate products supports all the critical features, then the evaluation should proceed to the eighth phase where rankings are revised. A small number of candidates (supporting the highest number of critical features) are passed to phase 8. • Phase 8:Phase 8 in the software evaluation process involves revising the importance ranking and features set for selected products. If no candidate product supports all critical features, considerations are made to demote or provide missing features in another way. If multiple products are selected, they may be ranked based on important features. The process includes revising the features list, importance rankings, and eliminating products that don't support critical features. The system supporting more important features is preferred. If no product supports all critical features, a detailed study is conducted, and if no preference emerges, a random selection is made. Reuse and its role in software development • Software reuse is the process of creating new software from pre-existing software components. • Reuse in software development refers to the practice of using existing software components or artifacts in the creation of new software. The goal is to leverage previously developed and tested components to save time, effort, and resources, and to improve overall software quality. Reuse is a fundamental principle in software engineering, contributing to increased productivity, maintainability, and scalability. Some key aspects of reuse in software development: • Library and Framework Reuse: Developers can reuse pre-built libraries and frameworks that provide common functionalities, such as data structures, algorithms, and user interface components. • Module Reuse: Modular programming encourages the creation of independent and reusable modules, making it easier to update, replace, or extend specific parts of a system without affecting the entire codebase. • Component Reuse: Components are self-contained, independent units of software that can be integrated into larger systems. Reusing components accelerates development by focusing on assembling existing solutions rather than building everything from scratch. • Design Pattern Reuse: Design patterns are proven solutions to recurring design problems. By using design patterns, developers can follow established best practices and create solutions that are both reusable and maintainable. • Automated Code Generation: Tools and generators can create code snippets or entire modules based on predefined specifications, enabling developers to quickly incorporate common functionality without manual coding. • API and Service Reuse: Incorporating third-party APIs or services allows developers to leverage existing functionality without having to implement it themselves. This is common in modern software development, where services like cloud storage, authentication, and payment processing are often outsourced. • Lessons Learned: Developers can reuse knowledge and experience gained from previous projects to make informed decisions, avoid common pitfalls, and improve overall development efficiency. • Library Dependency Management: Version control systems and package managers enable the easy integration and management of external libraries and dependencies, facilitating reuse across different projects. Benefits of Reuse: • Time and Cost Savings: Reusing existing components reduces the time and resources required for development. • Consistency and Quality: Reused components are often well-tested and proven, contributing to more reliable and consistent software. • Maintainability: Updating or fixing issues in a single reusable component can have a positive impact on all projects that use it. • Challenges and Considerations: • Compatibility: Ensuring compatibility between different versions of reused components can be challenging. • Documentation: Clear and comprehensive documentation is crucial for successful reuse, helping developers understand how to use and integrate reusable components. • Customization: Reused components may require customization to meet specific project requirements.