错过最后期限的罚则是什么?

对于软件行业相对较新,我遇到了最后期限执行的问题:

回到学术界的田园诗般的时代,截止date是学期结束,罚款是一个明确的“F”(或当地等值)。 在现实世界中,我们需要制定我们目前和未来同行可以使用的规范,我面临截止date,截止date,项目尚未完成的情况。

怎么办? 在一个极端,我们可以解雇所有参与者,另一方面,我们可以丰富地奖励所有参与者。

  1. 你看到了什么样的行为,因为错过了最后期限而被用作“惩罚”,哪一个最终导致了更好的代码呢?

  2. 项目pipe理的哪些反应导致项目彻底失败,

  3. 什么反应恢复了工作秩序,并导致后来可以维护的代码?

  4. 什么反应导致了更糟糕的代码?

截止date是关于如何进行软件开发的根本性错误观念的一部分。 对于软件开发行业或对软件开发行业不利的人们不了解这一点:

软件完成后,不早,不迟。

如果一个开发人员有一个任务和一个星期的时间来完成这个任务,而且看起来需要一个多星期的时间,那么就不能做任何改变。 无论开发者工作多么艰苦,无论多less人join任务,都需要花费时间(事实上添加人员通常会花费更长的时间)。

相反,请阅读敏捷开发stream程。 软件应该迭代开发,每次迭代应该基于前一次迭代的结果, 而不是外部要求。

根据下面的广泛评论进行编辑:

我绝不会争辩说,开发者不能被认为是某种交付期望。 我的观点是回应了提问者所提出的具体假设 – 企业中软件开发的本质与学校工作或其他任何types的工作类似。 我认为这绝对不是。 “截止date”意味着远不止一个简单的交货date。 这是必须完成一定数量工作的一个固定点。 软件不能这样工作。 我又写了几段解释为什么,但说实话,如果你还没有相信,我所说的就是说服你。

如果你正在开发一个软件项目,而且很明显,你将无法达到你的期限,你可以做些什么来纠正? 答案现在是众所周知的:几乎没有什么。 你不能添加更多的人。 你不能“加快工作”。 这只是不会按时完成的。 你告诉利益相关者,每个人都调整,并继续工作(或不)。 那么,原来的date是什么意思呢?

任何声称软件开发的人都是桥梁build设或家庭作业,或者如果开发人员只是把他们的狗屎放在一起工作,他们就会对自己的职业感到困惑。

你的第一反应不应该是为了应对错过的最后期限而做什么,而是要分析为什么你错过了最后期限。 由于这个原因,对错过最后期限的回应将会自然而然地出现。

例如,如果所有参与者都没有做好工作,就把它们开除。

但是如果他们做了他们的工作,那么为什么还是错过了呢? 太多同样的人做的其他活动? 截止date范围太大(即不现实的截止date)。 或者…等等

根据我的经验,错过最后期限的最主要原因是人们不允许在手边的项目上百分之百地工作,因此可能有任何估计,尽pipe准确的自己并不是真的有用。 那加上不切实际的估计和截止date。

pipe理层的错误不应该成为开发者的惩罚。

这就像父母惩罚一个孩子,因为父母的日子不好。

推理:

截止date是生活中的事实。 人们想知道需要多长时间。 我们能做的最好的估计/猜测。 试图想象这个神奇的,从来没有正确的猜测是pipe理的angular色。 当他们创造一个最后期限,他们需要使用正确的工具(经验,要求开发商,律师,小时等)

然而….

错过最后期限的惩罚应该落在工人身上。 缺less最后期限是pipe理层的错。 他们应该说不,应该缩减项目或者应该更好地激励工人。

在施工人员中,如果你小便的话,你就开始打架。 在我的公司,如果我们错过最后期限,pipe理层就会陷入困境。 不是工人。 pipe理者的工作是控制项目,做什么。 工人们只是尽其所能。 经理负责分配angular色和任务。

