Archive for the ‘技术管理’ Category

《完美软件》读书笔记11:信息摄取

2010-06-07

书《完美软件》

1、使用萨提亚交互模型来解析沟通

萨提亚(Virginia Satir)交互模型有助于帮助软件测试人员改进他们对软件状态进行观察和沟通的系统。

一个模型的作用是简化一个复杂的的过程。萨提亚交互模型首先将任何沟通过程都分解为4个主要的阶段:

image

A)摄取:并不是‘就那样发生’,还包括了选择的过程

B)确定含义:摄取的数据本身是没有含义的,直到有人赋予它们某个含义。确定含义的过程和摄取过程相互作用

C)确定重要性:数据也许会给出某些含义的暗示,但从严不会暗示其重要性。

如果不根据信息的重要性进行分类和选择,感知到的世界就会是一堆数据洪流。分配给某个摄取及其含义的重要性可能会引导我们改变摄取和确定含义的过程。

D)做出反应

Tester 及其Manager是观察者,但从来都不是被动的。Tester并不关心与可能采取的行动没有任何关系的观察结果。

 

2、人们听取信息时是有选择的

3、数据来源会影响到摄取

无疑,某个顾问甚至高层报出的BUG,会被重视。人们常会根据发送者的不同预先确定一条消息的重要性。

如果你在让大家注意你的测试报告时存在困难,可以尝试通过某个名声足以让接收者改变或放弃他们的摄取过滤器的人来递交这些报告。

 

4、时机也会导致差异

5、人们会出现信息过载

此时,人们会停止或者在一定程度上减少摄取信息。

6、减少测试的数量也许可以传递更多的信息

7、寻找测试之外的信息摄取

8、不要混淆理解和摄取

  • “有很多BUG” –“很多”是与谁相比?
  • “只有4个BUG” –“只有4个”比起期望的情况是较好还是较差?

9、使用数据质疑来过滤理解

当你需要数据别人却提供理解时,可以使用Data Question的方法。

 

小结:

摄取是一个主动的过程。要尽可能地了解那些限制摄取的因素、信息的来源,以及数据如何获得了带有偏差的含义。被动地等待别人将数据给你并不会让你成为受害者,但至少会让他们可以潜在地控制你将会得到哪些数据。

======== by 鬼谷子@魔教=========================

敏于行,讷于言;勤于思,拙于辩

[CTO札记]架构改造(SOBS)4原则

2009-09-06

上周我在‘[CTO札记]架构的改造是个持续、全面、螺旋的过程’一文中提到了架构改造的3个过程特点,不过‘分步进行’这条最重要的没有明确,因此现在重新整理成‘架构改造4原则’。

image

 

===== by 鬼谷子@魔教,更多内容在 http://DavyYew.BlogBus.com ======

http://Yewsoft.BlogBus.com

jvm shutdown hook

2009-06-25

比如我们在JVM进程关闭时需要把内存中的数据保存到DB或者文件中或者做一些清除工作、释放资源等事情。那么我们需要加关闭钩子(shutdown hook),先创建一个java.lang.Thread 类的实例,把它作为addShutdownHook()方法的参数。因为关闭钩子(shutdown hook)简短而扼要的,所以用匿名嵌套类很适合。

简单实现:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        System.out.println(”shutting down”);

        writerTemplate.flush(); //将队列中的日志输出到DB中
    }
});

虚拟机关闭时,它会调用线程的start()函数。

怎样设计抽象类

2009-06-17

最近在做类设计时,正好有一个关于抽象类的定义,我顺便把定义抽象类的两种机制总结了一下,供大家参考。

在java中大家都知道对抽象类定义进行支持的两种机制(abstract和interface),因为这两种机制的存在,才赋予了java强大的面向对象的能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。

其实,两者之间还是有很大的区别,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确及合理性。通过本文希望能够加深大家对二者之间的理解。

 

什么是抽象类?

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。

实现抽象类的机制 ?

  1. 抽象类

public abstract class BaseCache {

}

 

  1. 接口

public interface class BaseCache {

}

 

二者之间区别


抽象机制

差异化

