in reply to Common Software Development Mistakes
I submit that the mistake which is most commonly made is to say, “the job of a software developer is to write code.” In the last few years, the word, engineer, has quietly dropped out of this job description ...
And let me be quite blunt here: if the word, “engineer,” is in the job-description, bean counters might feel a little ill-at-ease at “outsourcing” the work to people whose primary calling-card, to the bean-counter, is that “they’re cheap.” The word, “engineer,” is usually preceded by words such as “licensed” and “professional.” Even the most insipid bean-counter probably would not advocate hiring someone “who works for cheap” to build a bridge or a skyscraper. But they would hire abjectly-unqualified people to work on critical software systems, whose consequences of failure (or even of error) might be much higher than that of an inadequate physical structure or device.
There is no such thing as “a software developer.” The writing of computer software is always an engineering undertaking. Even though the finished product is intangible, the effects of it are not; and, the risks of it are not. The mere skill of “writing code” is no more a description of the task than “proficiency with a hammer” is to a professional cabinetmaker. Yet, whereas even the simple re-paving of a surface street (or the building of a cabinet) would be routinely undertaken with scrupulous discipline, critical software projects are often undertaken by workers who are barely trained ... and with total disregard to both engineering and project-management practice.
And let me be very clear about one thing: I have had the privilege of working with certain third-world software engineers who were, and who are, unquestionably brilliant. I do not believe that “where you were born” is an indicator of “how good or how prepared you are.” (The thought is obviously absurd.) Nevertheless, people who aren’t qualified, are being hired, under conditions which clearly affirm that the people who are making those hiring decisions “know not what they do.” People are being drawn halfway around the planet only to have their hopes (and skills) dashed on the rocks. I do not like to see good people being thrown under a bus. And, quite separately, I don’t like seeing any software project that has doomed itself to failure for lack of discipline, knowledge, or design.
Sometimes, I think that, as an industry, we have done this to ourselves. The electrical and mechanical engineering disciplines ... hell, the (unionized) electrical and mechanical trades ... have done a good job of educating the public, and the bean-counters, that the things which they do are not an idle undertaking. But, in the software industry, I don’t think we’ve done ourselves justice. And there is a very long string of dissatisfied customers to show for this.