The concept of outsourcing your technology and software development needs has become somewhat of a forbidden word within the South African business sector. This is not because no one is undertaking this process, but because businesses have become disillusioned with the amount of outsourced projects that are not delivered within time or budget.
This process can actually be a simple one, if undertaken properly it can work. However, the overriding reason that software implementations are not managed correctly in South Africa is not due to lack of pre-planning on the project, but rather due to the lack of risk management and flexibility with respect to changing business needs. If these factors are correctly addressed, there is a much better likelihood of ensuring that a project remains within the allocated time and company budget.
The concept of the software development life cycle (SDLC) has been around for almost as long as software projects. Essentially there are two key software development methodologies that can be utilised to manage a software development project, namely; the waterfall and iterative approach. The waterfall or sequential approach, which is still used extensively today, revolves around two basic premises, firstly, if the upfront planning and requirements definition on a project is undertaken correctly, the project will work and, secondly, that every step cascades directly onto the next step. While this is a sound principle, it does not account for any dynamic changes within an organisation during the project and therefore makes it difficult to be flexible with project work and scope. Typically systems are not designed to support changes, as change is not anticipated. As a result, this methodology works well in short development projects in well-known environments where the requirements do not change.
The second approach, the iterative approach, repeats the entire sequential process in tiny chunks, on a periodic basis (sometimes as short as weekly). This has significant advantages for agility with respect to responding to business changes and risk management. It has potentially major drawbacks - such as that true 'architecture' is very hard to achieve, as systems are designed to support change, but radical change or consistent change over time will eventually damage the architecture. A second drawback, from a management point of view, is that it is almost impossible to budget for a full project upfront. In my experience, there are few true iterative projects currently being undertaken in South African organisations.
So what would a combination of these two approaches 'look like'? I tend not to be religious about software methodology, and to combine the parts that make most sense for the project. In most cases this includes an upfront sequential phase, which addresses what is to be built, and an iterative development phase, which addresses how the software is built. To scope a software development project that is outsourced, you firstly need to define the requirements of the project to understand the risk assessment correctly, as this will aid in setting control mechanisms in place prior to the commencement of the project. A company should typically undertake a requirements definition to understand requirements at a high level, and detailed business analysis of the requirements, which are to be built. This provides enough information to plan the project and determine the development budget, and perform high-level technical design (which may often include prototyping). From a software supplier point of view, it is at this point that a reliable fixed price quote can be determined.
From here, a company can undertake the 'how to' phase. During this step the work is broken into development iterations and tackled in chunks. Each iteration's scope is determined by the task's risk (high risk early), the importance to the business, and dependencies between tasks. When each development iteration is completed it is then tested. At this point regression testing is also performed for previously-built iterations. The reason for this rigourous process is that after each iteration is complete there is an opportunity to learn, provide feedback to technologists and business people, and alter the remaining scope. This is a risk mitigation factor and allows the project to remain relevant to a changing organisation.
Once each phase of development is undertaken and tested, the software is ready to go live. However, this brings a company onto the last step of correctly managing software development and that is the 'bedding down' phase. Businesses need to understand that while every precaution is taken during development of a software solution, in the real world factors like volume, bandwidth and network issues can have an effect on the solution. Therefore, an organisation has to allow for between one and six months (dependent on the size and complexity of the development) for the system to settle down and any smaller issues to be addressed and fixed.
Any outsourced project, if managed correctly, can and will work, however companies need to understand that not only does consensus need to be gained prior to the commencement of the project, but there needs to be a real desire from both client and developer to succeed. Bonuses for on time delivery can serve to focus a development house. However, if the above is followed correctly, then any organisation should have enough information to ensure the delivery of a project within time and on budget. Most projects in South Africa overrun due planning focus upfront only and not enough attention paid to the active risk management during the development phase. Therefore be agnostic in your approach to software process, but work at a strategic level, whereby you are watching what you are doing and are willing to change if you need to adapt to a changing market or business environment.