抽象类

  1. 通过abstract定义抽象类。
  2. 可以定义自己数据成员。
  3. 可以定义非abstarct的成员方法。
  4. 只能继承一个基类。

接口

  1. 通过interface定义接口。
  2. 只能够定义静态的不能被修改的数据成员(也就是必须是static final的)。
  3. 不能定义非abstarct的成员方法。
  4. 可以实现多个接口。

 

下面我们通过实际的例子来分析两种机制的差异化:

业务场景:定义一个缓存基类,有多个缓存实例的实现。

abstract 类的方式定义:

Public abstract class BaseCache{

    public abstract void init();

    public abstract void clean();

}

Interface方式定义:

Public interface class BaseCache {

    public void init();

    public void clean();

}

我们其他的一些缓存实例类型通过继承abstract 类 BaseCache 和实现接口 BaseCache 方式来定义实例类型类,都可以满足业务场景需求,两者之间也没有什么差别,下面我们从细节点来分析,如果部分cache实例类型需要增加监控,判断当前缓存实例的容量是否超过系统的伐值。那么我们原来设计基础上增加一个monitor() 方法就可以实现了。

请看例子:

Public abstract class BaseCache{

    public abstract void init();

    public abstract void clean();

    public abstract Map<String,String> monitor();

}

我们一起来分析一下这种方法缺点,它违反了面向对象设计中的一个核心原则ISP(Interface Segregation Priciple)在cache固有的行为和方式和监控混淆在一起了。因monitor()方法的存在会影响到cache类型的设计概念。如果我们根据ISP的原则,把不同概念的类型定义为两个抽象类,按照abstract 类的方式肯定是不行的,因为在java里面是不支持多继承的,显然没办法满足业务场景。如果是接口的方式呢?

请看例子:

Public interface class BaseCache {

    public void init();

    public void clean();

public Map<String,String> monitor();

}

这种做法分析,就很难清楚的区分设计意图,把概念混淆在一起,显然是没有理清业务意图。我们需求上真正业务意图是Cache具备init 和clean两种行为,部分cache实例需要具备监控的行为。

我现在的做法是一个abstract 和interface:

Public abstract class BaseCache{

    public abstract void init();

    public void clean();

}

Public interface class ICacheMonitor {

public Map<String,String> monitor();

}

 

public class PermissionCache extends BaseCache implements ICacheMonitor{

}

 

在BaseCache 类中Clean()方法定义为非abstract ,由基类提供默认实现,提升类的复用价值,如果部分cache实例需要进行监控的就实现ICacheMonitor 接口。

Q1研发大会筹办纪实(二)

2009-05-16
  • 议程推进

主题、创意、议程确定之后,接下来要做的就是一件件落实。筹办一届大会,事无巨细,类目繁多,导演组结合每个人的特点确定分工,大体包括游戏设计、专家邀请、PPT制作、视频制作、音效制作、书签制作、礼品采购等7大类。议程推进的过程中遇到的问题必然很多,那如何及时沟通、快速解决呢?大会召开的前三周,导演组每天晚上固定时间碰头,他们以饱满的热情、全情的投入,保证了大会前期筹备任务的按时达成。
  过程是艰难的,但更是快乐的,因为搞笑的游戏、知名的专家、激昂的视频/音效、精美的书签/海报/礼品,最终都一一呈现在了大家的面前,困难也都被他们一一化解。

  • 预演排练

主持人如何对话、如何串场,游戏互动的场面如何控制,视频、音效之间如何配合,如果没有充分的预演排练,这些问题一旦爆发,对大会的危害将是致命的。“五一”其他人放假导演组不放假,5月3日所有导演以及2位主持人早早来到公司8楼健身室,模拟真实的程序和场景开始演练。台词不到位,改;环节不流畅,改;视频不直白,改;音效不震撼,改……大家都抱着追求完美、万无一失的心情,抱着承办一届激情四射、与众不同研发大会的信念,前后4次彩排,改动无数。而这一切都是在不耽误身边开发任务的前提下达成的,完全靠每个人辗转腾挪,挤出时间!

  • 现场发挥

