Outsourcing Software Development Without Pain
|
Outsourcing software development offers numerous advantages but a component-oriented approach often leads to unforseen problems. Infrastructure-oriented development offers a pain-free alternative.
Why Outsource?
Outsourcing to countries such as India, China or Russia provides a project with a highly skilled developer resource at a fraction of the cost of local alternatives. Typical software development rates in India can be as low as $10-$15 per man-hour.
|
|
|
This provides the obvious benefit of reducing the total cost of software development but also introduces additional flexibility into the program, potentially allowing recruitment of a larger developer resource to reduce development timescales. Or more specifically, allowing careful adjustment to the size of the workforce to ensure completion just on time.
Naturally, this relies on the project being structured in such a way that the additional man power can be effectively utilised and this demands a highly concurrent engineering process.
Outsourcing Pitfalls
If the description provided to the offshore software developers is not prescriptive then by definition it will be subject to interpretation. This has the following implications:
- The delivered code may deviate from the architect's intentions
- The development cost will be greater because engineers with more experience will be required
- Timescales will be less predictable because hard-to-quantify inspirational activity remains.
- Additional communication will be required to resolve ambiguities
Releasing architecting duties and dispersing them between overseas contractors is likely to compromise the ability to specify an holistically correct application infrastructure as well as making it harder to react to requirement changes.
Look and feel is harder to precisely specify than other aspects and for complex HCIs it may evolve throughout the project development. Therefore it may be desirable to retain the HCI aspect locally.
Component-Oriented Approach
What is it?
The component-oriented approach breaks an application into a collection of cohesive components. These components communicate with each other through prescribed interfaces and where these interfaces cross a contractual boundary, they must be explicitly specified at the outset and may form part of the contract.
Dispersed co-ordination logic
There are a number of crucial drawbacks with the component-oriented approach to outsourcing software development. The most fundamental of which is the distribution of co-ordination logic (synchronization, communication and arbitration) across contractual boundaries.
This approach necessitates an integration phase in which the distinct components are 'glued' together, introducing countless bugs such as deadlocks, race conditions and lost or out of sequence messages. This type of bug is hard to detect with sporadic repeat cycles of weeks or months and is equally hard to safely fix. Avoiding these failures requires co-ordination logic to be dealt with holistically by a single contractor.
As a result of the dispersion of architecting responsibility between multiple contractors under the component-oriented approach, requirement changes become much more involved leading to widespread renegotiation of interfaces (and potentially contracts) or otherwise resulting in undesirable compromises to the design.
Interfacing specification issues
Interfaces between components are often communicated using paper-bound specification documents. As a result they can easily become out of sync as component interfaces inevitably change (each change to a component interface affects every other component assuming that interface).
These specification documents are typically heavy on less important information such as data formats and light on the crucial information such as flow-control and arbitration, which is much harder to describe precisely - especially from a component-centric viewpoint.
Infrastructure-Oriented Approach
What is it?
The infrastructure-oriented approach splits the problem into orthogonal application aspects:
- Co-ordination
- HCI
- Device I/O
- Processing
- Data description
Producing the blueprint
Co-ordination is dealt with at the beginning of a project before outsourcing software development by local specialist architects who produce a prescriptive description referred to as a blueprint. This provides several advantages:
- A local software architecting firm retains full control over the application infrastructure retaining a local design authority and point of contact.
- A single localized description of co-ordination logic owned by a single contractor dramatically reduces instance of integration-type errors such as deadlocks and race conditions
- The prescriptive nature of the blueprint allows it to be automatically machine translated to executable code, thereby reflecting the architect's intentions directly in the executable infrastructure code.
- The blueprint facilitates detailed discussion between customer and contractor with a view to refining requirements before the bulk of the development starts.
- All of the inspirational activity happens up-front and is captured in the blueprint, leaving the easily quantified and specified procedural activity for outsourcing software development.
- The client controls the macroscopic (i.e. co-ordination) logic leaving only the microscopic (i.e. processing) logic for outsourcing, which is far easier to prescribe.
- Because code populates the framework rather than contractors integrating components with each other, requirement changes do not unduly spill over between contractors.
- Specialization by application aspect focuses the outsourced domain; the prime candidates for outsourcing software development are processing algorithms and device drivers.
Outsourcing software development activity
The product of this initial blueprinting process is an executable framework to be populated with the products of the outsourcing activity. From the blueprint, all of the devices, processing and data description code is apparent and the process of specifying work packages and outsourcing software development can proceed rapidly.
The work packages for outsourcing do not include any co-ordination logic as this is entirely contained in the executable framework. This makes the specification task extremely simple but even more importantly, the task of populating the executable framework is trivial.
Contrast this to component integration, which involves the painful and time-consuming process of 'glueing' together each piece of co-ordination logic held by the various components in an ad-hoc fashion, only to face the worst type of bugs around.
The separation of orthogonal application aspects by the infrastructure-oriented approach allows the HCI aspect to be easily retained locally giving the customer and prime contractor tight control over look and feel.
Summary
Outsourcing software development abroad offers many compelling economic advantages and with the right software development methodology can be a very successful way to produce quality software within short timescales.
IOP provides a solid outsourcing software development model that should strongly appeal to both clients and contractors alike.
|