快速而肮脏与优秀的设计

时间:2009-01-06 17:51:43

标签: java web-applications

当你的经理希望你以快速而肮脏的方式实施某些事情而你知道它会适得其反时,你会怎么做?

我的经理希望我为客户开发一个网络应用程序,并尽快完成。这是我们为这个客户建立的第一个网络应用程序,我认为我们这样做是非常重要的,这样我们就可以在它们不可避免地要求我们增强它或创建一个新网站时进行构建。

我想花一些时间来设置一个框架(即使它只是像Stripes这样简单的东西),并配置tomcat来使用DBCP。我也认为我们应该使用css模板,并至少给予应用程序的演示和设计最少的思考,因为在我看来,没有什么看起来像设计糟糕的网页那样不专业(除非它是一封电子邮件,非常糟糕的语法)。

问题并非如此,以至于我们已经面临着要完成这项工作的压力,但更多的是我的经理认为他无法为他自己认为不必要的事情计算额外时间。他的“只是尽快完成它”的方法已经适应了几次 - 例如,他告诉我不要设计代码来处理某种错误情况,因为它不太可能发生,然后当它确实发生时是一个大混乱(我必须清理)。

那我该怎么办?我真的这么做“快而又脏”吗?我是否认为最快的方法是做正确的事情,如果它花费的时间超过他的预期,那就应对后果?这里的部分问题是,虽然我过去做过Web开发,但它总是在现有框架内,所以从头开始构建框架对我来说是一个学习曲线。

19 个答案:

答案 0 :(得分:9)

请记住,在他的观点中,计算大量的时间会使销售对客户的吸引力降低。这可能是一个很好的营销方法(即使这是一个可怕的设计决定)现在快速和脏,所以客户喜欢它,当他们想要改变时,他可以在未来花更多时间,因为现在他有客户“他的网“。

但我的建议是:环顾四周,他是负责人,所以这样做,否则你只是为自己制造问题。如果你想做正确的事情,成为老板或找到另一家相信以正确的方式做事的公司。但是,只是反对谷物只会让你被解雇或与这个人一起在狗窝里,这就是生活的方式。

答案 1 :(得分:6)

快速而肮脏。这就是他们想要的,这就是他们愿意付出的代价。拿走钱并交付。

之后,当系统无法管理,因为它完全且完全混乱,并且客户能够想要并支付一个强大的,精心设计的解决方案,就拿钱并交付。

看,你得到两次报酬!

此外,废话解决方案最终会有一些持续的手动过程。这些都是收费的。你再次获得报酬!

难怪你的经理喜欢这种方法!

答案 2 :(得分:5)

尽管存在风险,我还是会提供管理视角。 : - )

我与一些团队成员面临的一个挑战是他们有时很难看到全局。这显然是一个开发人员也可以对他们的经理做出的声明 - 当然,管理人员(尤其是非技术经理人)可能无法理解现在仓促的决策如何导致以后出现问题。但我要重申,不仅仅是管理者能够错过全局。开发人员也可以。

我的团队有一次应该开发一个简单的演示,我有两个人正在研究它。这很可能是一次性演示。我们是否有可能最终保留并详细阐述它?当然。机会甚至是不错的 - 也许(只是在这里编号)25%只是为了争论的缘故。在将近一个月之后,没有可交付成果,最后我打电话给BS。事实证明,开发人员正在“设计”这件事。将它设置为模块化,可插拔,可测试等。我告诉他们停下来,我在一个下午自己编写了演示。 “全局”是快速向客户提供概念验证,如果出于任何原因我们决定将演示演变为实际的生产软件 - 很好 - 在最坏的情况下我们扔掉一个下午值得“努力工作”。那是最糟糕的情况。这并不像我能够制作几百行代码 复杂。

毫无疑问,管理人员有时会以权宜之计来打电话,但仅仅因为我要求我的团队做一些快速而肮脏的事情并不意味着我是短视的。大多数情况下,这意味着在获得工程设计权利的情况下,快速交付价值更为重要。不幸的是,对于一些开发人员(少数人,可以肯定),这个建议是亵渎神灵。

答案 3 :(得分:2)

如果通过“第一个Web应用程序”表示原型,那么您应该快速而又脏。您的客户可能希望在他们承诺之前看到一些东西。你可以快点做点什么;没有弄脏。如果您对如何设计网络应用程序并编写它非常小心,您可能会在发布第一个版本后立即将Web应用程序转换为艺术作品。

答案 4 :(得分:2)

开始打磨简历。

答案 5 :(得分:1)

我觉得有时你必须在诚信的基础上做出选择,而不是满足权宜之计的要求,或者只是因为你的老板承受的压力。这并不意味着我对您的问题有了答案,只有您必须自己决定在这种情况下,在您的组织中与此客户相适应。问问自己:

  • 你的老板真正知道客户想要什么?
  • 你比老板更清楚吗?您与客户的关系更强大吗?
  • 来自快速做的压力来自哪里?
  • 客户是否意识到与“快速而肮脏”相关的成本/收益?
  • 你从事什么样的组织工作?您是否认为自己更像是一名顾问(非常接近客户)而不是员工,反之亦然?
  • 您的老板(在您的公司或客户中)的想法如何?同样您的想法如何?
  • 代码是真的丢掉还是将来实际使用

答案 6 :(得分:1)

如果它只是一个客户端的演示,我认为一个快速而肮脏的解决方案就足够了,但最终你是一个开发人员的工作,如果你认为它会适得其反。在Clean Code中,鲍勃叔叔很好地推动了这一点:

  

“如果你是一名医生并且有一个   要求你停止的病人   所有愚蠢的洗手   因为它是准备手术   花太多时间?显然是   病人是老板,还有医生   绝对应该拒绝遵守。   为什么?因为医生知道更多   而不是病人的风险   疾病和感染。这将是   不专业(从不介意犯罪)   为了医生遵守   患者

     

这也是不专业的   程序员屈服于意志   那些不了解的经理人   制造混乱的风险。“

答案 7 :(得分:1)

让你的老板从他们的错误中吸取教训。

如果你总是努力保护他们免受自己的侵害,那么他们就永远无法从错误的决定中吸取教训,你将永远努力减轻他们下一个糟糕的决定。

同样重要的是,你不要让他们免受糟糕决定的影响,例如悄悄地为你感到内疚的事情安排一个周末。

当然,你可以而且应该在没有任何恶意的情况下亲切地做这一切。更好的是,通过外交方式尽早讨论每种方法的原因可以创造奇迹。

当然有些人从不学习; - )

答案 8 :(得分:0)

我快点走了如果那是你所要求的那么脏,正如jcollum所说,Ruby on Rails很难成为解决方案。

我之所以快速肮脏,是因为如果用户和您的经理有时间框架和预算,并且您可以提供满足这些和任何其他要求的稳定解决方案,那么您应该这样做。最重要的是,如果你在为别人工作,那就是满足他们的要求,而不一定是你自己对最佳实践或框架设计的想法。也就是说,如果你能说服你的经理和客户获得更多前期投资的长期利益,以获得更好的长期结果,那就去吧,并公平对待你。

我的猜测是,一旦你完成了更多的实施,你就能更好地将快速和快速结合起来。好。

答案 9 :(得分:0)

一方面,你不一定知道老板的所有因素和压力。也许他/她知道这是“一次性”,你不会与这个客户做任何生意。

最重要的是,您将获得报酬以实施他们告诉您实施的任何内容。是的,你有责任指出利弊,但最终,这是他们的决定。

但是,为了安全起见,记录一切!如果人们开始玩责备游戏,你至少可以覆盖你的背面。 (可能没有任何好处,但总能保护自己。)

答案 10 :(得分:0)

我的建议是说有一种快速而肮脏的方式来满足X天/周/月内的要求,并且如果有重大的改进或功能,那么转移到更大的东西会有成本处理现在需要的东西。

这里需要考虑的是YAGNI的想法,如果客户在第一次实现中不想要他们想要的基础知识。还有一个问题是,你将在第一轮中建立多少框架。

