说说小团队开发(2)
从年初到现在,大概做了好几个项目:
- 始于去年年末的企业站,基于 Drupal 的二次开发。
- 企业站,基于 Joolma 的二次开发。
- 某个微博客服务的 Firefox 插件。
- 一个静态页面为主的小企业站。
- 一个简易 CMS 的开发;两个基于这个简易 CMS 的小站点。
- 一个 iPhone 相关的项目。
也不一一列数每个项目的经验教训了,毕竟失败的多(低于我的期望值)。只简单说说我所得的。
需求管理
对于项目管理者和开发者,这都是一个重要的课题。因为有需求,所以才有项目,而在项目开发过程中,闲着的项目管理者或多或少会继续思考整个项目,继而新的需求产生了。
在《敏捷迭代开发管理者指南》中的《时间箱迭代开发》一节,说到一个项目里面有四个变量:资源(人员),范围(任务),时间,质量。以时间盒的方式固定一个变量,然后在一定时间内(一个迭代中)的任务是相对固定的;新任务将会在下一个迭代中再进行考虑。
在开始之时,我期望项目管理者能够给出详尽的文档,然后再开始进行开发;然而这不现实,瀑布式开发不适合于 Web Development。继而,我希望项目管理者(或者,产品负责人)能够提出明确的需求。然而需求总会是模糊的,因为他们都不知道真正需要的是什么。他们需要可以在业务上支撑探索试错的代码。
另一方面来说,目标要明确:能运行是一个目标。兼容性问题是一个目标,稳定性问题是一个目标。一个阶段的目标必须要清晰明确解决哪些问题。
项目管理与团队
项目管理者有一个职责是,帮助团队成员的成长。优秀的开发者总是短缺的。那么,怎么帮助一个经验不足的开发者成长也算是项目管理者的一个责任了。对于项目管理者而言,有两个东西是必须的:
- Bug Tracking System – 需求管理也可以这个系统开展。
- Test Driven Development – 将需求转化为可测试的描述。单元测试、
我不敢说或者这才是让开发者快速开发符合业务需求的最佳良方;我正在尝试这两个东西,别人说有效,但自己也得进行尝试。当然,更多的 Best Practices 包括版本化管理、持续集成、自动构建、学习使用更好的工具(例如,vim)、每个迭代后的自省和改进、重构,也列数不出来了。若然项目管理者关注开发者是否有良好的编码习惯,是否已经将重复的工作尽可能地自动化,是否从这些习惯中获得更高的编码效率和代码质量——我想这样比单纯的给他们分享技术文档、教程来得更好。
开发
在前文引用的文章中,有一篇谈及使用 VMware 统一开发平台,对此我深有感触。开发平台是铁定需要统一的,特别是对于我这种有代码洁癖的人而言。统一的开发环境配置,统一的编辑器配置,这些都有助于开发。
至于统一开发平台配置这点,我计划进行尝试,或者届时我会写点什么。
部署、运维和监控
Google Analytics,awstats,监控宝都是好东西。或者还存在更多我暂时说不上的或者我不知道的好东西。
部署一定要自动化。自动化有什么好处呢?例如你运行 rake deploy production,整个运行环境就已经完成初始化了,你说这省事不省事?
写得有点乱,差点不好意思发了。