我并不是说工人的素质不是一个因素,但pipe理层应该知道! 知道一个项目没有很好的思考或很好的控制,并不需要天才。 询问任何人,如果他们的经理有什么想法,你会发现问题。

当pipe理人员意识到这是他们设定/同意最后期限时的错误时,我们停止了尽可能多的最后期限。

</rant> 

回复:问题:

1.你认为你所采取的行动是否因为错过最后期限而受到“惩罚”,哪些行为使事情变得更好?

  • 经理有更less的责任。 这个人没有得到提升或公开感谢。 这个人很可能会被转移到“不太关键”的项目。

2.项目pipe理的反应是什么导致项目彻底失败,以及什么样的响应恢复了工作秩序,并导致后来可以维护的代码?

  • function蠕变:经理不断添加更多的东西在列表中。 < – 按照优先顺序排列的任务清单。 当你把东西添加到列表中时,将它们的优先级与它周围的东西进行比较。 让新事物更难被确定为“重中之重”。
  • 代码中的错误太多:pipe理器需要testing(至less关键)和自动化。 构build需要标准化和自动化。 真正的用户在“完成”之前需要看到代码。
  • 不可读的代码:学院同行代码评论。 如果某人有脏代码,请求某人用一个项目“帮助”他们。
  • 如果销售员出现问题,销售人员承诺不存在/工作的function:pipe理层需要介入并向该销售员解释问题。 而且, 没有给予推销员公开肯定的工作有时帮助这一点。

而不是一个惩罚,现实的估计和奖励准时发布怎么样?


受到我对此回应的评论的启发

也许这个问题应该是“我如何做出现实的估计?” 对我而言,我使用FogBugz 估算历史和完成date图。 这些给我的数据点,我估计了一个任务需要多久,实际上花了多长时间。 这有助于指导我从长远的angular度给出现实的发布date(这并不是一朝一夕发生的)。 我发现估计时间表是一个交互过程:我

  1. devise
  2. 估计
  3. 发展
  4. 在devise和迭代中find一个缺点。

取决于开发人员是否对每个修改请求设置了最后期限,或者这些是否由pipe理员设置。

在后一种情况下,除非你所有的开发者整天坐在一起玩“光环3”,否则错过的最后期限常常表明pipe理层或团队领导方面出现了错误。 所以解雇所有人都不能解决问题。 在你的软件过程中引入更好的指标可能是有意义的,所以你可以看到最后期限将会在错误发生之前被错过。

如果您的开发人员确实给出了时间估算,那么我会非常小心奖励和惩罚开发人员在最后期限或错过时间。 这样做的结果可能是他们会在时间估计中调整他们的“模糊因素”。 他们会给自己太多的额外时间(收获奖励),如果他们善于估计,就会把事情弄糟。 你的目标应该是让他们提供良好和可靠的估计,而不是改变他们的工作方式来满足这些估计。

死亡。 清洁和简单。

这取决于最后期限是否可能,也许这是计划和估计将花费多长时间的错误。 确定你知道为什么在决定惩罚之前错过了最后期限

天啊…

首先,有外部期限和内部最后期限,它们应该是不同的。

在内部最后期限之后会发生什么事情呢?随着截止date的临近,活动频率会增加,在截止date之前达到高峰,然后随着截止date的减less而下降。 因此,计划外部最后期限至less在几个星期之前遵循内部最后期限。

然后,确保最后期限是现实的。 部分你通过让开发者参与设置,并决定将要完成什么来做到这一点。

最后,我大多是一名开发人员,但是一旦我刺杀了pipe理层,我就不会想把最新最好的版本带入会议或演示文稿。 我想要一个至less几个星期的版本,我知道问题出在哪里,我可以肯定不会有不愉快的意外。