5月6日下午1:30,大会如期而至,可大会前的紧张并没有如期而至,这可能跟我们先前的充分准备有关。我自己作为主持人之一,大姑娘上轿头一回,一定要突破心理障碍,因为我必须对得起兄弟们这半个月来的付出。当然大会过程中还是有些意外和差错,比如主投影模糊、PPT不清晰、衔接偶有停顿等,但我们同样收获了很多笑声和掌声,这已足够。

  • 庆功狂欢

谢幕之后每个兄弟既兴奋又平静,不论是主持人、导演,还是部门中被安排的工作人员,大家欢天喜地的合影,纵情地大声叫喊,时光将记住这一刻,我们心头的大石也算是放下了!当然肯定少不了的就是庆功宴,我必须犒劳我的兄弟们,你们每个人都是好样的。那天晚上我们18个人喝了3箱啤酒,那天晚上我们放声高歌到深夜12点。

  • 特别鸣谢

毋庸置疑,首先需要感谢的是5人导演组,他们居功至伟;然后是研发中心和HR政委,包括大会经费和形式变革,他们都给了我们大力的支持;最后也要感谢研发中心其他的部门,他们给我们提供了很多、很好的范例和素材。

研发大会是对承办方意志和能力的极大挑战,可我要说,如果我们坚持说到做到、打破常规,困难一定会被我们远远地甩在身后!

Q1研发大会筹办纪实(一)

2009-05-16

风水轮流转,今季到我家,承办2009Q1研发大会的重担落在了我们在线财务技术部的肩上。公元2009年5月6日,注定将是一个重要而且值得纪念的日子。我们这群人之前没有任何经验,朴实无华、处事低调,都是一班平凡甚至平淡的IT工程师,困难和挑战可想而知。其实承办研发大会有很多种“办”法,可以按部就班、不温不火,依葫画瓢简单“办”;也可以打破常规、大胆创新,挖空心思用心“办”。我们选择了后者,虽然我们正同时面对三条产品线,虽然我们今年的重头戏正在上马、冲刺在即,但我们同样认为这不仅是一次巨大的挑战,更是一次展示钱掌柜风采的大好机会。如何办出大会的特色,让所有人都有耳目一新的感觉,是我们执意追求的目标!

  • 团队组建

任何一届大会的成功都离不开精干、激情、称职的导演组和筹委会,经过自愿申请和组织推荐,导演组在4月初成立。我们都认为这是一个创新和坚持、活跃和严谨有机融合的组合,总导演陈荣杰心细如发、一丝不苟,分导演袁志俊、袁丽、袁玮文和徐寅年轻活泼、不拘一格,从人员结构来分析,这的确是当时最好的组合。特别值得一提的是袁志俊、袁丽、袁玮文因为都姓袁,我们戏称为“大三元”。

  • 目标主题

既然要用心办,我们的特色是什么,我们要达成什么目标,这些都是需要我们预先思考的问题。
  分析大会的目标,除了大会本身要达成的传统目的(促进交流、表彰先进)之外,大会的受众、与会的每个成员,考虑他们有哪些期待、他们之前有哪些不爽,如果这些问题得以解决,不就是我们应该达成的目标吗?经过导演组的访问调查,不爽的焦点集中在两个地方:
  I . 会场呆板乏味;
  II. 大会超时严重。
  焦点找到了,自然大会的目标也就明确了:
  I . 会场更加舒适,形式更加生动;
  II. 有效控制时间,保证在晚饭前结束。
  当时关于主题也有两个提案:认真工作/快乐生活和敏捷开发,前一个是公司HR近期的倡议,后一个是我们部门自己的特色,最终我们决定采用后者,因为我们拥有较多的积累和资源,并确定主题为“敏捷在阿里”。

  • 创意征集

那么如何突出我们自己的特色呢?还是先从分析之前类似大会的欠缺着手,颁奖过程比较枯燥、略显程式化;技术分享精彩程度略有不足、兴致不高;议题众多、主题不够突出等。非常欣喜于导演们到位的分析,更欣喜于他们拿出的创意方案:
  I . 颁奖过程:穿插游戏环节,增添乐趣、强化互动,同时让所有人更好地认识获奖人和团队;
  II. 技术分享:邀请外部行业专家到会主题演讲,激发大家的兴趣;
  III 突出主题:简化其他议题,突出“敏捷开发”的主题,包括:主题演讲、知识问答以及通过任务墙(Task Wall)这一敏捷手法体现大会的进程。
  游戏环节是本次大会的一大亮点,猜猜猜、喂你服务、爬钢管和传橙达意等个个精彩,台上台下笑声一片,很好地烘托了大会的气氛。

  • 寻找场地