答案 11 :(得分:0)

如果你是负责人,我会想象你会以一种好的设计“正确”的方式去做,即使需要更长的时间。但问题是你的经理负责。所以,这听起来像是你应该和你的经理谈话。

提醒他(巧妙地)他的方法导致一团糟的时间,并建议更多地关注该项目。建议在这个项目上投入更多精力可能是一个很好的营销决策,因为与这个客户的关系可能是至关重要的。不要陷入争论,只要让自己听到。至少它可能让他停下来再想一想他的决定 - 也许他可以和客户谈谈他们愿意支付多少

最后,尊重他的决定,但要确保他确实意识到这是他的决定而你只是遵循命令。这样,如果将来出现问题,它最终不会成为您的问题。

如果他不是那种平易近人的类型,我认为你是快速而肮脏的方式。我会记录这种情况,尽量减少未来的潜在可能性。

答案 12 :(得分:0)

Ruby on Rails。如果那是一个选择。我听过很多次,这是让CRUD网站运行良好的最快方法。

[edit]

构建自己的框架是一个巨大的浪费时间,你无法在任何合理的时间内构建世界级的框架。不要重新发明轮子。我听说有很多程序员说“哦,是的,我可以把它变得更好。”当然可以在5到10个小时的付费时间内建立它甚至接近良好的价格,这会让你的公司直接购买它吗?不太可能。

如果这是贵公司经常做的事情,那么你应该和你的老板谈谈,让你找到一个现成的解决方案来解决“快速,肮脏但仍然不错”的问题。这可能意味着现在有额外的时间,但将来会节省时间。

[/ edit]

答案 13 :(得分:0)

嗯,如果你的老板只愿意快速和肮脏,你不同意这项任务,那就找另一份工作。听起来你不喜欢做你付出的工作。

答案 14 :(得分:0)

只需执行快速而肮脏的实施。你的工作是将规范变成一个工作程序,而不是分析即时成本和之间的权衡。未来的好处。我和工程师一起工作过,他们坚持要添加大量的间接,包装,未使用的代码等等,这些都没有人付钱,坚持认为他们比PM更了解。我也 那个人(我毕业后的几年)并且它不会让你受欢迎。我不再这样做了。

答案 15 :(得分:0)

我不会对老板过于评判。像许多人说的那样,他/她就像你一样拥有POV。您需要通过学习某种快速原型制作工具来适应这种需求。我将Microsoft平台用于商业和Web应用程序(Java用于科学工具),因此每当有人想要查看原型网站时,我都可以使用ASP.NET快速地在我的本地开发平台上破解。通常对于原型而言,丑陋与功能无关。如果客户知道某件事情是可能的,那么他们就会倾向于购买美化(除非它的内部 - 那么谁在乎它看起来像什么 - 哈!)。

答案 16 :(得分:0)

这是您需要管理的情况。你的老板认为没有必要实施一个好的设计,因为从长远来看他并没有看到它会变得更容易。您可以现在说服他,也可以确保他在修改最终需要更长时间后才能看到问题。至少你可以控制他对几个小任务的思考,这样你就可以训练他去做好设计。

答案 17 :(得分:0)

考虑一下您应该成为“专业软件开发人员”的事实。 成为专业团体的成员意味着遵守一些规范和规则。这意味着您不仅仅因为管理层告诉您而放弃原则。

如果您确实认为设置框架和使用CSS模板对于提供适当质量的产品是必要的,那么坚持这样做。

想象一下,如果一名建筑工程师被告知他的经理会以快速而肮脏的方式进行桥梁设计。即使他知道设计质量很差,他会这样做吗?如果他这样做,对他个人以及作为一个职业的建筑工程会有什么后果?

我认为我们作为软件工程师需要为我们的工作更加自豪,并表现出更多的职业责任。

答案 18 :(得分:0)

我将“Q& D”解释为“Quick and Feature-Poor”。即使是演示或概念验证,脏也很少是快速的。无论你如何开始,无论如何你都会重构它。只需给它时间,并专注于YAGNI和最小化解决方案。