在他关于项目pipe理的精彩书籍 – “截止date” – 汤姆·德马科告诉我们一个故事,关于来自西方世界的项目经理正在一个虚构的后共产主义东欧野生国家pipe理项目(野生是一个很好的术语,因为公民有点..不文明)。
有一天PM发现,出了问题,他的项目的一部分大大地失去了不切实际的时间表。 之前的下午,由于缺乏责任人的挂钩而使违约期限失效,但由于时间表不切实际,一个人已经错过了最后期限。
所以这个故事告诉我们,有一天,西方式的总理被带上负责人的时候,他应该把他挂在屠夫上。 总理大多数人都这么认为,只是因为有人无法及时完成他的项目而被判死刑。 而且 – 无论如何,挂这个可怜的人不会推进这个项目。 由于这是一个关于项目pipe理的小说小说,而不是折磨,我们的英雄取消了处罚。
但是这个故事背后挂着一个大问题:如果你设定了一个最后期限,并且为了错过这个最后期限而build立某种惩罚,那么这个日子就会到来,你可能不得不惩罚一个人。 你会做吗? 不pipe是什么样的处罚:悬挂,奖金损失,解雇,交易或者一些费用 – 你可能要惩罚一个人。 这个惩罚会对你的项目有好处吗? 你必须自己来回答。
所以:不要因为错过最后期限而制定惩罚,你不会想要执行…

正如其他人所说,在谈到处罚之前,从“如何确定这些截止date是否现实”开始?

或者正如我的老板曾经说过的, “当你给我们一个有效的计划时我们会很乐意做一个计划 。”

我仍然认为这应该在一件T恤上。

一旦你达到了人们争先恐后的时候,你必须问自己:(A)自然的后果是什么?(B)你如何才能最好地完成任务,保持某种forms的业务目标(即使你没有经营业务)。

除非他们相信他们已经获得了这个机会,否则明确惩罚人们宣布截止date是不可能的。 如果最后期限是不现实的,如果团队的要素是主要失败点,是否存在严重的要求问题,或者如果大多数团队认为上述因素是真实的,那么这不会发生。

在一个案例中,我在一个团队中,在一个小的可交付成果上截止了三个月的时间 – 原来的可交付成果截止date是从三个月开始! 我们误解了要求,没有充分的和客户交谈,而低估了所涉及的时间。 pipe理层一点也不感兴趣。 部分原因是因为完成交付工作会产生反作用,部分原因是我们都不是“问题员工”,部分原因是pipe理层知道我们都是积极主动地解决问题和满足客户的。 所以我们做到了,客户就像我们所期望的那样开心,我们继续我们的生活,为今后如何避免这种情况提供了宝贵的经验教训。

没有惩罚。 “截止date”和估算已经并将继续成为软件开发中最困难和最具挑战性的部分之一。

对这个问题施加惩罚开发商是荒谬的。

到目前为止,在我的职业生涯中,我还没有看到任何错过截止date的罚款(我错过了很多)。 我想,在公司向公众作出承诺的商店里销售软件或游戏的公司是不同的。

但在定制软件开发领域,要准确估计项目需要多长时间是非常困难的。 而且这个事实常常被各地公司所勉强接受。

虽然我从来没有看到任何纪律处分或解雇,但是我看到很多“强制性”的加class和同事的压力来延长工作时间。

作为经理,我几乎被解雇了,告诉我报告给我的团队不要在周末进来,工作到很晚。 我知道那些事情对这个项目和士气是有害的。

一般来说,“惩罚”是让人感到内疚或焦虑的forms,但我相信有地方做更多的“官方”的东西。

这个世界充满了白痴。 pipe理也不例外。

我认为这个问题本身就表明了对pipe理和项目pipe理angular色的误解。

不幸的是,在许多人的头脑中都有一个共同的看法,pipe理者在他们的头衔中的意思是说,pipe理意味着医疗工作者去踢/踢懒惰工人的屁股。 它也适合那些相信帕金森定律的人。

不是。 这是为了让作品能够做好自己的工作 – 成为他们与组织其他部分之间的沟通渠道,为他们提供资源,或者干涉他人(把家具搬走)。

