There are also several reasons: lack of tracking and monitoring of progress (how to track and monitor). In other engineering fields, proven tracking techniques and routine supervisory procedures are often considered unnecessary in software engineering. Aware of the progress offset, the inherent (traditional) response is to increase manpower. It's like using petrol to extinguish a fire, only to make things worse. The growing fires require more oil, which leads to a cycle destined to cause disaster. The structural composition of traditional teams (broken down by task) does not guarantee the system "conceptual integrity" of the software within the system at (fundamental) difficulty: complexity, consistency, variability, and invisibility.
Minor difficulty with software: It is not relatively easy to express these abstract entities in a programming language, and they are mapped into machine languages within space and time constraints.
In the progress, the face of these problems should define a reasonable schedule each part of a large project is resolved by a team, but the team is built in a similar surgical way, not swarmed. That is, in contrast to each member intercepting a part of the problem, a person is involved in the decomposition of the problem, and others give him the support they need to improve efficiency and productivity.
After these problems, there is no technical or managerial progress in the end, and the ability to independently promise to achieve a quantitative improvement in the productivity, reliability, or simplicity of a software system project over a ten-year period. This complex industry requires continuous development, learning to use larger elements for development, optimal use of new tools, optimal application of proven management methods, the free play of good judgment, and the humility bestowed upon us by God, who is able to recognize our inadequacy and error-prone. As a member of the software industry, more accurately as a developer, we need to learn more than just learn to develop related technologies, but also need a comprehensive understanding and learning software engineering, which will help us to establish a comprehensive system of cognition. In the process of working, you should always be aware of the shackles brought by tar pits, and think about more possible ways of future software engineering.
Finally understand that sometimes the time to pay is not meaningless, but to avoid the system after the possible problems, but also to make their own future development of the road more flat.
People's Month myth read Note 02