低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

借助信息化工作空间实现高效的团队自我管理

2009 年 3 月 18 日

“怎样保证每个团队成员高效地工作,使组织产生最大的效益”是每一个经理最大的挑战。通常经理们会采取以下两种手段:

  1. 告诉团队成员该做什么(Command and Control)
  2. 团队成员根据设定好的原则,自己决定下一步该做什么(Self-organizing)

在很多软件项目开发团队中,项目经理和部门经理负责项目管理和控制。为了控制软件开发的进度,效率和风险,经理们往往要求团队成员提交和更新各种各样的表格,例如日报、周报、代码量报告、缺陷报告等等,通过各种计划、报告、表格来管理团队。但是这种方法有很多固有的弊病。

  • 首先,数据不准确。例如在日报中,一般要求提交任务完成百分比。这个数字很多时候是团队成员拍脑袋想出来的。任务完成 90% 后,剩下的 10% 需要更多的时间完成的情况在很多团队中也屡见不鲜。
  • 其次,数据不及时。除了项目文件,经理们没有办法了解项目的具体运行状况,进度,只有通过日报或者周报。任务分配也不及时,团队内部工作量也不均衡。
  • 再次,衡量标准不恰当。
    • 用代码量作为衡量 Dev 生产率的标准本来就是不恰当的。这使团队成员单纯追求代码量而不停的复制拷贝,不关心优秀系统架构所要求的代码简洁,架构清晰。
    • 用缺陷作为衡量 Dev 工作效率的标准也是不恰当的。软件开发并不仅仅是编写代码,更重要的是沟通问题。绝大多数缺陷其实是由需求不明确或者是沟通的不充分和不准确导致的。用缺陷率作为标准会导致团员成员之间的矛盾,互相指责,推卸责任。
  • 再次,信息不透明,不直观。报告往往不是团队成员直接可见的,需要登录到网站,或者访问 Source Control 或者共享文件夹的某个文件(往往是有权限控制的)。这些信息不会直接展示给大家,他们总是需要一路点击过去。
  • 最后,过多的无效工作。团队成员要花费很多时间和精力在更新及维护报告上面,但这些工作并没有业务价值。

在处理复杂像软件开发这类复杂问题的时候,使用 Command&Control 方式效率十分低下。很多情况下即使是最有经验的经理,由于他不在现场,不掌握全部具体情况,也很难做出准确的判断,有效地指挥团队成员工作。而第二种管理方式(Self-organizing)在解决复杂问题时就要有效得多。在复杂的环境中,可以通过训练及培训使团队成员掌握工作的基本原则,把责任下放给第一线的工作人员,由他们根据不断变化的实际情况,不断地调 整,完成团队任务。军队也是类似,在战斗过程中,作为战斗指挥的上级极少直接指挥每个士兵战斗。人员和班组就是自我管理,根据现实情况和战略目标动态调整 战术。这也是绝大多数的敏捷方法论都在强调团队的自我管理的原因。

