1 事物的本质复杂性和附属复杂性:本质复杂性是只要被解决之问题的核心,由软件中的难点问题组成。大多数软件的问题都包含一些复杂性。附属复杂性是指跟解决方案没有必要直接关联的那些东西。但无论如何我们仍然要解决他们。
2 每人希望在附属复杂性上花费比本质复杂性更多的时间,但随着它的街垒,很多组织最终在附属复杂性上要花费比本质复杂性更多的时间。
3 识别问题是摆脱附属复杂性的第一步。思考一下你所使用的过程、策略以及正在处理的技术难题。认识清楚怎样的改进可能从根本上让你抛弃一些对整个问题贡献不多却增加麻烦的东西。
4 80-10-10准则:
80%的客户需求可以很快完成;下一个10%需要花费很大的努力才能完成,最后的10%却几乎不可能完成。
YAGNI
1 YAGNI是“You ain`t Gonna Need it ”你不会需要它的缩写,也是敏捷开发对预想开发的战斗宣言。预想开发(speculative Development)的例子可谓俯拾即是。程序员们对自己说:“我肯定以后会需要这项额外的功能,所以现在就提前把它实现了吧。”这是滑向深渊的第一步。更好的方式是:只开发当下需要的东西。
2 预想开发是一个不易改变的习惯:当你正在行头上时,真的很难用客观的眼光来看待自己刚相处的绝妙想法---它究竟是会让代码变得更好,还是仅仅增加复杂度?说起来,这正是结对编程的好处之一:旁边有人能对你的妙主意提点客观的意见,这价值是无限的,因为程序员们总是很难客观地看待自己的想法,特别是在这个想法刚冒出来的时候。
3 软件开发,首先是一场沟通博弈!
4 只做当下需要的,一开始这会很难,但最终你会得到一个更好的代码库。