就是说,项目经理应该已经知道项目/任务将会错过它的最后期限。 他们应该问问题,知道发生了什么事情。 他们有权削减任务,或者增加/重新平衡资源以完成工作(或者对发起人说,如果你没有提供资源,就不能按时完成任务)。 就这样,罚款到了下午,不pipe是什么,舌头鞭打,降级或终止。

有时延误是不可避免的。 这就是为什么我们build立在应急时间。 有时候,这是一个已知的风险; 只要你有一个备份计划 – 你没事。

至于答复,你有四个参数:范围,时间,金钱和质量

  • 范围 – 你可以削减到最后期限。
  • 时间 – 是固定的。 你可能会让你的员工在一个星期或者两个六点钟的时间内被拖动,但是之后你的工作效率就会开始下降。 如果你公平的支付,这也会花费更多的钱。
  • 钱 – 你可以从别人那里购买一些东西来加速这个过程。 你甚至可以雇用更多的人,如果这些工作脱节的话,你就不需要和现有的工作人员进行很多的沟通 – 参见布鲁克法则
  • 质量 – 理想主义的傻瓜声称,你永远不能吝啬质量。 但是你可以。 你没有添加错误(一种反质量的forms); 但是你可以减less质量。你编码你的函数,以便它可以处理无限长度的string,或者是100个足够好的版本? 您是否可以轻松地进行下一次升级来安装新模块,或者将其焊接起来,并在下一个版本中添加插件模块。

不积极地做这些事(必要的时候)肯定会导致你失败​​。

一旦项目晚了,没有太多的“pipe理”(好的,坏的,善意的或恶意的)可以做的事情,这不会导致项目更晚

唯一的例外可能是去除/避免外部干扰。

如果您错过了最后期限,请修正您的估算。

从企业发展的angular度来看…

如果截止date来自执行工作的人以外的其他人,请查看情况以确定超时的原因。 在这些情况下,往往涉及到不完整的要求,范围蔓延,pipe理不善等等。对于错过一个人从未提供过的最后期限,不应该给予惩罚。

如果最后期限是由执行工作的个人提供或者同意的,那么这个人需要解释导致延误的因素。 另外,应该提醒这个人在知道可能错过最后期限时立即通知他们的主pipe,项目经理或其他责任方。 在截止date过后,这些信息不应该被暴露。 如果这种情况反复发生,则应遵循贵公司的纪律处分程序。 这可能涉及到写作,暂停或终止。

当人们设定时间的时候,人们倾向于最后的期限。 如果没有他们的投入,最后期限会被放在他们身上,截止date往往对执行工作的人毫无意义。

这当然不是一个干脆的答案。 这里有一些我认为重要的事情和我为了确保事情按时完成而鼓励的事情。

1.)正确设置优先级。 项目总是会有不同程度的完成。 这不是一个二进制“完成”/“未完成”开关。 如果最重要的事情先完成,那么容易吞下。 理想情况下,你应该尽快到达工作的地步,但是这并不是我们需要做的一切,而且看起来也不漂亮。 一旦到了,它可以被释放,如果它绝对需要。

2.)我发现处理这个问题的最好方法就是尽可能减less版本。 这使估计更准确。 如果你的老板或“市场”决定你的估计是不可接受的,考虑在可能的情况下分配更多的开发者来完成这个任务。 有时候一个任务不能很容易地分开,或者只有一个人熟悉代码。 如果这不是一个高度优先的事情,那就告诉那些将要花费更长时间的力量吧。 设定合理的目标和pipe理期望是关键。

3.)关于动机,奖励和惩罚……有许多医生已经写完了这些主题的书。 以我的经验,给程序员一些具有挑战性的东西,让他们有一些自由的方式去做是一个好的开始。 听力是pipe理者为了成功需要做好的事情。 如果开发人员经验丰富,您应该能够解释这个问题,并让开发人员拿出解决scheme。 如果他们的解决scheme不如你想的那么好,你可以build议并从那里去。 即使对于新程序员来说,如何做一些事情也很less有效。 让开发人员考虑事情会帮助他们自己解决问题。 这与委托有关,因为这只有在开发者可以自己完成工作的情况下才有效。

