如何使得程序员发挥最大的潜力,如何使用户最大程度上的满意。讲一下我们公司的这种开发管理模式――敏捷开发流程。
就目前某一项目而言,该项目小组有5人,PL会在每周周四制定下一周的工作计划让程序员分别选择自己最有把握的部分来开发,并且让他们自己估计最好和最坏的时间。这样调动他们的积极性,发挥他们最大的能力,提高工作效率,会提前完成任务,而且有时间准备下周的东东。因为有冗余的时间,engineers会很高兴,效率高,从而形成良性循环。不过有些程序员可能会选择他们感兴趣的而不是最有把握的――措施――要承担到时候你做不出来的后果:别人都陪你加班;所以程序员会选择自己有把握的来做,而自己会用冗余的时间来做自己感兴趣的东东^_^
同时每周的计划会被整理到trac上,让客户来确定优先级(major或者minor),对于被确认为minor的功能,将会被滞后,因为用户都已认为那是可有可无的。(不过我个人认为这个可能会有隐患,对minor的理解可能会造成某些方面的歧义)。用户选择好了优先级,而且这些咚咚都是你可以确保你的程序员可以完成的咚咚。每周工作结束的时候,你还会有最新版本的release note提交给用户。作为用户,他很清楚你这一周在干什么,而且你做的咚咚是经过他们认可的,最后他们也能看到你的成果,如果有和需求不一致的、不满意的地方他们也会及时的提交出来,而不是等到最后关头来解决。这样其实就是相互educate的过程,你的用户将会知道什么是可行的,你也会清楚的知道用户想要的是什么。而不会出现到了项目末尾由于不能在客户指定的时间内出某个版本而造成不愉快,或者说是你作出来的咚咚根本不是客户想要的。这样互相educate,最后就能实现所谓的双赢。
对于有明确客户的项目来说,这确实是一套不错的敏捷开发方法,而对于没有明确客户的项目(就是那种自己做东西,然后等着被别人看上的)将如何处理那?其实有时候客户明确了,客户也不一定清楚自己想要要什么,即使有了明确的客户,你也会发现客户会不断的修改和增加他们的需求。但对于没有明确客户的项目来说,你的客户就是定位市场的研发人员,他们的职责就是发现客户的需求,或者说可以刺激客户的新需求,让用户发现原来这样会更好。
就目前某一项目而言,该项目小组有5人,PL会在每周周四制定下一周的工作计划让程序员分别选择自己最有把握的部分来开发,并且让他们自己估计最好和最坏的时间。这样调动他们的积极性,发挥他们最大的能力,提高工作效率,会提前完成任务,而且有时间准备下周的东东。因为有冗余的时间,engineers会很高兴,效率高,从而形成良性循环。不过有些程序员可能会选择他们感兴趣的而不是最有把握的――措施――要承担到时候你做不出来的后果:别人都陪你加班;所以程序员会选择自己有把握的来做,而自己会用冗余的时间来做自己感兴趣的东东^_^
同时每周的计划会被整理到trac上,让客户来确定优先级(major或者minor),对于被确认为minor的功能,将会被滞后,因为用户都已认为那是可有可无的。(不过我个人认为这个可能会有隐患,对minor的理解可能会造成某些方面的歧义)。用户选择好了优先级,而且这些咚咚都是你可以确保你的程序员可以完成的咚咚。每周工作结束的时候,你还会有最新版本的release note提交给用户。作为用户,他很清楚你这一周在干什么,而且你做的咚咚是经过他们认可的,最后他们也能看到你的成果,如果有和需求不一致的、不满意的地方他们也会及时的提交出来,而不是等到最后关头来解决。这样其实就是相互educate的过程,你的用户将会知道什么是可行的,你也会清楚的知道用户想要的是什么。而不会出现到了项目末尾由于不能在客户指定的时间内出某个版本而造成不愉快,或者说是你作出来的咚咚根本不是客户想要的。这样互相educate,最后就能实现所谓的双赢。
对于有明确客户的项目来说,这确实是一套不错的敏捷开发方法,而对于没有明确客户的项目(就是那种自己做东西,然后等着被别人看上的)将如何处理那?其实有时候客户明确了,客户也不一定清楚自己想要要什么,即使有了明确的客户,你也会发现客户会不断的修改和增加他们的需求。但对于没有明确客户的项目来说,你的客户就是定位市场的研发人员,他们的职责就是发现客户的需求,或者说可以刺激客户的新需求,让用户发现原来这样会更好。