Changing jobs and learning new roles has taken more of my time than I expected, hence my absence from the world of blogging. But as promised here is the next section in my "Software Engineering - the MS way" posts.
One of the most overlooked thing when it comes to Software Engineering is to establish clear division of labor between the people working on a software project. It is essential for the quality and timeliness of any software development project that right from the start it has been defined who is doing what...and I'm not talking about deciding who programms what components, but rather who designs them, who develops them and who tests them.
So lets look at how development teams within Microsoft divide their labor...
There are three core roles that are defined within a team (more on teams in a later post). These are:
DevelopersThese are the people responsible for writing the code according to the specifications.
Program ManagersThese are the people responsible for writing the specifications and running the projects.
TestersThese are the people responsible for verifying that the developers wrote the code according to the specifications.
There are also numerous support roles:
But lets focus on the core three roles for a moment...
Splitting the development effort up into these three core roles is the key to Microsoft's success in running software projects. By clearly dividing the responsibilities between these three roles, each of them makes sure the other two are doing their jobs and thereby increase the quality of the work being done.
The usual path that is followed within a project is as follows:
One thing to keep in mind is that you need people with little bit different personalities for being developers vs. testers. Whereas you want your developers to be creative, then you want your testers to be systematic. Testers must have the ability to think up all the various ways in which they can break the code developed by the devs. Developers do not think this way. How many of you haven't tested your own code and then realized when the first normal user touched it that they for example did not enter something into every field on the screen...while we devs were making sure all the data did get saved...we always filled in something...whereas the tester would try leaving fields empty to see how the code handled this.
The PM on the other hand has to have people skills (something often missing in hard core developers :þ). He has to make sure that things are running smoothly. He is the arbitrator when dev and test have conflicts. He is the keeper of the specification and the voice of the customer. He is also ultimately responsible for the success of the project. He also has the fun task of evangelising the product/technology at conferences.
In future posts I'll discuss the software development lifecycle as teams within MS run it and then we will see again and again how these various roles play an important part in getting things done.