Friday, November 03, 2006

Why do SW PMs need to know Software Engineering?

This sounds pretty trivial. It sure makes sense that SW PMs need to know SW Engineering. After all, SW Engineering is a very important discipline in the world of SW development. No brainer. Construction PMs need to understand construction technology, right? Ship building PMs need to know ship construction technology, right? Aerospace PMs need to know Aerospace technology, and so on. Same for SW PMs.
All the above is true and right and we all know it. Nothing new here. However, the point that I'm trying to make is that in the SW development world, it is so much more important that PMs know SW engineering. And why?

Because Software Engineers don't know Software Engineering !

OK, at this point all SW engineers are ready to jump on me and finish me off. So, let me explain. First, what actually is SW Engineering? Here is where there is a lot of confusion. Wikipedia notes that there are many different definitions for this term. The one that I like most is from IEEE Standard 610.12:

Software engineering is "(1) the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software, that is, the application of engineering to software," and "(2) the study of approaches as in (1)."

"the application of engineering to software" - this is the essence of this. It's not the coding. It's not the testing. It's the approach to SW development as an engineering endeavor. This means the classical activities of requirements definition, analysis, design, implementation, etc. And it doesn't matter right now if this is Waterfall, RUP, Agile or whatever. And when I talk about the above activities, I don't mean only the actual execution of the activities (such as writing the requirements, coding, running the tests, etc..) I mean the Methodology. The practices, processes, policies, etc. All of those things that everybody loves to hate but we (PMs) know that the project can't succeed without them. And yes, I know and agree that we need to be careful not to overkill with these things but we must have some.
Now, everybody basically understands the basic concept of the SDLC. We all know how to recite the waterfall phases or the Agile principles. But how many people really know how to do them? In detail?
Consider this: a person goes to college and graduates with a degree in Computer science. What is his profession? software Engineer? No - Computer Scientist. It's not the same. But when that same person gets a typical job at a SW shop, what will his title be? Computer Scientist? No, it will almost always be... Yes, you guessed - Software Engineer. But does he really have the skill set (not to say experience) required for a Software Engineer? No. Colleges do not teach software engineering almost at all. Interestingly, this person will not work as a Computer Scientist either. In most of the cases, the computer scientist by education (and some skills) and Software Engineer by title is neither. He is a programmer. All this stuff above with terms and titles is not just playing with words. These different titles do really mean different things, require different skills and are all important in the SDLC world. But the vast majority of professionals in the SW development world are programmers. Nothing else.
Now, if you are a single person who sits at home and uses his programming skills to write a little nice program, you do not need Software Engineering skills. But if we talk about a large company in which multiple programmers (and other professionals) have to work together to produce multiple products - possibly under multiple programs with multiple versions and multiple configurations for multiple customers... You can see where this is going if there is a lack in Software Engineering skills. This is a guaranteed mess.
I want to emphasize at this point that all of the above is not something theoretical. I have been around and I have seen time and again how companies struggle and they don't even know why. And when you put a SW Engineering methodology in place, things become so much better. This is a real problem in the SW technology world and it is everywhere.
So if you are the PM, you operate in this kind of demanding SW production environment and the SW engineers don't know SW Engineering, good luck. What do you do? Well, you need to know at least the basics of SW engineering so that you can:
  • Educate the engineers (and others).
  • Intelligently observe the project execution by the various professionals and make your own judgment about the quality of the operation.


This is why it's so important for SW PMs to know SW Engineering. Sadly, in the current state of affairs, these who should know don't know so you'd better know.
In the coming posts, I will go into more details on what I think PMs need to know about SW Engineering. In the meantime, let me know what you think. All comments welcome.

 

No comments: