当前位置: 首页 > 编程日记 > 正文

挨踢项目求生法则-团队建设篇

摘要

知道什么是挨踢项目吧?什么!不知道?那IT项目知道了吧?为了不让客户踢、不让老板踢、项目组成员之间不互相踢,俺为大家分享一些减少被踢机会的心得体会。就算不能让项目成功,也至少不会死得那么惨吧!我将分战略篇、团队建设篇、需求篇、设计篇、编码篇、测试篇、实施篇和计划篇为你分享。

作者:张传波
www.umlonline.org/school/

什么叫挨踢项目?

IT项目,特别是软件开发项目,都属于“挨踢”项目的范畴。挨踢项目的几大特点:

1.需求不确定。
2.技术不确定。
3.工期限死。
4.预算限死

两大不确定和两大限死,你想不“挨踢”都难!

由“踢皮球”事件想到的

事件回放:

某项目部署给客户后,重现了一些以前已经解决的问题,而这些问题测试时并没有出现。经检查,发现测试的版本不是部署的版本,不知道为什么老版本部署给客户了。领导要追究责任,于是大家各有说法:
开发人员说:我是按要求打标签的,没有问题。
测试人员说:我是在提交区中取版本来测试的,我没有出错。
实施人员说:我是按照开发给我的版本去部署的,我没有过失。
最后终于有人说:是之前已经离职的某某弄错版本号导致的。

详情可参阅《案例分析:项目组内踢皮球事件》一文:

http://www.cnblogs.com/umlonline/archive/2011/10/28/2226933.html

该事件暴露了很多问题,但我想说的是团队建设的问题,没有任何一个人首先从自己身上找原因,第一反应就是推卸责任!

唐僧四师徒西天取经,如果每个人都是这样,不是自己内斗死,就是被妖怪吃掉!优秀的团队能“自动”解决很多问题,如何才能打造良好的团队文化呢?

良好团队文化的源泉是什么?

良好团队文化的根本其实就是老板的管理思想了,不同的管理思想,老板会设计不同的部门规划和考核办法。

有朋友提到他的Boss喜欢工厂化管理,硬生生将员工分成两类人,设成两个部门。一个部门叫设计部门,负责需求和设计;一个部门叫实施部门,负责编码、测试、实施。设计部门通过一个任务管理系统向实施部门下单,实施部门根据这些工单来工作。该老板还设计了自以为很牛的考核办法,如果实施部门不能按时按质完成工单,则会影响考核;如果设计部门的工单被实施部门退回,则会影响设计部门的考核。于是两个部门之间的扯皮时间天天发生,以前完成一个工作很简单的,现在要扯来扯去。设计部门自认为需求、设计等文档已经写得很清楚,实施部门认为已经按照这些文档完成工作,或者是认为这些文档说得不够具体,要退单。当文档主要用来任务交接的时候,文档就会变成茶几上的杯具!

还有一些老板喜欢用bug数量、文档缺陷率、工期延误率等所谓客观的量化的数据来考核,同样只不过是杯具的另一种形式而已。

软件研发活动是人类复杂的高级智力活动,是需要team work的活动。如果明白这个道理,如果懂软件开发,就不会设计出这些傻瓜的管理措施,将软件研发团队的每个人变成机械人、卸责人。研发团队中的每一个人都应该是值得尊重的、有血有肉的、充满激情和战斗力的专家!

作为Team Leader应该怎样做?

Boss的想法我们无法控制,虽然无法从根本上改变公司的部门设计和考核制度,但作为Team Leader来说,在能力范围内还是可以做很多事情的。Team Leader应尊重每一位Team Member,平等地对待他们,充分发挥他们的潜力,给予足够的支持和成长空间等。对大家好,大家是知道的,将来会给你带来更大的回报。

下面一些法则供你参考。

法则1:一荣俱荣,一损俱损

项目组由项目管理、需求分析、软件设计、编码、测试、实施等各方面的专业人士组成,每位成员在自己专业领域内发挥主导作用,并可以为项目的成功提出非自己领域内的建议。最终的项目成果是各位专业人士共同努力的结果,所有人对最终成功承担同等的责任。

如果系统部署后,系统出现了一个严重缺陷,请问谁应该负责?

项目经理?测试?开发?……

都不是,而是项目组全体都要负责!

软件中某个功能做得很炫很好用,请问谁应该受到表扬?

项目奖励发下来了,请问谁可以分到这份奖励?

以上问题相信你应该有答案了!

项目组全体是共同承担连带责任的,要死一起输死,要活一起活。如果项目组中有人受罚,有人会得到好处,这个Team是很难团结和有战斗力的。

法则2:让 Team Member 当家作主

