Should there be professional licensure for software engineers?
My own experience
Before I get into specific issues, it is important to know why I am interested in this subject and why I actively participate with the Institute of Electrical and Electronics Engineers (IEEE) and the National Council of Examiners for Engineering and Surveying (NCEES) in developing the software engineering licensure exam. Earlier in my career, I was responsible for developing the electrical and control systems for automatic people movers (automated, driverless trains). Because these systems are involved with public safety, they are subject to regulation. These regulations include a requirement that the safety-related elements of the designs be certified by licensed engineers. As the engineer responsible for the electrical systems, I was required to “stamp” the electrical design drawings, taking responsibility for that aspect of the system. The civil and mechanical engineers did the same for their relevant portions of the system. What always struck me as ironic is that the software portions of these systems were essentially ignored by the permitting authority (in this case, the city where I was working at the time) even though it had as much or more to do with affecting public safety than any other aspect of the system.
Dr Phillip Laplante, who currently leads the effort for developing the software engineering Principles and Practicing of Engineering (PE) exam, has done a great job of responding to the criticisms of this effort. Much of the criticism is based on a misunderstanding of professional licensure and how and what it is applied to. In fact, the vast majority of people involved with software development will never be required to be licensed. You can read Dr. Laplante’s responses here, but I would like to lend my own perspective to one of these criticisms.
“The testing required to obtain a license is not relevant.” This is the one criticism I see consistently made, and it is specifically directed to the portion of testing known as the FE exam. FE stands for Fundamentals of Engineering, and passing it is required for all engineering disciplines (there are actually several versions of the FE exam depending on what discipline you are applying for). The basic argument is, “Why do I need to know about engineering mechanics, thermodynamics, electronics and more, when it is not relevant in developing and applying software to safety-critical applications?” With this, I not only disagree but believe it demonstrates a misunderstanding of how software is used in safety-critical applications (see the excellent book Safeware to explore this further).
Software does not fail (in the engineering sense); it only contains errors, and it turns out that in most accidents involving software it is not the software that is the problem. The primary concern for someone that is responsible for applying software in safety-critical systems is understanding the context in which it is being used. For example, developing software for an automatic door controller requires an understanding of the nature of the obstruction sensors and the door actuators (electrical? hydraulic? pneumatic?) and how are they are affected by the environment. What software processing environment is being used? What are the applicable standards? And so on. Having a basic engineering education or background is not only relevant but is required to fully understand how the software is being used.
Licensure versus certification
There are several ways to view the differences between licensure and certification, but there are a couple of aspects that, for me, are most significant. First, there is the legal aspect: licensed engineers are, in most circumstances, the only ones who have the authority to take legal responsibility for engineering work (though there are exceptions). Licensure is sanctioned by government agencies as opposed to certification, which is administered by private organizations. A licensed engineer takes personal responsibility for submitted engineering work and, of course, the liability that goes with that.
The other aspect is related to ethics. Licensed engineers are bound to a set of ethical standards that are enforced by state licensing boards under the threat of loss of licensure or legal action.
Both of these aspects are unique to licensure and I believe they drive the behavior and decisions made by the licensed engineer profoundly. This means that a client has a dimension of assurance and transparency when they seek engineering judgment from a licensed engineer about questions of safety and risk. Legally and ethically, licensed engineers are bound to represent to clients their full assessment, despite corporate spin or economic pressures.
If one acknowledges that the application and use of software play a significant role in system safety, then it seems reasonable to apply licensure regulation to software engineering within the same framework that is applied to other engineering disciplines. What do you think about licensing software engineers? Connect with me on Twitter @GTA_SD if you are interested in learning more or if you are interested in contributing to this software engineer licensing effort.