Software Industry

Globalization demands software companies to have quality products at lower costs and this trend create more competition among companies. According to recent studies, about 75% of software market is dominated by four companies: Microsoft, Oracle, IBM and SAP. To survive, company must focus on their ability to increase efficiency, release products in a shorter time, and reduce costs without sacrificing quality. There are several ways to do that, some companies outsource software development to lower cost countries where workers willing to work long hours at lower pay. This may lower their costs but do not guarantee the quality. Other lower their costs by re-engineering their processes, eliminating unnecessary activities, obtaining better tools, and hire the best software engineers to do works for them.

Several years ago, Watts Humphrey, a scientist at CarnegieMellonUniversity found that students trained software engineering can perform at least 10 times better than students trained in computer science or programming trainings. This observation led to his effort to better understand the differences between the two training programs and eventually developed a model called the Software Capability Maturity Model (SW-CMM). This model is used to measure the capability of software organization as well as practices that software people must follow to develop quality software. There are many studies confirming the benefits of this model and the application of a software engineering process that can produce great results. Yet many software companies still ignore this model and many universities continue to focus on teaching programming rather on software engineering disciplines. There is a “negative attitude” toward following a software process by most programmers trained in Computer Science. Many complain about the costs and the delays associated with following a process and the limits it places on their individual creativity. Many Computer Science programmers consider themselves “artists” with a freedom to create softwares the way they want and software is an “art” not a “science”. Software engineers point out the improvements in productivity and quality found in following a well defined process and consider software is a “science” not an “art”. By realizing the business benefits, many software engineers are somewhat amused by the notions that following a defined process slowdown software development or limits creativity. They point to companies that have successfully achieved high SW-CMM levels report good returns on their investments (ROI) which resulted in reducing waste, allowing their engineers to spend more time developing high quality products. For example, the results from the shuttle on-board software engineers align nicely with the significant results from Boeing and numerous other companies. Yet, many programmers remain untouched by these results and many universities also ignore the fact that there is a high demand of software engineering skills in the software industry. Today the debate between two views: Software engineering and Computer Science is still going on in internet chat rooms, and within academic community.

After working more than 30 years in the software industry, I found that the relationship between a company and its customers is a major factor that contributed to the difference between these two views. In traditional software companies, programmers are kept away from the users with many levels of managers, sales and marketing people in between. The key reason is a concern about management losing control and the need to keep programmers focused on writing code. (Computer Science training is focusing mostly on coding with limit training in customer relationship or business processes). However, more advanced software companies understand the important of customer satisfaction and want their software engineers fully integrated with the users to understand their requirements. From their view, technology can decrease time, reduce costs and by having many people in between can slow things down. (Software engineer are trained in requirements engineering and customer relationship so it is natural for them to fulfill this role). As technology grows in complexity, the challenge of working closely with customers and users grows in its importance and most advanced software companies are now hiring software engineers rather than computer science graduates. Many traditional software companies still believe that customers do not know much about technology, understand product requirements by allowing programmer to meet with them could create problems and lose a sale so there are reasons to maintain the distance between programmers and customers. Advanced companies point to the same things but assert that this demonstrates the need to be fully integrated into their customer process to ensure higher satisfaction in the future. They promote the use of more agile methods in software development and invest in customer relationships. They trust their software engineers’ use of defined process to keep development activities under control. Today, the debate between two views is still going on with no end in sight.

As both a university professor and software professional, I believe that software is a “science”, not an “art”. The use of scientific methods, mathematics, risk management, architecture, lessons learned, and the application of process are the key difference between software engineering training and computer science program. Software engineers are trained to breakdown large work into tasks and efforts. Effort and task can be classified as either, “We have already done this,” or “This is new work.” With engineering discipline for employing process and data, software engineer can leverage the work of others as well as their own experiences to build a foundation of “Reusable components”. With skills in architecture and system integration, they can assemble these reuse components into new product faster, better and cheaper. When they make mistakes or when results differ from expectations, they take time to understand the root cause and follow a process to reduce the probability of similar problems in the future. This lessons learned help others from not making the same mistake and improve the quality of software products significantly. By following process based on statistical methods, software engineers can eliminate many defects by understand the different between common vs. special causes and improve the chance of design, build a highly quality product. Unfortunately, many programmers are not trained in engineering methods, architecture, integration, risk management, statistical process control, metrics and root cause analysis. Programmer have a tendency to point to the increase of complexity as a factor that contribute to the poor quality of products and complain that with large size projects, more pressure are putting on their works, require them to work longer hours.

Without knowledge about globalization and the demand for speed, traditional software companies tend toward creating rigid organizational structures to ensure the work gets done. There are clear lines of authority and control in order to ensure no one is working on things other than what is currently assigned. Managers will focus on planning, scheduling, budgeting, and directing people; Programmers will focus on coding, testing and documenting. Unfortunately, many managers are not trained in the managing aspect of software project. Some are good programmers that getting promoted into management. Some come from business and finance schools with no knowledge of software. Without additional software training, many will struggle with the burden of estimating, monitoring and meeting customers’ demand and these pressures will drive many projects to failure. Advanced software companies know how to build their work force with well-trained and well qualified software engineers. They recruit engineers from well known universities and collaborate with universities on their needs. By having engineers with unique skill that complements others, these companies usually have small, customer-involved, self-directed work teams. They leverage modern technologies and tools, but most importantly they leverage the teamwork activities to do it all. They think that such integration of small teams leads to faster results with products that meet customers’ needs. By applying scientific methods such as root cause analysis, statistical process control, they can reduce mistakes because the cause for errors has been eliminated out of the system. This is the reason that why agile method coupled with the use of statistical process control can benefit both the company as well as their customers.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University