Your software development methodology defines the processes and procedures used to develop your software. It also includes the details of source code control and defect tracking as well as acceptance tests and release criteria.
The history of software development is only about 50 years old. We have come a long way from the early days of machine language programming and assembly language. Compiled languages have improved individual programmer productivity.
In the early days of software, ideas for programs often came from the programmers themselves. In fact, most programmers dreamed of ways to make their programming work easier. For me, this desire is captured by the aphorism I first saw as a graffiti in the computer center at Worcester Polytechnic Institute in 1978: “I would rather write programs to help me write programs than write programs.”
Today, sophisticated interactive development environments (IDEs) like Visual Studio and Eclipse give a tremendous boost to programmer productivity. In addition to individual programmer productivity, the productivity of programming teams has also improved in the last few years. There are now multiple processes and methodologies for you to choose from.
Will you use pair programming and test-driven development? Do you prefer agile development methods over the rational unified process? Are you using Microsoft technology and following a model driven architecture approach?
There is no one right answer that suits every product or software development project, outsourced or not. Consider various approaches and choose a methodology that you have had success with before or that feels right to you. You don’t need to religiously follow all the elements of any particular methodology or even adopt a label for the one you choose.
Personally, I recommend agile development methods because of the commitment to frequent software builds and releases. It is a great way to track the progress of your software development and make corrections if results veer from the plan or if the plan changes, as it inevitably will.
Whatever software development methodology you choose, you must make sure that the outsourced team understands your process. In fact, the ability to work with the methodology to be used should be an important criterion for choosing your outsourced team to begin with.
Define Your Engineering Management Structure
Professional software development teams have a structure for effectively managing and achieving success with software development. When you are outsourcing, that structure applies to your in-house team as well as the offshore team.
Should your CEO be in charge of the day-to-day activities of your outsourced software development? Probably not. But it is important to make someone in your company responsible for the successful delivery of your software. To get the job done, he or she needs to have the authority to deal with the in-house employees responsible for various aspects of your software, as well as the authority to deal with the outsourced team.
You should have a core technical team within your organization that does product or project management rather than coding. It is a mistake to hire very technical, hands-on programmers to manage software development when using outsourcing.
Your core technical team will be comprised of experienced product and engineering managers to handle the coordination of your outsourced teams. Do not rely exclusively on the project management resources within the outsourced team to guide your product to successful release. Only your employees have the proper perspective that comes from proximity to your customers to play this role.
A good rule to follow is: outsource your software development, but not the entire responsibility for success.