舒适的场地跟会场的硬件、座位的布置等条件密不可分,原有的场地更适合做政治报告,无法互动,容易让人昏昏欲睡,如果想在会场的舒适度上有所突破,我们必须找到另外一个更不一样的场地。导演组意识到了场地的重要性,他们四处出动,方圆5公里、10分钟路程内地毯式搜索,几乎所有的酒店、学校、礼堂都找遍了,但很难找到环境合适又可容纳近200人的场地。
  也正印证了那句话:踏破铁鞋无觅处,得来全不费工夫,就在我们即将绝望的时候,正好在临近选址结束的最后前2天,我们团队活动来到了东方威尼斯海鲜自助餐厅,碰巧看到旁边有个演艺吧,结果进去一看,哇,这正是我们想要的!灯光、音响一流,时尚的装饰、舒适的沙发,而且分为上下两层,场地也较大。顿时,导演组的所有人兴奋不已。

( to be continued. )

  • 议程推进
  • 预演排练
  • 现场发挥
  • 庆功狂欢
  • 特别鸣谢

优秀的项目经理

2009-04-20

今天周末,在家休息,好不容易闲来无事,来回串门,无意间发现隔壁口碑的室友,有一块挺精致的鼠标垫,细细一看,上面列了7个点:

1、  坚持不懈的向团队传达目标

2、  崇拜质量

3、  每天都和项目成员聊上两句

4、  敢于说不,慎于说不

5、  帮助项目成员解决困难,而不是帮他干活

6、  敏感,不将风险留到最后才面对

7、  懂得欢庆

 

由于和目前项目过程中出现的一些问题有惊人的相似,于是抄录下来,以供大家参考。尤其是3567都是做为技术出身的一线管理者比较缺乏的。

制度经济学与软件开发流程

2009-04-07

我们在崇拜王志东、求伯君、严袁曹等第一代软件英雄的同时,也在感叹当前软件开发越来越复杂、需求变动越来越快,无法再像当年的英雄们一样编写软件了,必须依靠团队的协作、完善的流程、高深的工程理论才能做出符合需求的软件。所以在现在的形式下,我们每天都在考虑找一个什么样的理论支撑,制定一个什么样的流程、制度、才能使得团队合作更顺畅、软件开发效率更高、质量更好。前两天看到谢文的一篇博客《制度资本—-互联网的游戏规则之二》,说到了制度经济学,感觉挺有意思,所以就查了一些相关的概念,联想到了和我们开发流程的一些联系:

 

经济人:
      西方古典经济学中的“经济人”假设,认为人具有完全的理性,可以做出让自己利益最大化的选择。1978年的诺贝尔经济学奖得主西蒙修正了这一假设,提出了“有限理性”概念,认为人是介于完全理性与非理性之间的“有限理性”状态。来自亚当·斯密《国富论》中的一段话:
  我们每天所需要的食物和饮料,不是出自屠户、酿酒家和面包师的恩惠,而是出于他们自利的打算。我们不说唤起他们利他心的话,而说唤起他们利己心的话,我们不说我们自己需要,而说对他们有好处。

 