项目组中难免有部分成员是新手,经验和水平不足,某些工作可能一时不能胜任。而我们往往迫于项目进度压力,某些任务就会直接安排给他做,不让他提出自己的想法和见解。而我们这些接受了中国式教育的人,不少人喜欢以“接受任务”的方式来工作,而不是主动迎接挑战。于是有时候你可能遇到一些成员会跟你说“今天工作已经完成!”“我按照任务要求来做的,我没有错!”之类的活活会气死你的说话。

不要剥夺项目成员当家做主的机会,应相信每位成员在他的专业领域内都是专家,在他的专业范围内,他可以说了算!只要满足项目的大框架,只要出发点是为了项目成功,那么这段代码应该怎样写、这个功能点应该如何测试等之类的决定,完全可以交给Team Member来做主!项目成员可能一时没有魄力独立做决定,可能担心犯错误,没关系,要多多鼓励他!犯错不可怕,因为还有“法则3:鼓励犯错!”

法则3:鼓励犯错!

少做少错,不做不错。如果犯错误会受到惩罚的话,那么前面八个字就会应验!

犯错几种情况:

1.经常挑战高难度工作,犯错是难免的。

2.做一些之前没有经验的工作,犯错也是难免的。

3.犯一些低级错误。

4.犯一些之前曾经犯过的完全可以避免的错误。

对于情况1、2,绝对是需要鼓励的!对于情况3、4,要帮助他避免这类的错误。

软件研发工作大部分是高难度和复杂的,加上进度压力大,犯错是不可避免的,如何在总结中前进。一个在工作中从来不犯错的人,他不是神,他应该是那种“少做少错,不做不错”的人,或者是专挑低难度工作的人,你喜欢这样的人?

法则4:言传身教

曾经见到这样的一些领导,当下属有问题求助时,他会板起脸孔,摆出领导的样子,然后说:你自己不会解决问题吗?你应该自己列出解决方案后才来找我!

我赞同领导不应该帮下属解决所有问题,有些问题应该由下属自己搞定,但下属是不可能搞定所有问题的,有些问题超出能力范围和职责范围,作为领导就应该出手。

作为Team Leader,应着重帮助Member养成良好的工作习惯和工作方法。中国式教育培养出来的学生,可能会喜欢直接得到答案,而不求工作方法。这个中国式教育的错,就只能由我们来补了。

法则5:挡住骚扰团队的外来干扰

Team Leader应当住来组团队外部的干扰,让团队可以专心工作。挡住麻烦是Leader的职责之一,而不要因为嫌麻烦,而让你的Member去处理这些麻烦。

法则6:全力维护团队利益

某部门的员工的薪金近年来很少得到提升,原因是该部门经理对外是好好先生,每年都不会主动积极为部门争取加薪的预算,总是被别的部门抢去预算。

某项目出了问题,老板找来项目经理,说要找人负责任,否则不好向客户交代。以下三个选择你会选哪个?

A.该问题确实主要是因为某Member导致的,所有他来负责是应该的。

B.这是团队的责任,要全体负责。

C.尽管是主要因为某人出错导致的,但作为PM的我应该负主要责任。

作为一个Team Leader,无论任何情况下都不应该“出卖”自己的Member,应该自己一力承担!回头你可以关起门来,批评这位犯错的Member。

法则7:我们是一个人

法则7是最重要的,其实只要能做到“我们是一个人”,其他法则自然就做到了。你不会和自己的左手作对的,右脚不会和左手打架,你的身体哪一部分受伤,你都会觉得疼,一个人的手脚动作是很容易协调的。如果我们团队能凝聚在一起,达到“我们是一个人”的效果,那么我们将战无不胜!

如果本文对你有帮助,麻烦点击一下“推荐”,谢谢!

作者:张传波
www.umlonline.org

转载于:https://www.cnblogs.com/umlonline/archive/2011/11/07/2236116.html

相关文章:

【jquery】文档操作

属性 1、attr() 获取、设置属性、设置多个属性 代码实现: alert($("div:first").attr("value")); $("div:first").attr("value","这是第一个div"); $("div:last").attr({value: "这是最后一…

基于流式的md5计算-多线程下载工具Lwget介绍

在数据传输的时候,我们希望实现以下目标:1. 使用多线程传输,加速下载速度2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件3. 支持断点续传4. 支持http协议和ftp协议5. 代码尽可能的简单,利于维护 实…

SpringCloud系列一:SpringCloud的简介和架构

声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。 一、SpringCloud简介 SpringCloud就是一套分布式服务治理的框架,既然它是一套服务治理的框架,那么它本身不会提供具体功能性的操作,更专注于服务之…

SUST_ACM_2019届暑期ACM集训热身赛题解

问题A:Hello SUST! 知识点&#xff1a;基本输入输出 C/C&#xff1a; 1 #include <stdio.h>2 3 int main() {4 int n;5 scanf("%d", &n);6 while(n --) {7 printf("Hello SUST!\n");8 }9 return 0; 10 } View Code问…

修改默认的个人站点

1、将模板页加入到里面 在地址C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\MySiteLayouts中找到 LayoutFiles.xml 然后将master复制到这个文件夹下 最后在LayoutFiles.xml加入如下代码&#xff1a; <Module Name"Mast…

【java】暑期需要复习的操作

实现分页查询 将网页输入的数据存入数据库 将每个jsp文件都需要的代码抽离出来 添加jquery 全选操作 引入jstl 实现全选功能

11迭代器模式

图片来自head first 设计模式&#xff0c;仅供学习之用 事实证明光看是没有用的&#xff0c;实践才能出真知&#xff0c;迭代器模式没有我想想的那么简单&#xff0c;写了个小例子才发现自己的理解并不深刻。例子是仿照head first的。迭代器是一个完整的类&#xff0c;作用是遍…

吴裕雄--天生自然 高等数学学习:高阶偏导数

转载于:https://www.cnblogs.com/tszr/p/11165379.html

【数据库】兴唐第二十六节课作业

一、设计购物车表、支付信息表和订单表 思路&#xff1a; 购物车中有&#xff1a; 商品名、价格、生产日期、 保质期&#xff08;shelf life&#xff09;、生产厂家。 支付信息中有&#xff1a; 商品名、 价格、 件数、 总价 订单信息有&#xff1a; 发货时间、订单号、预计到…

递归与非递归转换(栈知识应用)

下面例题是一次作业中遇到的&#xff0c;很值得体味&#xff0c;与大家共享下。 递归代码&#xff1a; 1 long f(long m,long n) 2 { 3 long sum; 4 if(m0) sumn1; 5 else if(n0) sumf(m-1,1); 6 else kf(m-1,f(m,n-1)); 7 return sum; 8 } 用递归来做很明了&a…

Silverlight 游戏开发小技巧:角色升级特效

这次我们将使用Projection完成一些有趣的RPG游戏中常用的特效&#xff1a;升级和传送点特效&#xff0c;我们不需要请特效师制作复杂绚丽的特效&#xff0c;而是只需要他们提供关键的几张图片或者设计样式&#xff0c;如果了您有本领教会他们使用Blend来做特效&#xff0c;那就…

使用jQuery开发messager消息框插件

1、插件使用 首先引入jquery库&#xff0c;然后引入dialog.js、dialog.css、messager.js、messager.css&#xff0c;如下&#xff1a; 1 <script type"text/javascript" src"js/jquery/jquery-1.7.2.min.js"></script> 2 3 <script type&q…

Data - 深入浅出学统计 - 上篇

本文是已读书籍的内容摘要&#xff0c;少部分有轻微改动&#xff0c;但不影响原文表达。 &#xff1a;以漫画形式来讲解最基本的统计概念和方法。 ISBN: 9787121299636https://book.douban.com/subject/26906845/引言&#xff1a;统计无处不在 统计值无处不在。我们伴随着统计值…

android 布局之RelativeLayout(相对布局)

android 布局分为LinearLayout TableLayout RelativeLayout FreamLayout AbsoluteLayout. 常用的有LinearLayout,TableLayout,RelativeLayout &#xff0c;这几个布局不会应该手机屏幕大小而有变化。通常我们使用HVGA 大小的屏幕(320*480). 接下来我们学习RelativeLayout. 原文…

【js】实现分页查询操作的步骤

1、将CSS的代码复制到goodList.jsp 2、引入common 代码实现&#xff1a; <% include file"../common/common.jsp"%> 3、引入jstl 代码实现&#xff1a; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core"%> 注意&…

Orchard:如何生成Hello World模块

在Orchard架构介绍中对Orchard的一些架构内容进行了介绍&#xff0c;下图是Orchard自带的一些模块&#xff0c; 本篇讲解一下如何扩展Orchard来生成我们的第一个模块。 介绍 Orchard构建在ASP.NET MVC之上&#xff0c;MVC是一个应用模式&#xff0c;我在信息系统开发平台OpenE…

通过域名访问自己部署到服务器上的项目

通过域名访问自己部署到服务器上的项目 如何不输入项目名端口号直接访问java web项目 1、省略输入端口号的步骤 在Linux的下面部署了tomcat&#xff0c;为了安全我们使用非root用户进行启动&#xff0c;但是在域名绑定时无法直接访问80端口号。众所周知&#xff0c;在unix下&am…

【java】异常的分类

注&#xff1a; 1、exception是人工可以修复的&#xff0c;但error的话很少出现&#xff0c;如果出现就无能为力了。 2、我们将所有派生于EXCEPTION和ERROR的类的所有异常称为&#xff08;unchecked&#xff09;非受查异常&#xff0c;其余为受查&#xff08;checked&#xf…

【免费软件测试视频-0013】——Loadrunner9.0 SLA Analysis

LR9.0---SLA Analysis http://www.3atesting.com/mv/bencandy.php?fid15&id16转载于:https://www.cnblogs.com/umain/archive/2008/09/28/1301310.html

训练听力的相关方法

一、听写熟悉一些固定发音 二、多阅读相关的文章&#xff0c;文章相关内容越熟悉&#xff0c;听力效果越好【重要】 三、首先没有听懂的一些音不会影响后面的理解 四、解决口音问题的唯一方法是&#xff0c;多阅读、记忆相关内容【签证及联系教授也要注意】转载于:https://www.…

PHP生成PDF文档的FPDF类

以前在PHP4的早期版本中用PDFlib生成PDF文档比较容易&#xff0c;现在升级到PHP5了&#xff0c;发现更麻烦了&#xff0c;装的PHP 5.2.4默认没有PHPlib&#xff0c;从php.net上找了一个&#xff0c;装上竟一直报错&#xff0c;开始以为是版本兼容问题&#xff0c;后来在租来的服…

Codeforces Round #466 (Div. 2)

http://codeforces.com/contest/940 A水题 //#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast,no-stack-protector") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tunenative") //#pragma …

WinCE中串口驱动及接口函数介绍(转载)

作者&#xff1a;ARM-WinCE 在WinCE中&#xff0c;串口驱动实际上就是一个流设备驱动,具体架构如图&#xff1a; 串口驱动本身分为MDD层和PDD层。MDD层对上层的Device Manager提供了标准的流设备驱动接口(COM_xxx)&#xff0c;PDD层实现了HWOBJ结构及结构中若干针对于串口硬件操…

【jsp】写jsp文件的准备

1、引入jstl 代码实现&#xff1a; <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %> 2、编写common文件 代码实现&#xff1a; <c:set var"ctxpath" value"${pageContext.request.contextPath }">&l…

studio2008 无法显示该网页

莫名奇妙的studio调试的时候页面显示无法显示该网页&#xff0c;差网页后得知原来是C:\WINDOWS\system32\drivers\etc下的Hosts文件被修改了&#xff0c; 确认里面有127.0.0.1 localhost 行转载于:https://www.cnblogs.com/sunshinecc/archive/2011/11/11/2245596.html

侠客X官方网站成立,第一个内测版本即将放出,敬请期待.

这是一个难忘的日子&#xff0c;西方的情人节&#xff0c;本站的成立代表侠客X&#xff0c;即将与大家见面了。 我们的要做的是&#xff0c;传承侠客站群经典模式&#xff0c;打造SEO王者力作&#xff0c;侠客X即将公开测试&#xff0c;敬请期待。 http://xpk.in Qin 转载于:ht…

HSSFWorkbook 与 XSSFWorkbook

项目中一直使用NPOI与memcached,一直相安无事,但是最近升级了npoi到最新版本,发生了ICSharpCode.SharpZipLib的版本冲突问题. 因为此前一直使用的是NPOI的1.x的版本,用的SharpZipLib是0.84版本,而升级到最新版本以后,SharpZipLib的版本变成了0.86版本. 但是memcached的却没有最…

P1066 2^k进制数 NOIP 2006 提高组 第四题

洛谷蓝题&#xff08;点击跳转&#xff09; 提高组 第四题 题目描述 设r是个2^k 进制数&#xff0c;并满足以下条件&#xff1a; &#xff08;1&#xff09;r至少是个2位的2^k 进制数。 &#xff08;2&#xff09;作为2^k 进制数&#xff0c;除最后一位外&#xff0c;r的每一位…

线段树专辑——pku 2886 Who Gets the Most Candies?

http://poj.org/problem?id2886 恩&#xff0c;分糖果&#xff0c;快乐的童年啊&#xff01; 题目意思大概n个小孩围成一个圈&#xff0c;每个小孩手里有张卡片&#xff0c;记录着一个数字。开始从第k个孩子&#xff0c;该孩子离开圈子&#xff0c;然后告诉别人他手里的数字&a…

【jsp】通过get和post传值的区别

GET与POST的区别&#xff1a; GET方式提交表单&#xff0c;请求的参数在请求的头部&#xff0c;可以通过request.getQueryString()获取到请求参数及其参数值&#xff1b;POST方式提交表单&#xff0c;请求的参数在请求体中&#xff0c;所以request.getQueryString()方法无法获…