Problem with Software

A student asked me: “Why there are so many problems in software industry? What can students learn to avoid these problems?”

Answer: In school, professors always give students clear, well-defined requirements for their assigned works. Students have enough time to complete the work. However, in the industry, most customers rarely give developers good requirements. Most requirements are unclear, incomplete, highly general, not enough details and sometime not testable. Customers often give project team an unrealistic schedule to complete the work. Since customers do not know how long it will take to complete the project so they just guest an arbitrary date. Many project managers do not know how to negotiate with customers for better and more accurate schedule. Many managers also do not know how to estimate the time needed for the project, they just take customer’s schedule and ask developers to follow. If a lot of works are being pushed into a very short time, problems are inevitable. In order to meet the unrealistic schedule, developers skip some phases, hurry to get the code done, and often do not test enough so there are many defects left in the software product. No one know whether the software is good or not until customers complain or software crash. Throughout the software development, customers often change their minds, they think of new things then request new features to be added after the project already started. Project managers do not want to make customers unhappy so they just ask developers to do more without any adjustment in schedule or assignment. That put more pressure on developers, many have to work longer hours, often not getting paid, just to get their works done. In that case, defects are inevitable.

In school, students often work in isolation since teamwork is considered cheating. Good students receive good grade and often being praised by professors so they feel like “heroes”. In the industry, developers work in team and often have to share information to get their works done. However, some developers still want to be “heroes” so they do not share anything, they believe they can succeed by themselves. The lack of teamwork, lack of collaboration, and lack of information, force developers to “assume” certain things. When it turn out that their assumptions are not correct, problems happen. If developers do not know what is needed and what is expected from them, or have erroneous assumptions, problems can be expected.

To solve these problems, students must learn more about requirements engineering to obtain better requirements. They must follow a process to solicit, analyze and verify requirements. If they can get a clear, complete, detailed, and testable requirements then the project is at least have more than 50% chance of success. If not students must learn how to negotiate with customers on schedule and efforts, this is a very good soft skill that students need to learn. Students must learn more about project management, especially how to plan, how to breakdown a large requirements into smaller tasks and estimate the time needed to complete those. Students must learn how to work in team. They should communicate often with each others. Students should learn more about review, inspections to reduce defects when appropriate.

Having a realistic schedules is very important as it allow adequate time for design, testing, defects fixing, re-testing, changes, and documentation. Students must learn how to plan testing by start testing early on, re-test after fixes or changes, plan for adequate time for testing and defect fixing. Once the project started, students must learn to avoid changes, if possible. By prepare to defend against excessive changes and additions after the project started will avoid many problems. If changes are necessary, they should be adequately reflected in schedule changes. If possible, work closely with customers to manage expectations.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University