"lock" in Software Development

If you've done concurrent programming, you must know what a "lock" is, and the lock is used for synchronization and mutual exclusion. I found that there are many locks between the various development teams in the development department. such as:

Lock on technical capabilities . There is a project that needs to be developed in different places. These modules use different technologies, such as: Java, C/C++, Python, Javascript, but every developer on this team only knows one language, so Need to cooperate, need task scheduling, synchronous mutual exclusion locks, so a job that originally only needs 2 people for 3 weeks has become 8 people for two months.

Responsible for the lock on the module . In the same way, different people are responsible for different modules, so a project needs to move a lot of modules, then you need to find the people of these modules, the same as above. Everyone has their own time schedule. The more people there are, the more locks they have. As a result, one person who only needs two people to work for two or two weeks has become a 7 or 8 person for more than a month.

I am not arrogant, it is all true. We can see that,

Time lock, progress lock . This bunch of developers with different skills or responsible for different modules has locks, you have to wait for locks, they have their own arrangements, so to work together, you need to schedule, to synchronize. The more people you participate, the more locks you have. It is more complicated when you coordinate their time.

Communication locks, interest locks . Moreover, the most horrible thing is that the cost of communication between them is huge. They will spend a lot of time discussing, one function is to achieve on your side, or on my side, everyone has their own interests and abacus. Invisibly added a lot of shirking, bureaucratic and political things.

Sometimes, we feel that division of labor and sub-modules are prerequisites for efficiency, but this is not the case. We can also see that the so-called "division of labor" has been completely abused . They regard the "division of labor" as an excuse to do only one thing forever.


A programmer should be able to master multiple languages ​​and be responsible for multiple modules or even different responsibilities. If a programmer feels that learning a language and learning more about a module is difficult, then the programmer is essentially unqualified .