当您陷入困境时,跳到不同的功能上工作,这是项目失败的根源吗?


16

在个人项目(或工作)上,如果您遇到问题,或者等待解决问题的解决方案,那么如果您跳到代码的另一部分,那么您认为这不是应用程序的好理由吗?会是越野车还是更糟,但是永远都无法完成?

假设您没有使用git并将每个功能编码到一个特定的分支,由于您正在使用3个不同的功能,并且每个功能都存在未解决的问题,因此事情可能会一发不可收拾。

因此,当您完成工作后,就会感到压力很大,因为您遇到了这些悬而未决的问题,并且半生半熟的代码仍然存在。

避免此问题的最佳方法是什么?(如果有)

我猜想使用像git这样的东西,并且为每个功能创建一个分支是避免这种不良习惯的最安全方法。

还有其他建议吗?


你自己有这个问题吗?还是您有些队友注意到了这一点?
Doc Brown

Answers:


33

这不是问题。暂时摆脱一个令人困惑的问题是突破此类问题的最佳方法之一(稍后考虑时,或者下次您以崭新的观点/思想坐下来时)。

始终确保正确使用源代码控制分支,而不必担心代码中的一半解决方案。有些人从不休息,但这只是个人选择。但是,您绝对不应该强迫休息与他人共享。


+1用于版本控制分支。我们已经看到可在一个差异中解决10个问题的提交,但其中一个很糟糕,因此无法隔离坏的更改。
JBR威尔金森

8

正如smp7d所提到的,跳来跳去可以使您摆脱眼前的问题而获得良好的心理休息。但是,重要的是不要忘记您正在使用的代码仍然不完整。确保知道从哪里离开。

如smp7d所述,源代码控制和分支是将新功能代码分离出来并查看其与主要代码库有何不同的好方法。

我的一个建议是,如果您正在使用一种特定的方法,请确保 围绕该方法有一个命名良好的单元测试。这样,当您隔天/每周/每月/每年使用该代码时,即使该方法当前未通过测试,您也应该能够清楚地知道该方法应该执行的操作。


1
+1是您非常务实的想法,即单元测试失败(例如,而不是TODO注释),以确保您记住推迟的问题。
亚当·克罗斯兰

3

这是个问题吗?当您尝试实现的功能有10%发生时,情况并非如此。有时,当您先做一些不同的事情时,您会变得头脑清醒。

显然,当您陷于尝试实现的90%功能中时,这是一个问题-然后您要么需要他人的帮助,要么需要老板的一点帮助来完成您的工作(当然,后者会如果由于实际技术问题而陷入困境,则会适得其反)。

对于这种情况,最好的选择通常是尝试将要使用的功能拆分为较小的子功能或“功能切片”,这些子功能或功能可以一一实现,测试和调试。对我而言,这有助于将那些特征切片,未解决的问题,要在列表中完成的部分写下来,给予它们优先级(A,B,C足够),并首先处理优先级最高的事物。


好点子。跳来跳去不是常态。
smp7d 2012年

3

根据我的经验,“跳来跳去”,或者更明确地讲“随机跳来跳去”是一个更为紧急的问题的征兆,这是目标不明确的目标之一。

如果你有一个非常清晰的思路,以书面形式,是否贴字条上你的显示器的侧面或连接到您选择的问题跟踪正式的规范,那么你总是知道到底是什么工作的未来。如果您一直在从事接下来的工作之一,那么您将有很大的机会成功完成该项目。

另一方面,如果您对下一个最重要的事情的想法比较模糊,那么实际上很难找到可以解决您项目要解决的问题的东西,或者更确切地说,减少工作量-确定此特定更改已完成并解决了特定问题时,请保持干燥。

如果您有一个目标,例如“使UI易于使用”,那么几乎不可能说下一个修补程序是什么,或者当您完成“修复UI”并可以继续进行其他工作时。另一方面,如果您有一个目标,例如“将这些下拉列表与自动填充功能组合到搜索字段中”,并且“'foo'应自动完成为'Fooly Brand Baring'”,那么在修复后,这显然是显而易见的这个问题。

在对停止时间有一个明确的想法之前,请不要编写任何代码;如果没有明确的想法,请尝试获取其中一个,而不是为某个常规功能启动另一个分支。

如果您确实有如此出色的工作规范(即使是针对个人项目),那么“跳来跳去”就完全可以了,而且安全又有用。


0

摆脱问题可能会帮助您解决问题,但请记住,切换上下文需要付出一定的代价。仅当您确实陷于困境或出现关键任务任务(例如,客户陷入困境)时,才应尝试这样做。

如果您在任务之间不断地来回切换,可能会导致一些未完成的功能和大量的浪费时间。这就是为什么诸如看板之类的做法会鼓励您设置进度限制的原因。这样,您可以专注于一次最多只能完成几个任务,从而提高了吞吐量。


0

有时,限制并行实现的功能数量可能会有所帮助。如果在完成一项其他功能之前会超出该限制,则拒绝开始实施一项额外功能。这种方法称为看板

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.