One of the most common company organization is the so called matrix organization. This organizational structure defines two dimensions of reporting for each worker. The first dimension organizes by function – programmers report to software chief that may report to cto and so on. Second dimension organizes by project, programmers report to lead programmer that may report to project leader and then project manager.So far so good. But it is not so simple, each worker has two authorities to report to. In my experience function leadership has always been weak when compared to project leadership. The first was usually confined in professional evaluation and growth, scouting of new technologies, project startup, resource allocation, planning estimation and supervision.
All this is important, but the project manager is far more powerful having a significant larger budget for the project completion. Pm is the one that directly manages the resources to accomplish the project goals that are the way a company makes money.
But what happens if the company has not enough resources for the projects? In this case it is awkward for a pm to manage resources competing with other pms. It is better to consider the function as a service provider to projects. That puts much more power in the hands of the function chief. This is not really efficient for two reasons – the throughput is limited by the lack of resources, and there is an extra passage in request and response. Nonetheless is possibly the best solution when single programmers work at the same time to more than one project.