The issue of personnel competence continues to worsen. Virtually every software development project is plagued with at least one individual whose skills fall far short of those needed. Worse yet, this incompetence is not obvious to management. The individual in question may carry a degree from a local university, a certificate from a vendor training program and a letter of recommendation from a past employer who never wants to see him or her again. Hiring of new personnel, or assigning existing personnel to a new project, is often a risky game of chance.
Imposing a Standard of Competence
Consumer laws were enacted to ensure that buyers of goods would receive value for their money. As a baseline, every product sold carries with it an 'implied warranty of merchantability'. In simple terms, this means that the product must work to a minimal degree so that the consumer receives some benefit from the product. The amount and duration of the benefit may vary with the price charged, so long as the product provides some benefit.
These laws do not extend to the provision of services, largely because of the difficulty in determining the quality of services. Every person is different. Therefore, their skills (learned abilities) and talents (innate abilities) will vary. Design and development of software makes demands upon both of these forms of capability. An individual must have knowledge of the operating system, the programming language, the intended equipment platform and peripherals, and the intended application. In addition, the individual must have some creative talent to produce something that did not exist before and some organizational talent to make it all fit together in a coherent and efficient manner. The need for all of these skills and talents poses a serious obstacle to a purchaser of services.
Personnel managers have developed acceptable approaches for hiring new programmers and designers. These approaches involve testing of the individual under circumstances that most closely simulate the intended work environment. In effect, selection is based upon actual work. This approach is not available to all employers. Some cannot mock up a test situation with the right equipment. Others cannot anticipate closely enough the extent of creativity that a job position may require.
Evolution to Standards
Historically, every new industry must ultimately develop standards if it is to evolve. This fact has long been recognized by software products, whether it be languages, platforms, networks, enterprise systems, or case tools. It is time for this evolution to take place with regard to software design and development services.
During the last two years, I have worked with a start up organization, the National Association of Communication Systems Engineers (NACSE). This organization was specifically created to establish skill standards for individuals employed in the design and development of wide area networks (WANS) and related communications fields. It seeks to reduce chaos at the point of convergence of the telephone, cable and software/data industries. My experience with the organization has yielded some lessons learned that may be extrapolated for application to the entire software industry.
First, there is always disagreement as to what represents an acceptable standard. No one wants to be suddenly categorized as being unfit to perform their current job. To address this issue, it was necessary to pool a group of recognized experts and have them define their expectations of their peers and of their subordinates. To get started, it was necessary to make a few broad, sweeping classes. Over time, it is hoped that this can be refined to reflect expertise on with regard to particular equipment, platforms or systems. This issue shall never be fully resolved, but like any standard it is only meaningful if adopted by the majority of people who care.
Second, there was a need to be hardware and software independent. This means that a truly skilled individual is not tied to a particular product vendor. Wherever equivalent products exist, the individual must be able to understand the pros and cons of the products and make an informed choice. This situation runs counter to the fact that many product vendors provide training only on their products.
Third, it is necessary to test the individual to verify their skills and talents. Real world testing means actual in simulated environments as close to field conditions as possible. This raises two problems. The testing environment or lab must have a broad selection of equipment. This poses a level of costs that most organizations cannot afford. Such a facility must either be established within a educational institution or collaboratively funded by several businesses. The testing must be conducted by someone who is an expert. To create a simulation that represents common and not so common problems as part of a test cannot be completed by a mere proctor. Therefore, a class of certification must also be created for individuals giving tests. The aspect of testing ties back to the first issue of acceptable standards. The test must do a good job of measuring the capability of an individual to meet the standard.
Teaching
The NACSE endeavor yielded yet another critical problem. Once a standard is set, there must be a natural path for an individual to gain the necessary skills to meet the standard. Although, this path will naturally encompass on the job training and experience, the more direct route is through education. As NACSE was formulating standards, it became obvious that nearly all of the available educational programs from the private sector and the educational community did not match up neatly with the standards. A particular course offered through a training program might fall short of the desired level of competence or leave out a specific capability that was needed for certification. This mismatch has led to cooperative interaction with different training organizations to close the gap and restructure available curriculum.
Management
I have received a lot of feedback on articles in the column and through projects in which I am personally involved which key on deficiencies in management. Those individuals who define the mission, select the goals, and set the strategies are too often out of step with those individuals who must effect such strategies through software design and development. Decisions and legal commitments continue to be made with an inadequate understanding of the technical constraints of a given project. Therefore, when establishing standards, standards should also be set for those who manage. By this, I do not mean that a manager has technical competence, but management skills to manage technical projects.
Standards as a Goal
The ability to engage in any software project with a degree of certainty is dependent upon an expectation that the individuals performing the project are capable of doing so. If everyone in the software industry continues to sidestep the controversy of certifying software designers and developers, chaos will continue and with it legal liability for all who have made commitments. Setting personnel standards can be done. If the software designers and developers truly wish to be called professionals and gain the title of 'engineer', then today is a good day to start.