计划的重要性相信各位读者都不会忽略,事情不论大小都有提前计划的必要。晚上约吃饭,要准备一下着装,找餐厅,揣摩邀请的说辞;对于软件开发这样一个高度复杂的脑力劳动来说,清晰、可执行的计划当然是必不可少的。这篇文章我会分享一下我在制定软件开发计划中的一些心得,有些计划是做在整个项目之前的,有些计划是做在项目进行中,对于新feature的开发而制定的;完善的计划给我带来了很多好处,比如清晰的时间预期,减少了的压力等等,下面我们来具体叙述。
我们需要什么样的计划
在项目从0到1的时候,当你对该软件还没有深入了解的时候,首先的切入点是用户故事。先不管开发细节,想一下这个软件要解决什么问题,作为用户他会如何使用这个软件,然后按照你对于这两个问题的答案,写下5-6个用户故事(当然,有时甚至更多)。这是一个开胃菜,目的是将自己引入开发的思路中,;有了用户故事以后,你还需要思考一下如何实现这些feature, 技术栈如何搭建,如果可以的话大概画一个架构图。开发计划中最重要的一点是需要估计出开发时间,deadline是一个节拍器,用来带领开发人员前进;开发时间的确定不光是方便了开发者分配自己的时间精力,也让非技术人员,如投资人、产品经理等了解你们的进度。
如何定计划
写用户故事和画架构图想必都是容易的事情,制定计划中最困难的是估计时间,下面我说一下我是如何估计开发时间的。
- 从自己的专长出发,去规划feature的implementation. 比如我是后端强于前端,那我就先计划后端的API该如何开发,在思考完后端以后再去看前端。
- 制定计划的时候就要把软件设计粒度做到接口,输入什么类型,输出什么类型,方法名字叫什么,类名字叫什么
- 前端的开发我不是很擅长,我常用的方法是把一个feature分解成若干个步骤,比如我们要用JS可视化API Call的JSON数据,就会分成接受数据打log、第一层数据分解、字符串split、集成进页面等等,每个步骤小到你刚好能handle,然后一步一步进行
相信上述3个步骤走下来以后,根据你的开发经验,就能够估计出需要多少时间;比如我会估计一下每个类TDD会耗费多少时间,再分配一点integration的时间,就确定总的时间。
这么定的计划有什么好处
分解问题以后,压力会变小。在分解之前这个待开发的软件是个bulk, 巨大无比,看似牛逼,但你一分解以后,就能发现其实每个部件你都能做,只要耐心点,一块一块积木搭起来,多花点时间都能做出来。
带时间节点的计划能够帮助所有对该项目感兴趣的人,让他们更好地了解开发过程。deadline是一个节拍器,用来带领开发人员前进;开发时间的确定不光是方便了开发者分配自己的时间精力,也让非技术人员,如投资人、产品经理等了解你们的进度。
Cost
当然,这种计划在制定的时候是非常费脑力的。你需要十分专注,甚至要做一些research,但我觉得这是值得的,毕竟一开始计划欠下的债,到最后开发过程中还是要一一还出来的。做计划中考虑不周到的地方,开发过程中就必须re-design, 那就更加花费时间。所以综上所述,在项目开始之前多花点时间做计划,是非常有意义的一件事情。