4.)如果他们做得很好,就可以很好地付钱,从而减less营业额。 寻找好人通常花费更多。 熟悉一个庞大的代码库需要时间,招聘过程也可以避免花费时间在不能切断芥末的人身上。

5.)询问(不要求)开发者是否可以延迟工作/周末工作。 只有在非常重要的情况下才能做到这一点(例如,安全漏洞可以让用户访问他们不应该访问的数据;通过新的法律/规定,您必须遵守这些规定等)。 如果他们说不,不要阻止他们。 事情没有完成可能不是他们的错; 即使是这样,他们在不期望工作的时候计划时间也是合理的。 如果他们愿意进来,确保他们知道你的真诚赞赏。 当他们没有义务时帮助他们补偿,购买午餐不会花费太多,这是一个非常好的姿态。 除非是他们的联系/协议的一部分(或者如果他们喜欢这样做的话),否则不要习惯于期望人们工作很晚/周末。

6.)理解事情为什么落后于计划。 你是否答应过一些不可能的事情(考虑到可用的人员,预计的质量和时间)? 是否有其他项目出现并占用资源,截止date没有调整? 代码是否比预期的更难? 给时间估计是困难的。 你需要计划一切,有经验,知道每个开发者将花多less时间完成这项任务。 弥补可能出现的意想不到的问题,并使程序员比你的老板或客户的期限更早。 尽早完成总是可以的。 如果你几乎总是提前或准时完成的话,那么如果你有某种解释,那么你错过了最后期限的那一次将会更容易理解。

)记住,它通常归结为时间,质量和金钱。 你通常可以select任何两个,但第三个将需要平衡的方程。 因此,如果需要快速完成,并且预算有限,则可以预期质量会受到影响。 如果您需要快速,高质量地完成工作,则需要花费大量资金,等等。

8.)我会说,为我工作的第一件事是听。 如果你太忙吠叫命令,那么你甚至可能不知道公司的问题。 现在只是因为一个开发人员说:“代码糟透了,devise很糟糕,如果我们想要及时完成任何事情,我们需要重新编写一切”并不意味着它会发生。 但是,如果你听到这样的评论,并解释说我们不能这样做,否则我们会在市场上被杀死,这将是太昂贵了。 问问能做些什么来确保事情不会变得更糟糕。 询问是否有办法随时间清理。 我们可以重新写一个class级,并根据这个build立新的东西吗? 我们可以慢慢迁移到一个新的devise一个function/部分/模块? 你明白他们来自哪里,反之亦然,至less可以解决一些问题。 请记住,妥协是双向的。

9.)负面的再执行似乎导致更高的营业额,这是昂贵的。 拥有一大堆不熟悉代码的人也不会帮助你完成任务。 金钱是一个激励因素,但是我已经放弃了一个更高薪的工作去找一个我更高兴的地方,我知道我并不孤单。 团队做得好的时候免费的食物并不是那么贵。 我不太喜欢集体活动,因为他们要么削减员工的时间,要么把工作时间带走。 它有时候会起作用,但是把员工的​​个人时间切入,让他们可以和同事一起出去玩,而不是和朋友在一起,这并不是什么好事。 让所有人停止工作也是很昂贵的…所以这只取决于公司的规模,文化等等。

希望这有助于回答你的问题。 在这个线程中的其他答案也是很好的build议…devise在编写代码的速度上起了很大的作用。

你的问题本质上是有缺陷的 :它假定惩罚是pipe理人的最好方法。 总的来说,人们对惩罚和威胁的惩罚不是很好, 它带来了最坏的行为,使动机成为外在的,并分散了内部的动力。 奖励和贿赂(奖励的威胁)是同一枚硬币的另一面,并不是最好的。

但是,这些力量是为了雇用而build立的,所以你永远不会从你的程序员那里得到最好的创造性工作,但是当你错过最后期限的时候,你不必再惩罚他们。

相反,冥想创造性的过程,多个人做混乱的创造性工作,以及哪些工具可以有效地pipe理混乱。