怎样在软件开发中实现团队的自我管理?怎样让团队找到自身的问题?怎样实时地反映项目的进度?团队成员怎样知道每天应该做什么?为了解决这些问题,我们的经验是日常开发中建立一个基于拉动式生产方式的信息化工作空间。

  • 首先,我们的日常开发以 Scrum 为基本框架,并特别强调团队的自我管理。具体做法是:

    1. 短迭代。每两个星期一个 Sprint。每个 Sprint 给几个客户做演示。产品负责人会根据演示的反馈以及原先的发布计划重新整理 Product Backlog,并由此产生下一个 Sprint 的计划。因此团队的每个 Sprint 的任务是由业务驱动的。
    2. 用户故事。产品负责人会在计划会议开始之前整理成用户故事。产品负责人在整理用户故事过程中会注意收集真正客户想要的东西,理解客 户的意愿,而不是业务以及技术上怎样实现。在计划会议会议中,给团队成员解释需求,团队成员会根据对需求的理解提出可能的方案(当然也有可能是多个方 案),分出任务,对任务做出估计。但是这些估计也是比较粗略的,很多时候需求还是不能很明确,但是一般达到大家能够对用户故事有一个基本的理解,能够开始 着手,能够做出大体的估计的程度就可以。在 Sprint 过程中,还会不断发现新的需求,或者采用或者否决一些方案。这些都是每个 Scrum 团队在 Sprint 中动态调整的。
    3. 迭代开始时,避免任务分配到个人。在计划会议会议中,用计划游戏,每个人都参与估计,每个人都要求理解用户故事。在 Sprint 中,每个成员根据一些简单的原则来认领任务(比如从上到下优先级,不超过最大并发任务数)。通过结对编程、Wiki 等一些知识共享的手段,多数人很快就能胜任各种任务。
    4. 周期性的例会(每日例会、Scrum of Scrum)。在例会中团队成员汇报进度(做了什么),承诺(根据当前情况,下一步要做什么),需求(有哪些困难,需要其他成员或者组织的帮助)。团队会 重新估计剩下的任务,如果需要,项目成员和产品负责人一起调整 Sprint Backlog。
  • 其次,合理使用信息辐射器( Information Radiator ,另见 The Ideal Agile Workspace ),我们目前使用的信息辐射器包括:

    1. Sprint Backlog,这是整个项目团队自我管理的核心。实时反映项目的状况。通过 Sprint Backlog 可以了解到任务分配,项目进展(燃尽图),缺陷,困难等等。Sprint Backlog 上的不同类任务用不同颜色区分,一目了然。很容易就可以了解任务分配,Sprint 的瓶颈以及困难(用红色表示)在哪里。
    2. 故事墙,较为长期的开发计划。
    3. Build Monitor,一般包括一个红绿灯,一个大屏幕显示器。红绿灯监控主分支的持续集成系统的状况,如果构建失败(可能 原因包括编译错误,单元测试问题,冒烟测试以及回归测试问题等),立刻显示红灯,同时也会发出声音(XXXX project is “still” btoken)。大屏幕显示器主要是反映一些大家主要关注的持续集成项目的状态。其实如果采取按组件做分支的方式,每个 Scrum Team 还可以有一个熔岩灯,用来监控团队分支的状态。
    4. 各种白板,团队成员可以用白板对具体需求,具体模块架构以及其实现进行讨论。然后将白板的内容作公示,指导团队成员的日常开发。如果发现问题,随时修改白板的内容。
    5. 团队日历,主要是表明一些重要的日期以及成员请假情况。
    6. 系统框架图,招贴画。团队成员可以了解整个系统的高层次的系统架构。
  • 除了这些,还可以考虑加下面的一些内容

    1. 各种手绘表格。用于过程改进或者其他作用的手绘表格,常见的例子有在回顾会议里面发现的问题;测试用例数目;测试覆盖率;结对编程轮换表;要重构的函数;Burnup Chart 等。
    2. 产品愿景,团队成员对具体开发中遇到的问题,需要做决定的时候,能够基于愿景做出取舍。
    3. 系统词汇表,统一语言和隐喻。只有开发团队和客户用同样的语言,才会减少沟通中的误解。
    4. 团队可根据自身的需求设计更多的信息辐射器。

笔者的体会是,信息化工作空间的关键是信息,最终目的是使任何人只要进入一个团队的工作区域,就可以立刻了解项目的进度,项目的运行情况,现有的问 题,每个人现在的任务,一些团队需要改进的地方等等。大家每天来上班,只要看一下板,立刻就知道自己该做什么。不光是团队成员,一些 Stakeholder 也可以到工作区域去看一看信息辐射器,了解最新的状况。即使 Stakeholder 不能到现场,只要经常发送一些照片,或者经常参 加一些演示,效果也会不错。实现信息化工作空间的前提是团队成员要坐在一起,如果不能坐在一起,那只能通过一些电子手段进行同步。当然信息辐射器也不能太 多,太多也会导致混乱。