制度经济学:
      制度指人际交往中的规则及社会组织的结构和机制。制度经济学是把制度作为研究对象的一门经济学分支。
      制度经济学强调个人首先是一种“社会人”和“组织人”,而不是“经济人”。作为一种社会存在,除了物质经济利益以外,人还追求安全、自尊、情感、社会地位等等社会性的需要。因为人所做出的选择,并不仅仅以他的内在效用函数为基础,而且还建立在他个人的社会经验、不断的学习过程以及构成其日常生活组成部分的个人之间相互作用的基础之上。因此,人的行为是直接依赖于他生活在其中的社会文化环境的。所以,应当从每个人的现实存在和他与环境的关系方面,从制度结构、组织模式方面,从文化和社会规模等方面去考察人的经济行为。

 

      制度经济学立足于个人之间的互动来理解经济活动,首先确立以人与人之间的关系作为研究的起点,反对以一个确定的、总量的标准对整个经济活动作出安排的研究思路。

 

      制度经济学判断制度机制优劣的最重要标准,是看它们是否有利于市场交易的发生与深化。如果一国的制度有利于交易市场的容量最大化、有利于经济的深化,那么我们就说该国具有高的制度资本。不利于市场交易的制度,则使交易的成本变高,这种成本通常被称为“制度成本”。当然,制度成本不仅仅指在市场交易发生过程中实际要支付的成本,也包括由于制度障碍而根本无法进行或选择放弃的市场交易所带来的机会成本,这种机会成本包括“本来可深化的市场”因制度障碍而只能半途而废的情况,以及市场勉强得到发展的情况。制度经济学的核心命题是产权保护和合约执行是经济深化发展的必要前提。如果没有可靠的产权与合约权益保护制度,人们就无法预期从事市场交易、从事投资的结果,也不知道从交易、投资中获得的利益能否属于自己。而经营、交易结果的不确定性将迫使人们停止交易、不愿作出投资,即使他们想进行市场交易,交易成本也可能高得令人望而却步。于是市场发展会停滞不前,经济增长无法持续。

 

再回到软件开发流程:
软件开发流程强调团队,即人与人之间的合作。
判断软件开发流程优劣的标准:执行成本、开发效率、软件质量。
这两点都和制度经济学非常吻合,即我们在制定流程时,必须以人为本、强调人作为“社会人”和“组织人”的特征,不能把人当成流水线上的机器,现在流行的敏捷开发非常强调这点;流程的制定首先必须简单、易于执行,这样才能减小执行的成本,提高开发效率,保证软件开发质量。

参考文档:

1、http://blog.sina.com.cn/s/blog_513a2b800100cu5l.html?tj=1

2、http://baike.baidu.com/view/482272.htm

对“敏捷”的一些体会

2009-04-07

敏捷是什么: 

说起敏捷开发,很多人第一反应这是一种开发技术,立马想到OOP设计原则、TDDMDDXP等等。

我理解的敏捷:

敏捷是一个过程,而不是技术。一个过程让团队成员爽、轻松、高效、产品质量过关,这就是敏捷的过程。TDDMDDoop等是实施过程中的一些方法,这些方法可能某些的团队实施起来让过程很敏捷,但是某些团队实施起来就不一定敏捷了,就像女人适合练玉女心经、男人适合练九阳神功,因为每个团队所处的环境、团队的水平都不一样,有很多的客观和主观的原因。

敏捷的基础:信任——你做事、我放心。

没有信任,就不可能有敏捷。想想老板、同事告诉你“你做事,我放心”,你是什么反映。

信任,意味着你有更大的权利决策更多的事情,同时也意味着你需要承担更多的责任,俗话说“这件事交给你了,你当家做主了”。

对于我们,我们应该怎么做:

1、  流程是否可以减少:

产品会议->需求评审->Kick Off ->设计评审->项目周会(晨会)->TC评审->发布评审 等等,我们是否每个项目都要按照一定模板,一个阶段一个阶段的实施。如果大家互相非常信任,是否还需要这么多的流程。我的理解,该省则省,视项目而定。有些小项目,UC可以简单点,设计可以不做,有些复杂点的项目,一步一步走,不要越级。就像如果拿着一个小东西,你跑没关系,跳着前进也没关系,但是背着一个很大很重的包,这时就跑步动了,那就一步一步稳稳当当的走吧(东北话,有点墨迹)。

2、  开会是否真的需要邀请那么多人:

我们发会议邀请,邮件列表里往往几十个人,运营、运营老大、pdpd老大、开发及其老大等等,想想这么多人都是真的需要关注这件事情么。

3、  开会是否必须要到会议室

现在我们每次开会都要预定会议室,每次都很难订到,那么想想我们是否真的需要到会议室才能开会。开会,是找几个相关的人到一个不受影响(也不要影响别人)的地方