要pipe理任何混沌系统,请做大量测量,并准备好快速更改课程。 在编程的情况下:

  • 采取尽可能最小的步骤 。 不要“把任务分解成小的步骤”,因为你会浪费很多时间来规划步骤,而这些步骤不会像你计划的那样工作。 混乱,记得吗?

  • select提供最大价值的最小步骤。

  • 经过一段时间后,根据你所学的内容重新评估你的计划

  • 尽快将实际的真实客户的工作软件交付给他们,这样他们就可以告诉你真正应该做什么。

你可能认识到这是SCRUM背后的想法。

鞭打

有两种可能性:

  • 由于有人没有做好工作,错过了最后期限。
  • 截止date是不现实的。

我不build议在处罚方面考虑问题,我会build议进行一次验尸,以确定发生了什么问题,并设法改善下一个期限的估计。

你问“惩罚应该是什么……”。 看来你是从“公司内部”的angular度来问的。

在现实生活中,刑罚往往是迅速而严重的 – 在业界的损失,诉讼,不良的声誉。 这些是由客户承诺在某个特定date没有兑现的实际处罚。

在内部,你可以经常做你喜欢的任何事情。 但是,一旦你开始涉及付费客户,那么pipe理这些客户就成了整个工作的关键部分。

像我所描述的处罚往往可以通过与客户进行“顶级”沟通来避免(或减less)。 如果客户想要添加某些东西(所谓的function蠕变),那么应该立即回答这些变化对项目的影响(成本更高,稍后交付,无论如何)。 应该鼓励客户根据截止date和预计的成本对所有这些请求进行分类(即让客户pipe理function蠕变,而不是你)。

如果其他事情改变了交货时间,那么只要你知道会有滑点,你必须通知客户。 如果提早完成,客户非常乐意与您合作。 但是,如果在太晚的时候你什么都不说,他们就不太可能原谅……特别是如果他们发现你早已知道很长的一段时间,并没有告诉他们。

干杯,

-Richard

  1. 我看到高pipe在一些截止date后不久就离开了一家公司。 这改变了一切,但不一定使事情变得更好或更糟。 我已经看到了一些合同义务,比如追尾(clawbacks),作为惩罚某人错过最后期限的一种方式,我不确定他们的工作有多好。

  2. 当一个项目在项目的分配时间中间应该完全改变的时候,往往会导致最初的轨迹不再有效,从而导致项目失败,因为它可能不会在预算内达到最初的期限。 将项目重新规划为最多几个月的短暂增量是一个回应,我认为这是一个合理的方向,可以使项目取得良好的结果,因为许多项目可能需要适应不断变化的要求,这些要求可以很容易地改变最后期限,人数或时间工作。

对于开发商及其潜在客户的所有build议,设定一个不现实的简短开发时间表应该受到哪些惩罚?

巧合的是,这似乎几乎和开发团队错过发货date一样多。

这不是一个真正的编程问题,而是更多的pipe理问题。

错过最后期限很less是开发商的错。 作为一名开发人员,你应该尽自己所能做好工作,但最终每个人都能够做到这一点。 如果开发商投入了诚实的努力,尽pipe如此,截止date却错过了,这意味着最后期限是不现实的。

处理截止date是经理的责任。 有不同的方法,但没有一个包括“惩罚”开发人员的工作。 这里要理解的重要一点是所谓的项目pipe理三angular 。 这意味着软件项目可以是好的(即满足要求,质量好),快速(满足最后期限)和便宜(人数,工具)。 麻烦的是,这3个属性中只有2个可以select。

所以如果pipe理层想要一件好东西,那么速度也不会太快。

如果pipe理层想要一件好东西和便宜的东西,那就不会太快。

最后,如果pipe理层想要廉价而快速地猜测什么,那将不会有什么好处。

所以错过最后期限的正确答案取决于所选的情况。 Good and fast requires adding some extra help, better tools, investment in above-average developers and more.

