- The goal of the management would be to complete the project within the shortest possible budget which means ultimately in the shortest possible time. The goal of the programmer is to do the project in the best possible manner and this may mean multiple iterations before he gets it right. This need not necessarily mean that it will be done in the shortest possible time.
- Management likes to have a clear understanding of the progress of the project and how long more it takes to complete a particular job so that they can keep everyone informed about the progress and also keep in check the escalating cost of the project. But software projects due to their inherent qualities are tough to estimate accurately and there are problems that may be resolved in a couple of minutes or may take days to be resolved. Management never seems to understand this and does not accept this as an answer.
- Due to the technical nature of what is being managed many project managers are not technically adept at understanding what is happening. So there is a distrust between the management and the developers on issues being reported and estimates that are given. I have had questions like why would it take 1 day to just move this field little to the left on the screen. They don't understand the fact that the entire layout will have to be changed if we do that and we then have to test the page in 3 different browsers to make sure the change did not effect any of the other parts of the layout.
- Good developers think in binary - it is either right or wrong. Management is not binary - there are a lot of shades of gray around everything in management. There are unknowns that need to be managed. There are risks to be contained.
- Developers need to be handled carefully. They don't like to be told any other way than what they believe in unless proven that their thought process is wrong. Management finds it very hard to come up with arguments against developer wishes due to the fact that they are not technically adept.
In my experience I have found two cases where management and developers have the biggest disconnect and they are
- Managers who have come from other industries or managers who have just done an MBA and think that they can manage the cost and people of a technical project. This kind of manager in most cases never works out. The reason is because they do not understand the nature of the work and they cannot empathise with the difficulties that their developers are facing and can't think alternative solutions when they are stuck. Developers feel that they are doing all the work in this case as the manager has to come to them for everything such as talking to the client on technical issues, estimates, plans, status reports and so on. So developers quickly ask why do I need a manager when I am doing all of this.
- Very good technical people who are pushed into management just because they delivered on some very difficult assignments and have gained the trust of the top management. Many of these programmers do not know a thing about man management or external communication. The reason is because software development is an introverted role. You program alone, you think alone, you work many a time all alone for many days. This kind of manager also tends to start doing things himself ignoring the interests of the team.
So one might ask what is the solution. The only solution to this problem is to identify managers among the people you already have. Leadership qualities show in many ways - the way they organize events in the team, help other developers with their work, how they keep their tasks in an organized manner. These developers who have a methodical way of managing things that they are doing are the right people for management. They then need to be slowly groomed into the role by starting off with handling one person and then slowly increasing the strength of the team and the number of projects that they handle. In all the other industries mostly manufacturing you hear about how someone from the shop floor grew up to get into the top management of the company - why don't we hear the same in the software industry. Unless you clearly understand what you are managing you can never really manage it. So you need people who have done development and testing to play a management role.