时不时的,我会有一些小项目需要其他人的参与和帮助。贡献者往往处于不同的地区、公司。出于现实的考虑,大家白天需要上班,下班还有各种社交需求,也许在时不时的某一天的某个时候,他们开始为这个小项目工作,却发现需要很久才能跟上其他人的节奏。一般来说,我自己的catch up的方式是这样的:

  1. 阅读代码
  2. 将应用运行起来,看看有什么新特性
  3. 阅读来往邮件 - 往往很少
  4. 琢磨一下还剩什么可以做的……开始工作

我感到很郁闷。我估计其他贡献者,除非是一直持续的进行code review和功能编写的,也应该感到很郁闷。我开始反思自己的开源项目其他贡献者很难参与、进展得不好不仅仅是因为项目本身,而更多的是因为缺乏一个更加有效的沟通机制。我开始尝试解决这个问题。于是:

  1. 代码放到了Assembla上,这样每次SVN提交,参与者都能得到邮件通知
  2. 我在BitBucket上建立了任务列表,任务的变更就能得到通知 ……

于是我又尝试了采用Mingle, FogBugz. 在针对具体任务的跟踪和流程配置上,他们表现非常优秀,然而,会话信息的丢失,却使得在“分布式团队”这个场景下变得沟通困难。简单的说,他们都无法回答这个问题:

“作为一个开发人员,当我开始工作的时候,我想看到其他人都做了什么,以便我能迅速了解上下文,开始工作”

目前,针对分布式、小团队的项目管理需求有哪些呢?

最高设计思路:项目管理就是沟通。对于项目管理的核心基本上创新已经不多,无非就是计划、实现、跟踪、检查。界面和功能实现的创新会更加重要。我能想到的设计如下:

  1. 界面!界面!界面!与时俱进、不断进化、直观清爽的界面是吸引使用的第一准则。

  2. ActivityStream是一种现代非常流行的设计模式,常见于社交网站的如Facebook、开心网之类。基本的设计思路将“谁在什么时候做了什么”按照时间线的方式展现出来,并且作为默认展示。针对项目管理,一个典型的ActivityStream如下例:

张三昨天上午完成了任务:添加登录支持,并且评论:“现在支持OpenId登录了” 李四前天提交了代码:< 代码文件列表>,注释:修改了界面 ……

对于我而言,能够在一个地方看到这些信息非常重要,特别是团队不在一起工作或者工作时间没有重叠的时候。

  1. 开放的登录支持。不知道为什么,我逐渐对任何需要重新注册的应用感到逐渐不可忍受。我想也许会有跟我差不多的人……如果能够使用OpenID/Gmail进行登录,那么体验会更好

  2. 所有的信息都可评论、回复。无论是一个新的提交,还是完成了一个新的任务,还是写了一个份新的wiki文档,总有时候希望对这些信息发起讨论。邮件的集成不应该仅仅“知会”,而应该能够直接回复,并且会展示到这个系统中。

  3. 移动支持。系统在移动浏览器上看起来应该也不坏。

  4. 开放API,而非插件机制,让第三方的应用可以接入。

Mingle很好。FogBugz很好。Trac很优秀。Redmine也不错。但对于我而言,他们真的不适合分布式小团队。