彼得·圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。
1.Today’s problems come from yesterday’s
solutions(今天的问题源自昨天的解决方案).
We, humans, are happy when we solve problems. We often
don’t think much about consequences. Surprisingly, our
solutions
could strike back and create new problems.
当解决问题时,我们会感到很高兴。我们经常不考虑后果。令人感到意外的是,我们提出的解决方案可能会
产生反作用,并带来新问题。
[1]A company decides to reward
few key members of the very successful team with bonuses
and promotions. The rest of the
team feel unfairness and loss of motivation. Eventually
tension between members is increased. The following
projects are no
longer successful.
作为对取得巨大成功的团队的奖励,公司决定为团队中的少数骨干成员发放奖金并晋升职位。团队中的其
他成员会感到不公平,并且会丧失积极性。最终使团队成员之间的关系更加紧张,后续项目也就很难再取
得成功。
[2]A project manager frequently
asks developers to fix a new bug or work on urgent requests
from customers. Developers do
their best to fulfil these requests. Frequent distractions
prevent them from finishing their main tasks for the
iterations. Project
shows only little progress.
项目经理频繁要求开发者修复一个新的软件Bug,或者处理客户的紧急需求,而开发者尽力满足这些要求。
但是,过于频繁地分散精力会妨碍他们完成迭代过程中的主要任务。因此,项目进展很慢。
2.The harder you push,
the harder the system pushes back(用力越大,系统的反作用力也越大).
We have this stubborn reaction to push our way through
when things are not working out as we want. We charge
without time to
stop, think and find better alternatives. Sometimes
we solve problems, but often we find ourselves up to
ears in the swamp of other
problems.
当事情的进展结果并非如我们所愿时,我们会固执地坚持自己的方法。我们没有时间来停下来思维并寻找更好的
替代方案,而是“义无反顾”地向前冲。有时候虽然解决了问题,但往往又发现深陷于其他问题之中。
[1]Managers keep pushing people
to work overtime and meet deadline when a system is
far from completion. The number of bugs is
increasing and overall quality is rapidly dropping causing
more delays. More and more effort is required to launch
the software system.
当一个系统远未完成时,经理通常会不断催促员工加班加点地工作,并且要求按时完成。系统bug数量的持续
增加及整体质量的急剧下降,导致更多的延误。因此,需要做更多的工作来部署软件系统。
[2]Developers heroically stretch
the same architecture for the new system requirements,
which don’t fit into the old rigid way. They are
so busy doing it that don’t have time to stop, analyze
and change approach. The system degrades.
为了满足新系统的要求,开发者勇敢的对原有的系统架构进行扩展,但死板陈旧的方法已经不能满足这些新需求。
他们忙于做这件事,以至于没有时间停下来仔细分析并且改变方法,从而导致系统质量下降。
3.Behavior grows better
before it grows worse(福兮祸之所伏).
Short-term solutions give us a short break and temporary
improvement, but don’t eliminate fundamental problems.
These problems will make
situation worse in the long run.
短期的解决方案,会给我们带来短暂的休息和状况的暂时改善,但是不会从根本上解决问题。这些问题终究会使情
况变得更糟。
[1]A company gives customers
hefty discounts and run expensive advertisement – many
people buy the software.
Customers are unhappy after purchase, because software
is unusable and unreliable.
公司为顾客提供丰厚的优惠并投入巨资宣传,让很多人购买软件 。但是,顾客购买之后很不满意,因为软件无法
使用也不可靠。
[2]Management promises development
team big bonuses if they finish system in time. A team
work hard, but soon realize that it is impossible.
Developers becomes cynical and unmotivated.
如果开发小组能够按时完成系统开发,管理层承诺,如果开发团队能够按时完成系统开发,公司会提供巨额的奖金。
一个团队开始努力的工作,但很快他们就意识到这是不可能实现的。于是开发者变得悲观并丧失动力。
4.The easy way out
usually leads back in(最容易出去的方法往往会导致返回来).
We learn few solutions in our life, which brought easy
success earlier. We try to vigorously apply them in
any situation disregarding particular
context and people.
在生活中学到的一些解决方案能够帮助我们轻易地并且更早的地获得成功。我们总是试图把它们强加到任何情形上,
而忽略了特殊的背景以及相关人员。
[1]Agile coach is forcing full
Extreme Programming implementation when developers are
not ready to accept some practices as pair programming
or TDD. It creates stress, conflicts and allergy to
any Agile approach.
开发者还没有准备好接受结对编程或者测试驱动开发这样的实践时,敏捷教练强行实现完全的极限编程。这会给任何
敏捷方法带来压力、冲突以及负面影响。
[2]Developers apply design
patterns everywhere unnecessarily complicating the system.
开发者把设计模式应用到任何地方,这是徒劳的,而且这会让系统变得复杂。
5.The cure can be worse
than the disease(治疗带来的结果可能会比疾病导致后果更严重).
Some familiar solutions could be even dangerous like
drinking beer while programming to reduce stress for
unreal deadlines.
有些熟知的方法可能会更危险,比如在编程的时候喝啤酒,来减轻不切实际的任务期限带来的压力。
[1]A company hires various
contractors to work on core features, because doesn’t
trust full-time developers. As a result, the system
doesn’t
have conceptual integrity, in-house developers don’t
understand and cannot change it. Domain knowledge, interpretation
and concepts are
missing from the brains of company employees.
由于不信任全职开发者,一家公司雇佣了大量的承包商来开发核心功能。结果,系统不具有概念完整性,自己公
司的开发者看不懂,并且无法做出修改。所以,公司员工也不了解相关领域的知识、解释以及概念。
[2]Developers make many shortcuts, copy and paste code
for similar functionality to please management and deliver
first version fast. They
do quick progress at the beginning, but code eventually
becomes Big Ball of Mud.
开发者会走捷径,拷贝相似功能的代码来赶进度,并且争取尽快发行第一个版本。他们一开始进展迅速,但是代
码最终会变成大泥球(比喻系统结构不清晰)。
6.Faster is slower(欲速则不达).
When we feel smell of success we start advance at the
full speed without much caution. However, the optimal
rate of growth usually is much
slower than the fastest growth possible.
当我们看到成功的曙光,我们会全力以赴,不再小心谨慎。然而,最优增长速率通常会比可能的最快增长速率要慢得多。
[1]Managers add many people to already successful project.
The overall progress becomes slower, because of communication
overhead
and loss of team coherence.
经理们往往为已经成功的项目增加很多人手,但总体进展就会变慢,因为交流所用的花费增加,以及团队成员之间
失去默契。
[2]Developers quickly add new features to the system
without proper refactoring and improving existing code.
System becomes difficult
to understand and modify.
在没有对代码进行合理重构及改善的情况下,开发者快速的为系统添加新的功能,会使系统变得难懂,而且难以修改。
7.Cause and effect
are not closely related in time and space(在时间和空间上,因果并不密切相关).
We are good at finding causes to our problems, even
if they are just symptoms and far from real root causes.
我们善于为出现的困难寻找原因,即使这些原因很牵强,并且远非是真正的根本原因。
[1]Development team stops accepting requirement changes
from customers to finish a system in time. Customers
are unhappy with delivered
software.
为了按时完成系统,开发团队不再接受来自客户的需求改变。因此,客户对发行的软件不满意。
[2]After few incidents with
a live system, management compel developers to get approval
and write detailed technical specification before
implementing any change in the system. Developers lose
motivation for any improvements in the system and start
procrastinating.
实时系统历经坎坷之后,管理层迫使开发者同意,并且在给系统做出任何修改之前撰写详细的技术说明。结果开发者
失去了为系统做出任何改进的动力,并且开始拖延。
8.Small changes can
produce big results-but the areas of highest leverage
are often the least obvious(微小的改变可以产生明显的效果,但这种杠杆效应最大的地方往往也最不明显).
Most obvious grand solutions like changing company policy,
vision or tag line often don’t work. Small ordinary,
but consistent changes could
make a huge difference.
像改变公司政策、愿景或者广告用语这样显而易见并且关系重大的解决方案往往不起作用。相反,小而普通,但持续的改
变却会带来大不相同的效果。
[1]Developers have everyday interactions with customer
and make most decisions. As a result, customer needs
are well understood, decisions
are better and solutions are optimal.
开发者每天都与客户进行交流,并且做出大部分决定。因此,能够更好地理解客户的需求、做出更好的决定并且给出最优
的解决方案。
[2]Developers build automated unit tests for each function
in the system. As a result, design is flexible, people
are confident, the system is fully
tested after each change.
开发者为系统的每项功能设计自动化单元测试。因此,设计更灵活、人们更自信、系统在每此修改之后都能得到完全的测试。
9.You can have your
cake and eat it too – but not at once(鱼与熊掌可以兼得,但不是同时兼得).
We often face rigid “either-or” choices. Sometimes they
are not dilemmas if we change our perspective and rules
of the system.
我们经常会面对刻板的“非此即彼”选择。如果我们改变一下自己的观点及系统规则,这些选择有时并不会使我们进退两难。
[1]Experience managers know
that we cannot increase the number of features and reduce
time and cost simultaneously. However, it could be
possible to achieve if we just improve flow of ideas,
find right people and avoid over-engineering.
经验丰富的项目经理知道增加系统特性的数量与削减时间和开支不可兼得。然而,如果我们完善一下想法、寻找合适的人
才并且避免过度开发,这也是可能做到的。
[2]Developers believe that they should follow
either Transaction Script or Domain Model architecture
patterns. However high performance
solution in the complex domain can combine both for
the best effect.
开发者认为他们应该要么采用事务脚本,要么采用域模型体系架构模式。然而,复合域中的高性能解决方案可以将两者结合,
以得到最佳性能。
10. Dividing an elephant in half does
not produce two small elephants(把一头大象分两半不会得到两头大象).
Inability to see the system as a whole could often lead
to suboptimal decisions.
无法整体了解系统,往往会做出次优决定。
[1]A manger evaluates developers
based on the number of lines of codes they produce or
points they implemented during iteration. Developers
produce a lot of useless code.
项目经理往往通过生成的代码量和迭代过程中实现的功能数来评估开发者。而开发者往往会生成大量无用代码。
[2]Management promises testers
$5 dollars for any found bug in the system. Testers
are no longer interested in cooperating with developers
and
prevent root causes of the bugs. Good and productive
relations between teams disappear.
管理层承诺,每发现一处系统bug,测试者将得到5美元。测试者对跟开发者合作不再感兴趣,并且不再试图消除产生bug
的根本因素。团队之间良好而且高效的关系不复存在。
11. There is no blame(无可非议).
We like to blame and point fingers to other people or
circumstances, sometimes we even believe in this. But
we and cause of our problems are
part of the System.
我们喜欢归咎于客观条件,或对别人指指点点,甚至对此深信不疑。但是,我们自己以及问题的原因都是系统的一部分。
[1]It is Joe fault that the team didn’t release
system this morning. He didn’t fix all the bugs overnight
even though PM kindly gave him free pack
of beer, T-shirt and pizza.
今天早上团队没有发布系统完全是乔的过错。即使项目经理亲切地为其提供了免费的啤酒、T恤以及披萨,他也没能在一
晚上的时间内修复所有的缺陷。
[2]People don’t use a company’s
excellent Web 2.0 social application. Users are simply
stupid and don’t appreciate
hard work.
人们不会使用一个公司优秀的Web 2.0社会化应用,用户喜欢简单实用的东西,并且不会感激你辛勤工作的成果。
So what(然后呢)?
These 11 laws of The System Thinking show that all our
solutions have consequences, sometimes bad and unexpected.
Systems around us are
what they are, and we shouldn’t blame, but learn them.
To master The System Thinking and control these systems
we should
以上11条系统思维定律表明,我们提出的所有解决方案都会产生一定的后果,有时非常严重并出乎意料。我们周围的系统本
就那样,我们不应苛责它们,而是要从中学习。要掌握系统思维方式并控制这些系统,我们需要做到如下几点:
[1]understand what are the
systems we are dealing with, either human or software.
要明白我们是在跟什么样的系统打交道,是人或是软件;
[2]consciously learn relations,
cause and effect chains
有意识地学习相互关系、因果链;
[3]perceive the systems as
a whole and as the part of other systems
把系统看做一个整体,并且视其为其他系统的一部分。
There are many challenges to the system thinking. Many
we can defeat with gaining and using knowledge how systems
work. But the most serious
challenge is our own contradictory human nature. Our
passions, emotions and instincts could easily defy the
rational and systematic way of thinking.
First step to master the system thinking is to learn
how to cooperate with ourselves.
系统思维方面有很多挑战,通过获取并且利用有关系统工作方式的知识,我们可以战胜其中的很多挑战。但是,大部分严峻挑
战是我们人类与之相冲突的本性。我们的激情、感情以及本能可以轻易改变我们理智、条理分明的思维方式。掌握系统思维方
式的第一步就是要学习如何跟自己合作。
Question: What is your experience with the system
thinking (or absence) in software development?
在软件开发过程中,你有(或缺乏)哪些系统思维的使用经验?
|