构建软件与管理大量的约束有着紧密的联系。这些约束可能是时间上的,也可能是资金、技术、决策、兼容性、管理、人员、过程或者以上所有方面的。Jim Bird探讨了Scrum、XP的约束,并讨论了这些约束如何帮助我们培养创造力并构建正确的软件。
关于约束,Jim提到了一个有趣的观察结果。
但是,我很喜欢思考约束和限制的奇妙悖论:
通过指引,通过强迫你用特定的方式思考和工作,通过限制你的选择,约束夺走你的控制权。
但是……
通过指引,通过强迫你用特定的方式思考和工作,通过限制你的选择,约束又可以帮助你进行控制权。
Jim认为,XP和Scrum强制团队工作在一个固定的、短期的时间盒中,以此限制你在一个sprint中的工作量。这个方案可能并不完美,但它却给我们提供了绝佳的机会去获取反馈,在下一轮迭代中,我们就可以根据那些反馈做出改进。时间盒可以很好地防止完美主义、画蛇添足和拖延。工作于时间盒的约束下还有助于管理风险,因为你不会一直去构建太多很难丢弃的东西。
时间盒强迫你在一个小的范围里工作,让你去思考、真正地思考如何把工作做好。一切都是关于执行的:谁,什么,何时,什么先什么后。它营造了一种紧迫感,以及一种看到工作完成获得反馈的满足感。
同样地,Jim提到一旦完成就过时的庞大计划是无谓的浪费,约束规划可以及时帮助我们消除这种浪费。
37signals公司的书《Getting Real》认为,约束引导我们找出创造性的解决方案。团队应该去拥抱约束而不是蔑视它们。
永远都是僧多粥少。没有足够的时间;没有足够的资金;没有足够的人手。这是一件好事。
37signals说,正是这些约束帮助它们提出了创造性的解决方案。
我们总是构建更少功能的软件,以此减小变化的代价。我们给人们提供的软件,功能刚刚够他们以自己的方式去解决他们的问题——然后我们就收手了。
Google的Marissa Ann Mayer有一个类似的故事要分享。据她介绍,约束能塑造和集中问题,而且它们清晰地为我们提供了需要克服的问题。同时,约束会尽其所能激发我们的创造力。
约束能给你速度和动力。在制订用于设计产品的过程中,约束可以实实在在地加快开发。
然而,Marissa提醒道,我们应该理性地权衡,对于不可能的事情是否不予理会。良好的平衡可以带来创新,帮助团队产生一个极好的主意或者让他们快速失败。
Ethan Zuckerman提到,有些最好的创新,是当我们在约束条件下工作时产生的。他引用了毕加索的例子。
事实证明,伟大的艺术家总是会选择约束他们自己。一些毕加索最感人的作品是在他的忧郁期创作的,当他有意或无意约束自己使用限定颜色的调色板时。
因此,约束通常带来革新和创造力。在约束条件下工作获取最佳创意,并且把约束转变成优势的关键,正如37signals所说的,
约束通常是一种隐蔽的优势。忘记风险投资,长发布周期和快速招聘吧,就在你现有的条件下工作好了。