很多的敏捷方法论(Scrum、XP、Lean)都提倡团队的自我管理。而信息化工作空间则是保证我们团队自我管理的核心实践。

2009 年 3 月 18 日 01:261874

评论

发布
暂无评论
发现更多内容

线上问题排查学习总结

原来不悔

Java Linux

week8-conclusion

J

Spring Boot 中的全局异常处理

武哥聊编程

Java springboot SpringBoot 2 异常处理 28天写作

不愧是Github上疯传的腾讯Java全栈进阶笔记!总结的太全啥都有!

Java架构之路

Java 程序员 架构 面试 编程语言

做事情的三条边

石云升

28天写作 基线 极限

使用 JSX 建立 Markup 组件风格

三钻

组件化 前端进阶

创业失败启示录|校园微生活之校园女神

青城

28天写作 创业失败启示录

智慧平安小区平台建设,智慧安防系统开发

135深圳3055源中瑞8032

区块链知识产权保护应用,用区块链保护版权

135深圳3055源中瑞8032

现成矿机挖矿软件系统APP开发案例

开發I852946OIIO

系统开发

区块链交易所系统开发|区块链交易所软件APP开发

开發I852946OIIO

系统开发

RocketMQ源码分析之消息拉取流程

互联网架构师小马

面试进阶必备:JVM+Redis+设计模式+SpringBoot.pdf文档资料

Java成神之路

Java 程序员 架构 面试 编程语言

python自学 第二章 python语言基础之语法特点(注释、代码缩进、编码规范)

WEB前端修行日志

Python 编码格式

爱了爱了!阿里爆款Spring进阶宝典,涵盖其所有技术栈(源码+实战彻底玩转Spring框架)

Java架构之路

Java 程序员 架构 面试 编程语言

C2C交易系统APP开发|C2C交易软件开发

开發I852946OIIO

系统开发

产品经理训练营笔记-认识产品经理(上)

.nil?

Android面试总结(一)

我就感觉到快

网络攻防: 爬虫的钳形攻势

杨东冬

大数据 安全攻防 网络安全 爬虫 安全

2020下半年蚂蚁Java开发三面真题:metaQ消息中间件+GC算法+MySQL数据同步

Java成神之路

Java 程序员 架构 面试 编程语言

编程语言学习心得 (完全版) -- 不要害怕遗忘和混淆

蔡超

程序员 个人成长 编程语言 go语言

python自学 第三章 python语言基础之保留字、标识符与内置函数

WEB前端修行日志

Python 编码格式

python自学 第四章 python语言基础之变量

WEB前端修行日志

Python 编码格式

RocketMQ解析

石刻掌纹

一款dubbo服务可视化调试工具

程序员架构进阶

dubbo 工具 RPC 服务化 28天写作

同事怒怼领导“沙雕“,原来是看了这份Java面试文档,已拿到阿里offer,薪资40K

Java成神之路

Java 程序员 架构 面试 编程语言

是什么可以在Github上标星85.4K,揭秘阿里Springboot项目笔记!

996小迁

Java 架构 面试 springboot

阿里首推的“SpringBoot+Vue全栈项目”有多牛X?

Java架构之路

Java 程序员 架构 面试 编程语言

Java架构师必会的知识清单,如何让你技术上的提升面试时的丰收

Crud的程序员

Java 架构 java程序员

2020最新Java面试丨蚂蚁内推三面题目:Full GC++MongoDB+集群部署+分布式锁+秒杀

Java成神之路

Java 程序员 架构 面试 编程语言

突破瓶颈,“iOS开发”,跳槽面试必备题(针对年后面试者)

Geek_24a3d9

面试题 简历 ios开发 大厂面试经历 跳槽面试

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

借助信息化工作空间实现高效的团队自我管理-InfoQ