Whether large or small, any business organization will have some scope for automating their business processes using computer software, either by using an off-the-shelf product or by custom developing one. If software development is not the core business of the organization, then it is most appropriate to partner with a software development company (service provider) to obtain this software program. Such a scenario is more relevant in the UAE or middle east markets where most of the core IT functions appear to be off-shored. However, in the off-shored model, despite the advantages of significant cost savings, there are the risks of cost & time overruns and the solution not meeting business requirements. As an effective software development organization, you need to consider the following before you start working on a software development project.
(a) Clearly understand user requirements
This is the basic pre-requisite for any successful project, especially a software development project. It is also one of the critical phases in a software development life cycle. A software project will never be successful unless the requirements are correctly mapped and base-lined. Understanding the user’s requirement in its entirety and converting it into a proper Functional Specification Document (FSD) is a high level skill, almost like an art. Ideally, this process should take a few iterations unless the customer organization is very clear what their exact requirements are. However, unfortunately, in most situations that is not the case. These requirement gathering iterations will help uncover details which if otherwise left uncovered would have an adverse impact on the product during the design phase.
(b) Accurately estimate effort & cost and handle variance
In the normal course of events, after initially putting in an inquiry for a software development, the customer requests for a techno-commercial quote from the software development firm. This quote would be based on the high level understanding of customer requirements and conversion of these requirements into a high level project scope. However, in reality, in the absence of a very detailed requirements analysis phase, it is impossible to accurately estimate project scope and derive the effort and cost from it. Unless and until a detailed Functional Specifications Document (FSD) that captures in detail the business requirement from a functional perspective, the real effort and cost can not be ascertained. Assume the project has been awarded to you considering your cost and delivery time lines. You have now commenced the detailed FSD to map the exact requirements mentioned in Business Requirement Document (BRD) and the expectations shared in various communications. While you working on your detailed FSD, if you come across any point which you think would have significant value additions in the functionality then you need to communicate this to your client, even though it creates variance in scope between your initial estimate and the current analysis. At any stage, if you realized any significant variance in scope, it will have a direct impact on the effort required and consequently on the cost of the project, hence needs to be communicated with your client.
(c) Select the right development tools
When you embark upon a software development project, it is not very important to select the development tools upfront. You need to have your primary focus on drafting the solution and creating the detailed system architecture. Once that is done, you select the most appropriate tool(s) that will serve the situation. In case the customer makes known their preference for a particular technology for the solution, it is the service provider’s responsibility to evaluate that technology and enlighten the customer on its pros and cons, along with their recommendations.
(d) Modularize the development
Rather than starting off your programming from day one, spend some time analyzing the entire development process. Understand the different entities, processes and validations of business rules and figure out how best the solution can be designed and devised. Take time to design the data storage, segregate common routines & functions and come up with your technical document containing appropriate flow diagrams and algorithms. The technical document is a detailed derivative of the Functional Specifications Document and contains a lot of technical details.
(e) Develop the largest/ most complex module first
If there is no dependency of one particular module on any other module, focus on developing the most complex or the largest module first. This would help in building the confidence levels of the developers. However, a simpler module/ function that is common to multiple processes can also be given priority depending on its importance.
(f) Identify the developers most suited to the project
Every project is unique! Therefore, you need to identify the right blend of people and skills that are most suited to making the project successful. To make a huge impact on the project outcome, ensure that you have a good combination of variously skilled people in the team. You can have a team full of programming ‘stars’, but that doesn’t guarantee a successful project and a quality solution. In most cases, the attitude and the willingness of the team members makes the critical difference between success and failure.
(g) During development, discourage any ‘new feature request’ to creep in
You should have spent enough time during the requirement gathering phase to have a complete understanding of the business needs. However, it is highly likely that once you are into the development phase, the customer will come to you with requests for added features or modified functionality that significantly changes the project scope. This, in software development parlance is termed ‘scope creep’ and needs to be highly discouraged. Not only does it throw the project plan and planned activities into disarray, but could also result in events that lead up to a dissatisfied customer. Having said that, requests for minor changes with little or no impact to the overall project plan may be accommodated.
(h) Use automation techniques for testing
Once you are done with the development work, the next critical phase is testing. You need to ensure that the testing phase gets as much importance, if not more, as the development phase. One way of ensuring this is to have a dedicated testing team that is almost equal in number to your development team. The functionality of the software needs to be well tested to ensure that it works as per business requirements mapped in the FSD. Depending upon the complexity of the project, you can come up with appropriate test scripts and test data that can be used in manual and automated testing. Use of an appropriate automaton tool will help in performing stress testing. However, ensure that the basic testing starts with the developers themselves performing unit testing on the code they have developed. If the unit testing has been done well, then iterations in fixing during SIT or UAT will be marginal.
(i) Deliver something extra
Excite your client by delivering something creative which brings some real value addition to their business. While you should not be committing this ‘extra’ upfront, make sure you stick to the realistic commitments and try to over deliver.