我们为什么不能完成任何事情?


9

我在一个中等规模的公司的一个小团队中工作,其中大多数不参与软件开发。我是最新的,经验最少的开发人员,在开始之前没有软件方面的专业或学术背景,但是我对自己的投入受到尊重感到非常满意,并感谢在职业生涯的这么早就被认真对待。

尽管如此,我觉得我应该在如此充裕的通话时间内做更多的事情。作为一个团队,我们似乎很难完成工作。我希望能够提出一些建议来改善这种情况,并且我想如果这是个好主意,我会听取的,但是我对所提建议不知所措。

我可以确定为问题的事情包括:

  • 对当前任务的说明很少。部分原因是管理是瓶颈,而我们没有钱或人来承担我们想要的尽可能多的详细需求。这也部分是因为我们正在开发的软件正在调查中,确切的方法尚待证明并用于确定其有效性之前尚不清楚。
  • 首席开发人员非常喜欢他所说的“原型”,以至于他最近开始坚持认为所有东西都是“原型”,对我们其他人来说,这就像在编写不良代码并将其交给建模者一起玩。在许多情况下,尚不清楚他期望从这项练习中得到什么。然后,由于他坚持认为良好实践会花太多时间来制作原型,因此“实际”实现会遭受损失。我什至没有开始能够解开这种扭曲的逻辑,而且我不确定是否要尝试。
  • 建模人员应该精确地告诉我们有关所需方法的所有信息,并且绝对相信他们提出的理论上是完美的。这几乎是不可能的,但是没有采取任何纠正措施。建模方面的任何人都不会以可能采取行动的结构化方式提出任何问题,也不会寻求应用最佳实践的指导。他们的被动性也没有做。
  • 我以前曾尝试将TDD推入团队,但由于它对我来说是新事物,因此发现它很困难,尽管那些对我的工作负责的人愿意容忍它,但其他任何人都没有热情。我无法证明我花了很多时间去完成功能而不花时间,所以这个想法暂时被放弃了。我担心它不会再被捡起,因为没人喜欢被告知如何做他们的工作。
  • 现在,我们有一个持续集成服务器,但它主要仅用于运行多个小时的回归测试。它应该也应该运行完整覆盖的单元和集成测试,但目前还没有人编写它们。
  • 每次我与首席开发人员提出质量问题时,都会得到以下答案:“测试功能A很简单,功能B对用户来说更重要,但测试却太难了,因此我们不应该测试功能一个'。我再一次没有尝试解开这种逻辑。

.... phe 当我这样说时,它看起来比我想的要糟得多。事实证明,我想这是在寻求帮助。


5
公司在推出客户使用和喜欢的软件方面有多好?换句话说,尽管您不相信流程是出色的,但团队仍能取得良好的成绩吗?
罗伯特·哈维,

@Robert Harvey-我很难判断。这些产品非常利基,我们(开发人员)得到的信息不一。一方面,突破性市场中的新客户对产品的折衷超过了我们最初的设想,并因此而发现了错误,他们似乎并不介意,因为我们解释了原因并迅速修复。另一方面,一些大型机构客户对此表示不信任,我们开始反复修改该模型,对此感到不高兴。该软件团队是目前为数不多的断裂,即使在公司之一,因此我们看好的时刻
汤姆W

1
我会从客户那里征求尽可能多的反馈,以寻求就基本的“模型”达成共识的方法,并尝试加以巩固。对于客户而言,更改模型确实令人沮丧,但是如果这是新的,先进的软件,那么它就随处可见。
罗伯特·哈维,

好问题。我已经注意到,即使听众会接受,也很难真正改变,除非您看到它在实践中起作用。我的建议是先尝试提高生产率的方法,然后向团队展示这些方法。通过实践,您可以比编写/调试/重复更快地进行TDD开发。
Mike B

Answers:


19

让我扮演恶魔的拥护者片刻:

对手头任务的说明很少...首席开发人员非常喜欢他所说的“原型设计”

首席开发人员喜欢制作原型,因为规格很少。这可能是一件好事。这就是迭代商店的工作方式。

建模人员应准确地告诉我们有关所需方法的所有信息

这在迭代商店中不起作用。迭代开发的本质是需求通常是不完整的。迭代是充实需求的基础。

我之前曾尝试在团队中推广TDD,但由于它对我来说是新事物,所以发现它很困难

这也不行;您需要先了解这项技术,然后才能进行传播。此外,在要求很少的迭代商店中,TDD可能会产生过多开销。最好鼓励足够的单元测试覆盖范围。

现在,我们有一个持续集成服务器,但它主要仅用于运行多个小时的回归测试。

在小型的迭代商店中可能是合适的。