Good and cheap by definition assumes that deadlines are going to be missed (Blizzard, makers of World Of Warcraft are good example of this approach)

And finally cheap and fast usually means cutting features and releasing with bugs.

The main goal of project management is to plan how an application is going to be built, in time. You should not start your project development if you don't have a schedule showing what you're going to be doing every single day the project will last.

This way, you can detect that you're going to be late, as long as you follow the project's evolution on a regular (weekly if not daily) basis. And the earlier you know it, the sooner you can act accordingly.

You usually have two options :

  • Catch up (by hiring additionnal workers, working more, or removing features).
  • Tell your customer that something went wrong (even better : what went wrong ) and you're gonna need more time.

For the second option, I'm not meaning there won't ever be penalties. But from my personal experience, as long as the customer is informed in advance and offered solutions (preferably three : give more money for additional workers/remove features to save some time/accept the project being late), they'll be open to negociation. Which is always better than conflicts 🙂

Perhaps the better question is if deadlines are meaningful in the face of inaccurate estimates? Businesses do a lousy job of estimating software –that is a fact. Both management and developers play a part in this and neither one seems willing to own-up to their responsibility in this problem.

但要回答你的具体问题:

1.What actions have you seen applied as 'penalty' for missed deadline, and which of these eventually resulted in more-good-code?

The 'penalty' I've seen for missed deadlines for managers and developers range from nothing, to promotion, to simple transfer. The most severe penalties I've personally witnessed was a manager "transferred" to a less important project and for the business-unit to lose a financial bonus.

The only time I have ever seen someone fired over a missed deadline was when the employee was already going to be fired–the deadline gave the business a legal reason to fire the employee.

2.What project-management responses caused the project to fail outright?

This is a whole separate discussion on its own… but there is some inherent bias in this question– project management is at fault .

The three top things I have personally seen PM's do that sabotage a project are (in order of severity):

  1. Ignore data/recommendations/warnings from their technical staff.
  2. Ask for estimates early in the development process. This results in estimates with an error-bar of 10x (it'll take one month, give or take ten months).
  3. Reject/modify/demand software estimates so that they fit an arbitrary budget and schedule. This is not to say Developers should ignore business demands–but rather the business demands need to be set equally by Developers and non-Developers.

3.What responses restored working order and resulted in code that could be maintained afterward?

I have yet to see a functional software development organization. So the fix is usually a lot of blood, sweat, and tears from a couple of heroic developers working with a highly-capable PM who knows how to defend against politics within the company (ie deflect BS from their staff).

4.What responses resulted in more-bad-code?

  1. Yelling. Cursing. Insults. (Sadly, this still happens in some workplaces)
  2. More "project management"–either by way of people, meetings, status reports.
  3. Getting software estimates earlier in the process so "we can plan better." Estimates need to come later when your staff has more data and a better understanding of the problem.
  4. Coddling the developers (it's not your fault, the manager screwed up).
  5. Coddling the project managers (it's not your fault, the developers screwed up).
  6. Adding additional, unqualified staff to the project.

I got fired for missing a deadline, I was 98% finished with the product, external forces and deadlines that are that firm don't allow software to be developed properly. Even I can admit I wrote some poor code under the circumstances, but I also wrote some good maintainable code as well. No consideration was given for feature creep, infact no technical specifications were detailed upfront and adaptation of functionality was required as limited and buggy versions of the software became available for managements review. I could have communicated better, but when I did communicate it was emphasized that deadlines are non-negotiable.

Two obvious questions come to mind when a deadline was missed:

  1. Was the deadline feasible?
  2. Did external factors impact performance?

Obviously, if someone presents you with a deadline that doesn't make sense then there shouldn't be any penalty for missing the deadline. Also, if someone misses a deadline because they were called up for jury duty that also shouldn't be held against them as well.

In the event those questions don't apply then the next thing to do is to figure out what went wrong. If you based your estimate for how long something would take, and thus the deadline, on the developers estimation of how long it would take them to write the code then perhaps they were too optimistic in their responses.