一起讨论碰到的问题,或者宣布一些什么事情、汇报情况等。那么座位上,或者休闲吧、或者楼梯口、旺旺群邮件等是否也具有相应的功能。

4、  设计:过度设计。

我们在做设计的时候(需求设计、系统设计),经常听到这样的话“将来什么什么情况时,你怎么办”。想想,如果将来的情况你都能考虑到话,现在为什么不把做掉,

还要等到将来,或者说将来的多种情况你都考虑到,那将来还需要我们干什么,直接从你这几种方案里选一个就好了。现实当中,我们为将来做的设计,将来真的用上的,大家可以

举几个实际例子来看看,很少。当然,适当考虑一些是没错的,但是不要过多的考虑,否则就是过度设计,我们不需要为将来背太多的书,还是多花点精力盯紧当前的需求。

做一天和尚撞一天钟,你看和尚活得多爽。

5、  重构:随时重构、包括流程。

需求每天都在变,环境每天都在变,所以两年前很好的流程,很好的技术架构现在已经很不爽了,所以需要随时把不爽的,过时的流程、架构、代码

砍掉,换上与时俱进的流程、架构、代码。

6、保持学习:

社会在发展、环境每天都在变,我们不学习,会落伍的。

7、最后一点,敏捷不是一个人、一个部门的事情,是需要整个公司一起来做才能做好的事情,现在我们没做一个项目,都会涉及多人、多部门、甚至多个公司,需要大家互相理解互相信任。单纯一个人或者一个部门敏捷的过程是无法实施的。

敏捷开发管理之任务板

2009-03-25

在K做项目管理的那段时间里面,我们尝试了敏捷项目管理的项目墙制度,既是以任务卡片与个人任务相结合的方式,描述当前个人工作进展的程度。在项目执行过程中,收到了很好的反馈,对整个迭代周期中项目组每个成员的工作内容和任务状况一目了然,能有清晰的审视和判断。但是同时,也接收到同事们的一些反映,任务过程过细、个人和整个子项目的关系不明,有为管理者服务的嫌疑,个人对它的积极性不高等问题。

在看《敏捷估计与规划》(大名鼎鼎的《Agile Estimating and Planning》)的时候,监督迭代计划的执行一章中,它详细提到了一种用户迭代跟踪的工具:任务板。

任务板使用的目的在于既为开发小组提供了组织工作管理的便捷,也为整个开发小组成员对当前项目任务的进展情况有个了解。在仔细了解了任务板工具,并结合当前我们的项目特点,我绘制了一个任务板模型:

这个任务板模型和实施方式与书中描述和原项目墙有些改变的地方。

首先、我们项目都是以项目容器容纳子项目方式进行迭代开发,因而一次迭代周期包含了多个子项目,任务板将以子项目为纬度,拆分项目为更细,可以实施的粒度。子任务的卡片就能代表该整个子项目的迭代任务以及工作量;
其次、任务卡片是很好的方式,在项目启动时进行相应的任务到责任人的认领划分,并在整个周期内相对固定,除非出现进度异常,卡片需要对应上所属的子项目,明确子任务范围,文字清晰、易懂,责任人、完成该子任务的工时、预计子任务的工作时间。在出现异常的任务卡片上,可以标注或另起卡片注明;
第三、将项目开发状态由4种百分比状态简化为两种(待处理、正在处理)状态,由于普遍情况下,是与非的描述更容易让人的认知感得到强化,且一个人同时操作几项子任务本身就可能出现问题,这样也便于发现有相关依赖任务而没有开始所产生的等待关系;
第四、在“待处理”与“正在处理”两个状态间加入“单元测试”确认点,加深大家的测试驱动开发意识;
第五、当子项目所有卡片达到“待验证”状态时,就意味QA可以介入测试,前期也可以通过沟通,部分子任务达到“待测试”时同样也可以QA介入;
最后、发布并总结项目过程。

以项目为核心而非组员手上的任务,可以让组员更清晰自己工作的进度在整个任务模块中的位置以及子任务间相互依赖的情况,同时也能兼顾到项目周期中的几个里程碑式的状态,可以一目了然看到整个项目或是子项目的进展情况。