每次我与首席开发人员提出质量问题时,都会得到以下答案:“测试功能A很简单,功能B对用户来说更重要,但测试却太难了,因此我们不应该测试功能一个'

听起来您的商店有一些相当紧张的时间限制;不管您喜欢与否,都受这些约束的约束。

听起来您也来自软件行业的一部分,他们重视“正确的方式”做事,而不是先将产品推向市场。这没什么不对(事实上,这是令人钦佩的),除了第一个使用越野车软件的人通常是赢家。这不公平,但是事实就是如此。


我认为您将需要从“技术债务”的角度来解决它。每个公司都进行时间估算;假设您已经很不错了,就开始在您的时间估算中建立10%到20%的盈余以进行重构和培训,并坚持下去。
罗伯特·哈维,

接着说; 迭代开发是游戏的名称,您做对了。麻烦的是,迭代在实际完成之前就消失了,因为我们从建模者那里得到了关于我们编码的内容是否正确的模糊的陈词滥调。没有人可以识别任何错误,因此我们已经完成了工作。六个月后,事实证明这是错误的。我希望能够指出,建模者需要给予更坚定的标准来测试对,但话又说回来,是不是他们的工作这么说?
汤姆W

2
@Tom:只要您不坚持要求建模人员提供可测试的规格,他们就可以始终告诉您的团队他们弄错了。如果他们要让您对从他们的模型中产生结果负责,则必须让他们对为您提供可测试的规范负责,以便您可以声明成功。每个规范都应在其中内置某种“执行,不执行”测试,以便您和客户(或建模者)可以相互同意测试通过,而无需进行解释。
罗伯特·哈维,

完全正确。不幸的是,您可能要我承认我不想做的事情-我们缺乏能力。通常,这是显而易见的,但对于建模人员而言尤其如此。在某些方面,我们确实坚持严格的规范,但最终仍会出错。他们是科学家,从经验上讲,科学家倾向于将代码像实验一样对待-在执行过程中纠正错误。对于企业来说,这根本不够好,并且要考虑到这一点是专业性的问题。
汤姆W

把代码当作实验没有错。这是迭代过程的一部分。但是最终您必须解决“此代码接受了这些输入并期望产生此输出”。这就是单元测试的目的。它们构成规范的一部分。我明白了您为什么要进行TDD;它迫使规范加入代码中……但是您需要公司文化的支持才能使这项工作生效,而TDD对此却充满了“宗教”气息。并非所有方法都可以通过这种方式进行测试,因此最终,您可能不得不承受一定程度的不适。
罗伯特·哈维,

2

我将在这里重点介绍原型

原型的主要问题是它们只是作为概念证明

但是,如果您无法在原型上进一步构建,并且需要从头开始重建最终产品,那么您可能还没有构建原型,并且浪费了构建时间

我对您的团队的建议是在这些原型中获得一定的质量和灵活性。我知道不可能一开始就创建完美的东西,但要尽量保持可扩展性以适应未来的需求


这就是我一段时间以来一直在尝试进行的交流。碰巧的是,原型通常很有价值,并且确实向我们教授了有关问题性质的基本课程。但是,是否吸取了这些教训,实现的质量取决于开发人员从他们的大脑中重构所获取的知识,而不是使用原型来编写规范。首席开发人员说后者应该发生,然后不要继续确保它确实发生。
汤姆W”

当他说他想要一个原型时,他的意思是他想要一个最小的工作版本,并且尽快。这将是最终版本的基础。这种方法的问题在于,初级开发人员(通常)可以编写出色的代码,也可以快速编写代码,但是很少能同时做这两者。
凯文

2
弗雷德·布鲁克斯(Fred Brooks)说:“不管怎样,只要丢掉一个,就可以扔掉”,今天和40年前一样。
mattnz

1

这些是很好的答案。我只能补充说,“尝试交流”充其量是一个艰难的提议。组织工作方式的变化不会很快发生。当发生这种情况时,通常就像潮水一样,动量从下方和上方形成。因此,如果您对期望值保持较低的期望,或者等待机会说出事情将如何完成,或者期待与另一个组织合作,就会感到更加快乐。


1

您是否已找到公司中“得到”的人,请锁定此人并从他那里学到很多东西。如果没有,请花点时间,自己开始学习并成长(加入一个开源项目或开始自己的项目),然后寻找一个可以促进自己成长的地方。

可能发生的最糟糕的事情是您呆在那里,学习如何以错误的方式做事。是的,应该采取一些务实的态度,但是一支真正熟练的团队可以以正确的方式做事,并且仍能按时交付高质量的产品。听起来您当前的团队没有能力,您应该开始寻找新的团队。


“您确定公司中有人“得到了”吗?”大声笑
Kenzo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.