Ken DeLongHe explained why he thought software development was "super difficult:
Everyone knows that writing software is difficult, but I want to discuss why software development is so difficult.
Software development is subject to four features, and these features are pushed"Complex Adaptive System"And even more force itChaosThe dilemma (at least close enough ). These features are:
- Non-linear
- Feedback
- Time Delay
- Change
These are not new discoveries, and many of us have become accustomed to them. Although some people have heard of it, they cannot understand the true meaning behind it. This also makes Ken's blog articles useful:
During peak hours, the traffic on the road is heavy, and the speed may not be slow. Suddenly, someone wanted to see the outside of the car, reducing the speed to 30 miles per hour, and only lasted a few seconds. What are the consequences? Traffic congestion. I once experienced a road jam, but I didn't expect that I could suddenly go 70 miles at a speed? The previous situation was caused by a change: Some people wanted to swim in the car and non-linear factors mixed together, resulting in congestion. Many similar complex systems can be self-maintained, and traffic congestion is one of them. In the end, it was still smooth, but its recovery speed was far lower than anyone's intuition.
A person's slowdown-this is not an accident-but it has caused a full-line congestion! Where is the key? The software is both difficult and dangerous, and the smallest thing may also lead to full-disk losses. Isn't that easy?
To avoid heavy traffic jams on highways with limited traffic, you must turn on the taillights so that the utilization rate of the entire transportation system can be kept at a safe level, some normal changes will not be infinitely magnified, causing problems. We use the same method when dealing with the CPU usage of production system servers. We will keep the CPU usage up to 30%, which will prevent the peak traffic from impacting the server.
Therefore, the system must provide a feedback mechanism so that it can respond to changes without crashing:
In agility, you can adjust the number of story points accepted by a sprint so that all tasks in the sprint can arrive within the sprint."Complete" status. This is the "taillight effect ".
Jurgen appelo in10 principles of Agile Project Time ManagementThe ten principles proposed in this article can be regarded as adjustments and "Taillights" of Agile Software Development ":
- Define the "finish" Condition
- Use time box management
- Do not add lazy time for task Estimation
- Postpone Decision-Making
- Reduce cycle time
- Short and narrow processing Pipelines
- Maintain Discipline
- Reduce Task Switching
- Prevent continuous overtime
- Separate "severity" and "urgency"
Jurgen elaborated on these ten principles and provided references for further reading. The difficulty of software development is largely because the process is similar to a complex adaptive system. Agility. If it can be implemented correctly, stable feedback will be provided.
View Original English text:Software developer: A traffic jam waiting to happen
In the post-English comments, Karl Scotland, a reader, pointed out that using the "view version" system to restrict work in products, we can "keep the utilization rate of the entire system to a safe level, some normal changes will not be infinitely magnified, causing problems."
Reader Jim Leonardo said in a comment titled "avoid congestion and keep distance:
To use congestion as a metaphor, we recommend that you first define its true meaning. Congestion is equivalent to a bottleneck. Team Composition problems may cause some people to be idle while they are busy solving their problems. If this happens, consider the following factors:
1) are the roles and responsibilities of the Team clearly defined? If there is a bottleneck, isn't it because it has not done enough in cross-functional aspects? Do more training and share more knowledge.
2) How many tasks need other tasks as preconditions? If the Pre-jobs are not completed, the work of some people will be suspended. Is there any other jobs for these people to get started? Is it reasonable to divide functions into tasks for teams and projects? Can we divide and organize development in another way?
3) simplicity ...... Have you prepared enough time for task development? In reality, if you always find the bottleneck (congestion), it may be because it underestimates the completion time of some types of tasks or does not take into account different development speeds during planning (note that, the reason why "slow speed" developers are slow may be that they have high requirements on code quality, so they should fully consider the issue)
The last point is what I want to emphasize on infoq ......
4) Is it too long for the team to work? Is it because they think they should work 70 hours a week? On the contrary, programmers who always become bottlenecks are the ones who put all their time into work? If so, this person is like a bucket that is being formed. If it hasn't exceeded yet, it will certainly be in the future (it is absolutely impossible to force a review of his code !).
The author AMR elssamadisy referencesFlemming funch's blogThe differences between complex and complicated are analyzed as follows:
We use "complicated" and "complex" every day. Complexity becomes more difficult to discuss, for example, complexity in nature.
We can say that we need scientific definitions of complexity, but science provides at least 32 different interpretations, each of which is different. If we can get rid of confusion, we can find the following feasible statement:
Complicated refers to the fact that a thing contains many closely related components, and it is difficult to figure out the relationship between the components. Even if it can be clarified, it cannot be guaranteed that these parts are combined in a reasonable way.
The complexity of a system refers to the emergence of a thing as a system. The system attributes it shows are not obvious. This is different from the sum of simple superposition of some parts, which is more difficult to understand. There may not be many components, but the results after the combination are difficult to understand. In some aspects, the results are presented in a holistic manner.
380 of an overhead customer has a complicated complexity ). A jellyfish has system complexity (complex ). The Paris metro network is complicated, and the way people use it is complex ). Your skeleton framework is complicated. As a person, you have system complexity (complex ). A building is complicated, and a city is complex ).