This post is in response to a blog post by Ali Shah, in which he talks about problems faced by software engineers, developers, and consequently by the organizations, in developing quality software. I have decided to keep the focus on Pakistan in order to keep the scope limited, because, one can write a book on this topic from a global perspective.
Why does a software project, or a product, fail? I can come up with several reasons after thinking for a while, some of which are as follows,
1. Incomplete requirements specifications,
2. Incomplete/inaccurate/inadequate design specifications,
3. Inefficient development methodoligy/process,
4. Incompetent project manager,
5. Incompetent developers,
6. Lack of quality assurance and control.
If each of the above is considered as a factor deriving the success of a software project, then, in Pakistan, all but one of the factors are either totally ignored or not given it’s due attention. The only factor that is given importance is, developers. Right from the first day of an undergraduate software engineering (or computer science) degree program, the students are taught only one lesson: Improve your programming skills. They are taught everything from advance uses of recursion to the taboo of goto command, to the most complex algorithms in computer science. Hardly any of my instructors stressed upon the importance of a good software development process, or the need for quality assurance, until I was in the graduate school. As a result, most of the undergraduate degree holders in Pakistan are very good programmers, but hardly anyone of them realizes the difference between being a programmer and a software engineer.
When the time comes that the programmer has gained a few years of programming experience, she deserves a promotion/raise. There happens to be a vacancy for a project manager/system analyst/requirements engineer (if all of these positions exist) in the company, and being a respectful programmer and a faithful employee, she is promoted to that available position, without any significant experience/knowledge in that area. This is where the problem starts. The project manager, although a hard working person, is incompetent. She doesn’t know what it takes to successfully manage a software project (in most cases). The result: the project fails, or is seriously delayed, exceeding the budget, and we need a super-hero to save the project, as mentioned by Ali in his post.
Moreover, there is a serious lack of standardization of the process within an organization (or so it seems). If suppose, after few years of operation, a company still manages most of the projects in a chaotic fashion, it’s day-to-day operations are performed in an ad-hoc manner, and finally, a miracle is needed to complete the projects, then it would be no surprise if the company goes under without a warning. There is no set rules for spending time on a particular phase of the project and the development team seems to be eager to start coding without spending enough time on requirements, analysis and design phases, which results in developing the product with incomplete or incorrect specifications, and the project ends up being over-budget.
Finally, there needs to be quality control department in every software development organization. Some of them do, but are seriously ignored and under-paid, resulting in lack of people who know about the field. Even though programmers in Pakistan are very good, they don’t follow a particular standard. Everybody write code in their own style. Even within a team, you can find several styles of code writing. This makes the debugging and modification very complex, again resulting in the failure of a project. A quality control department not only checks the final product for bugs/erros, it also enforces and monitors the coding style, and eventually, standardizes the entire development process, from concept to product launch.
It is probably because of these issues that the major projects in the US are being outsourced to India and not Pakistan.
Related posts:
