`
peterwanghao
  • 浏览: 128546 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

将软件项目中长期加班看做风险

 
阅读更多

看到一篇博文,一位项目经理谈到软件bug和长时间工作的关系,他认为推迟下班不仅浪费时间,还可能完全适得其反.在他的项目管理中将长时间工作当作风险来控制。

他认为应当设定工作时间限制,更长的工作时间会产生更多严重的BUG,程序员在疲惫,压力大的情况下非常容易引入错误。

通常情况下团队是被一些不起眼的小问题拖下水,在不知不觉中工作量就增加了。这时人们就会花费更多的时间来处理这些额外的工作,但不幸的是会有更多的错误发生,不断重复和循环。

提出的防范措施是在指定计划时设置一些缓冲区,是小问题不会增加整个项目进度。同时把超长时间工作看做风险处理,仔细辨别工作之间的关联性,使项目应当舒畅有序的进行。

从这篇文章中可得到两点经验:

1)加班不是良药反而有可能是毒药。在项目管理中应当把它看做是一种风险而不是荣耀。

2)千里之堤毁于蚁穴。不要忽略小问题,项目管理中明确定义好范围,不要觉得事情小就模棱两可。最后积少成多造成项目失控。


原文内容如下:

A Project Manager's View of Long Hours


The comments thread on my recent work-life balance post and Nicoleandmaggie's recent post about productivity have me thinking about the extent to which my experience as a project manager informs my opinions about work hours and work-life balance. The answer is: a lot.

As a project manager, I view long hours by my team (and, by extension, by myself) as both a risk and a failure.

Long hours are a risk because of the issues I discuss in my work limit post. To put it simply, longer hours correlate strongly with more mistakes. I primarily manage software and other technology projects, and I would argue that mistakes (in the form of bugs) can be the biggest risk to those projects. They are certainly one of the hardest risks to manage. There is no point in the project at which we can consider ourselves past the risk caused by bugs, and there is almost no limit to the schedule and budget damage they can do. At any point, we might uncover a new bug. Most bugs are easily tracked down and resolved. But some are hard to find, and I have seen projects put months behind schedule by particularly nasty ones.

I firmly believe that an exhausted, over-stressed programmer is much more likely to make a mistake that introduces a bug than a well-rested, happy one. I know, I know. You're different. You can work long hours and stay productive! I have worked with many, many people in my 10+ years as a project manager. A lot of them thought they were the exception to the work limit rule. None were. I have never worked with anyone whose work quality didn't drop off as the hours crept up over extended periods of time.

The only exception I've seen to the work limit rule is a partial one: if you have two sets of tasks that are significantly different from each other, sometimes one can serve as a "refresher" for the other. This probably works best if one of the two sets of tasks is fairly mindless, but I've seen it work for two sets of "intense" tasks, too, if they are sufficiently different. So, if you have to both write code and produce status reports, time spent filling in the status reports may help refresh you to write more code. I don't think it refreshes you anywhere near as much as going to a movie or going home and playing with your kids would, though.

I've actually been thinking about this "two types of tasks" effect quite a bit, in relationship to writing and my job. Writing uses a very different set of skills than my day job, and I do, in fact, find that it "refreshes" me for my work. However, writing is seen as work by a lot of people, and rightfully so. So when I put in a 40-45 hour work week and another 5-10 hours writing, am I really working a 45-55 hour week? I don't think so, because for me, writing is a hobby. It is not what I depend on to feed my family or pay our bills. I might set deadlines and goals for myself (and I do!) but there is no real pressure on me. If a blog post sucks and no one likes it, no big deal. If I decide I'd rather catch up on the episodes of Sherlock we have recorded than write a new post, so what? Still, this potential issue is one of the things I'm cognizant of as I think about doing more and more formal types of writing. I can't let it start contributing to my work limit, because I use all of that on my day job. So I'm proceeding carefully.

Anyway, because I believe strongly that all people have work limits, that working past these limits leads to an increase in errors, and that those errors have the potential to delay or otherwise hurt my project, I think of long hours as a risk to be avoided. Incidentally, I'm not the only one who thinks this. And, while I've written primarily about software projects, I think other types of work have the same issues. In fact, the most spectacular demonstration of this effect I've ever seen was on a science project at a biotech company. A project needed a certain amount of purified protein by a given date, in order to supply crucial assays. Protein production was laborious and time-consuming, for both the usual reasons and more specialized reasons that I cannot discuss. A prep came ready for purification late in the day, and a lab tech was pressured by his boss to stay late and start the purification going. This lab tech was chronically overworked, partly because he had a bit of a hero complex, but mostly because his boss was a jerk and/or was clueless about how to actually manage. He was well past his work limit, and had been for weeks, possibly months. But he stayed late, and started the prep. When the rest of the team came in the next morning, they discovered that he'd put the prep on the wrong column, and essentially destroyed it. Meanwhile, the team that made the source material had to move on to another project or risk missing a contractual deadline worth hundreds of thousands of dollars, and therefore couldn't produce more protein for this project right away. When all was said and done, the first project took an approximately three month delay because of this one mistake.

Now, that is an extreme example. But I actually think the more usual case is worse. Usually, small errors just get absorbed by the team, silently adding to the workload, and putting everyone under more stress. They might start working longer hours to deal with the extra work, and then more mistakes happen, and the cycle repeats. Before you know it, the project is three weeks behind schedule and you have no idea why. Ask yourself: is this sort of delay a risk you need to take?

One of the key parts of a project manager's job is the management of risk. We think about likely issues and try to put controls in place to eliminate them or at least mitigate the damage they can do. I think long hours are a risk, and luckily, there is a fairly straightforward mitigation: proper planning. When I am planning out a project (or set of projects using the same resources), I do so with the assumption that everyone is working their usual 40 hour work week- or less for the part time contractors. I plan in buffer ("slop", or to use the fancy term "risk reserve") so that little issues do not immediately send us into long hours mode. I carefully identify dependent tasks, so that unforeseen dependencies do not bounce us into long hours mode. I try to think of other potential risks and manage those. In short, I do everything I can to make sure that my team has the time and money it needs to complete the work without resorting to insane hours. While the project is running, I keep an eye on all of these things, and I actively manage communications both within my team and with other stakeholders, all with a goal of keeping us on schedule, under budget, and out of long hours mode.

Of course, I can't control for the work habits of my team members. For instance, a chronic procrastinator will often bump him or herself into long hours mode. But, as a project manager, I can recognize this work trait and try to set up intermediate deadlines so that this behavior doesn't spill over onto the rest of the team.

So when something happens, and my team ends up working long hours for more than the crunch in the last couple of weeks before release? I consider that a failure. I missed something or misplanned something, because otherwise, the extra hours would not be needed. I try to figure out what went wrong and learn from it, so that I can do a better job on future projects.

All of this means that I do not view people who routinely work long hours as heroes, or a standard by which we should all measure ourselves.If they are doing it to themselves, I think they are risks to their projects and I try to keep them off projects I run. If they are working the hours because they "have" to, I think they have crappy managers. Why would anyone aspire to either condition?


分享到:
评论

相关推荐

    弱类型语言允许将一块内存看做多种类型

    - **劣势**:增加了运行时错误的风险,对于大型项目来说可能会导致维护困难和可靠性问题。 ### 强类型语言的特点 强类型语言要求变量必须在使用前明确指定其类型,且不同类型的变量之间无法直接进行操作,除非进行...

    软件测试与质量保证简答题.doc

    软件测试的目的主要是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正这些错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的商业风险。 在软件测试中,白盒测试和黑盒...

    软件测试软件测试分类一.pptx

    黑盒测试是一种软件测试方法,将被测试的软件看做是一个黑盒子,不关心软件的内部结构,只关心软件的输入数据和输出结果。黑盒测试的优点是可以快速地测试软件的功能和性能,但缺点是无法测试软件的内部结构和逻辑。...

    软件的白盒测试是对软件的过程性细节做细致的检查

    在白盒测试中,测试人员不仅关注软件的功能表现,还深入探究其内部逻辑,确保程序的各个部分按照预定的设计和编码规范正确执行。 1. **白盒测试的定义**: 白盒测试将测试对象视为透明的盒子,允许测试人员利用...

    最全面的软件测试基础知识-整理版.pdf

    它根据集成测试计划,一边将模块或其他软件单位组合成越来越大的系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。集成测试的策略主要有自顶向下和自底向上两种。 系统测试是对已经集成好的...

    西安豪宅项目高层+洋房+叠拼建筑方案文本

    未来3-5年区域研判,将发展成为未央湖区域为基础配套,以灞河湿地生态资源为地块未来发展发展核心,以秦汉大道、北辰大道为交通主轴的高舒适品质综合型项目。以下是部分资料展示:。西安豪宅项目高层+洋房+叠拼方案...

    基于MATLAB控制系统仿真分析软件的开发与应用.pdf

    软件划分为不同的功能模块分别进行设计,各模块之间的数据交换极少,相对独立性较高,不易细分其数据流走向,因此将信息流划归结为事务流,把每个模块执行的功能看做一个事务,按运行过程设计其事物流体系。...

    软件测试实验及相关内容(白盒测试,黑盒测试)

    实验中,测试者把软件看做一个黑盒子,不需要了解盒子内部是如何工作的,只需要知道从输入到输出的映射关系。在实验过程中,测试者依据软件的功能需求,设计一系列测试用例来验证程序是否能够正确执行。例如,“隔...

    vue-flow-topology:Flow Topology 是基于Vue-cli3.0 + Ant Design Vue + JSPlumb开发的一个大数据流水线拓展流程工作台,该项目可以看做是一个独立的 Vue 项目,也可以嵌入到其他vue项目中使用,新版会作为优先版本持续迭代

    vue-flow-topology 该项目可以看做是一个独立的 Vue 项目(大数据流水线拓展流程工作台),也可以嵌入到其他vue项目中使用,新版会作为优先版本持续迭代。 版本一:基于 Vue-cli3.0 + view-design + JSPlumb 开发( ...

    美萍足浴软件1010v2

    (2)包间计费类型:可为不同的包间类型提供不同的计算包间费用的方法,此设置作用于包间项目,在设置包间项目时如果选择某一包间计费类型那么系统将根据此包间计费类型中的计费方法自动计算包间费用(前提是已设置...

    css box模型祥解

    CSS 将所有的网页元素都看做是一个矩形框,这个框由元素的内容、填充(padding)、边框(border)和边界(margin)组成。

    软件测试及常用的策略和方法(完整版)实用资料.doc

    系统测试将整个软件系统看做一个整体进行测试,包括对功能、性能以及软件所运行的软硬件环境进行测试。验收测试是最后一步,检查软件是否满足用户的需求。 功能测试和性能测试是软件测试的两个重要方面。功能测试...

    4.1 软件工程开发方法与软件设计1

    在本节中,我们将讨论传统的开发方法、结构化方法、信息建模法和面向对象方法四种常见的软件开发方法。 一、传统开发方法 传统开发方法是指以系统需要提供的功能为中心来组织系统的开发方法。该方法没有明确的区分...

    网络学院软件工程作业1+参考答案

    在面向对象软件设计过程中,应按如下要求进行类的设计。只有类的共有界面的成员才能成为使用类的操作,这就是软件设计的信息隐蔽原则。当且仅当一个操作对类的实例的用户有用时,它才是类公共界面的一个成员,这是...

    测试入门--笔记

    系统测试是指将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。验收测试是指对软件的最终测试,检查软件是否满足用户的需求。 功能测试是黑盒测试的一部分,它检查实际...

    Synthesia(钢琴模拟软件) v10.2.zip

    软件自带了上百首MID曲子,你可以把它看做为一个娱乐消遣的小游戏,也可以花心思研究一下,轻轻松松完成钢琴演奏的学习过程,真正做到简单全面实用。是用户实现钢琴演奏学习好帮手。 Synthesia 的安装 把下载好...

    winbugs14-好用的计量经济学软件

    BUGS的运行以MCMC方法为基础,它将所有未知参数都看做随机变量,然后对此种类型的概率模型进行求解。它所使用的编程语言非常容易理解,允许使用者直接对研究的概率模型作出说明。软件中的MCMC分析部分采用Fortran...

    面试宝典!高级软件测试面试题大放送

    高级软件测试面试题大放送 本文总结了高级软件测试面试题,涵盖了软件测试的多个方面,...从语法上来看,协程和生成器类似,都是定义体中包含 yield 关键字的函数,所以总体上在协程中把 yield 看做是控制流程的方式。

    软件白盒测试PPT资料.pptx

    软件白盒测试的定义是,把测试对象看做一个透明的盒子,白盒测试是根据被测程序的内部结构设计测试用例并完成测试的一种测试方法。白盒测试或逻辑驱动测试,基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支...

Global site tag (gtag.js) - Google Analytics