用户提出需求,开发者负责实现:软件开发的正确分工

本文探讨软件开发中用户与开发者的角色分工,强调用户应提供问题数据而非解决方案,开发者需基于数据做出技术决策,避免过度复杂化,确保软件真正解决用户需求。

用户提出需求,开发者负责实现

在软件世界中,软件开发者的工作是解决用户的问题。用户提出问题,开发者解决问题。每当这些角色被颠倒时,麻烦就会随之而来。

如果你想看到一个臃肿、无用且复杂的软件,那就找一个开发者实现了用户提出的每一个解决方案的软件。确实,用户是知道问题所在的人,有时他们还有新颖的解决方案想法。但最终决定如何解决问题的人应该是系统的开发者,而不是用户。

当你在组织内部为少数用户编写软件时,这个问题可能特别严重。你为之编写软件的用户通常拥有过度的权力,因为他们是高管或接近高管的人。他们可以 literally 告诉你该做什么。然而,如果他们想要一个真正对他们有益的解决方案,他们应该尽量避免这种做法。如果你足够信任一个团队让他们为你编写软件,那么你也应该足够信任他们来为软件做决策。如果你不信任他们,为什么他们还在你的组织工作?一群互不信任的人通常是一个效率极低的群体——甚至可能根本不是一个“群体”,而只是一群试图互相防御的个体。这不是运行组织或让其中任何人过上幸福生活的方式。

如果用户想要影响开发者的决策,他们能做的最好的事情就是提供数据。开发者需要信息来为用户做出好的决策,而这些信息通常来自用户自己。如果你作为用户认为软件走错了方向,提供关于你想要解决的问题的信息,并解释为什么当前软件没有解决它。获取关于有多少其他人有这个问题信息。最好的是如果你能展示数字,但有时即使是轶事在开发者试图做决策时也可能有帮助。开发者应该适当地判断数据(关于大量用户的硬数据显然比单个用户的轶事更好),但他们通常欣赏所有提供给他们的信息,当这些信息是作为数据而不是对特定解决方案的要求时。

另一方面,开发者通常有相反的问题。如果你想看到一个用户讨厌的软件,那就找一个开发者 simply 想象用户有问题,然后开始为那个问题开发解决方案的软件。问题来自用户,而不是开发者。有时软件的开发者也是它的用户,他们可以看到自己正在经历的明显问题。这很好,但他们应该从用户的角度提供这些作为数据,并确保其他人也在实际经历。开发者应该将自己的意见视为比普通用户更有价值(因为他们看到很多用户反馈,并且日复一日地与他们的程序一起工作),但仍然是一个来自用户的意见。

当你解决开发者的问题而不是用户的问题时,你正在投入大量精力到一些不会以最佳方式帮助人们的事情上。坚持自己的意见,成为房间里最聪明的人,并让团队解决你的问题,这可能是令人愉快的,但发布最终没有帮助人们的软件感觉非常糟糕。此外,我通常发现解决开发者的问题比解决用户的问题导致更多的复杂性。所以实际上,从用户那里找出问题并修复它比想象一个问题并埋头苦干要容易。

现在,我并不是说没有开发者提出过有效的问题,也没有用户提出过有效的解决方案。有时这些事情确实会发生。但关于这些事情的判断应该放在等式的适当一边。只有用户(最好是大量用户,或关于大量用户的数据)才能真正告诉你他们正在经历什么问题,只有开发方面的人(最好是一个在理解问题并可能获得同行反馈后 tasked 做出这个决策的个人)才能正确决定应该实施哪个解决方案。

  • Max

评论

Simon 说: 2013年1月16日下午2:07
我完全同意,从双方的角度来看。从开发者的角度来看,我们代码库中最糟糕的部分来自开发者试图实现客户要求的东西,而不是弄清楚客户实际需要什么——结果通常是既复杂难维护,又没有真正解决客户的问题。唯一的积极点是,由于交付的东西确实满足了客户 stated 的要求,我们得到了报酬。但如果这是最糟糕代码的来源,那么紧随其后的是开发者试图解决实际上不存在的问题。通常来自 architect-types,他们很少接触客户问题,实施宏伟的基础设施流程,旨在带来秩序,但 mostly 只是引入更大的复杂性。在过去的几周里,我有机会简化事情,并删除了 literally 数万行根本不需要的基础设施/架构代码,有时甚至完全未使用。

回复

Max Kanat-Alexander 说: 2013年1月18日上午12:10
阿门!删除所有那些代码真是太棒了。删除大段代码是我刚加入项目时最喜欢(也是最频繁)的任务之一。也是我最频繁的代码审查评论之一——这真的需要存在吗?

  • Max

回复

Daria 说: 2017年3月21日上午12:50
完全同意你的观点。我认为消费者必须报告问题,开发者必须修复它。当消费者开始自己解决问题时,事情就朝着错误的方向发展。

回复

Effective Engineering Productivity – Maxson Programming! 说: 2018年6月11日上午12:54
[…] 建议给你的解决方案,你最终会遇到我在《用户提出需求,开发者负责实现》中描述的相同问题。也就是说,当你在开发者生产力领域工作时,开发者是你的用户。你不能 just […]

回复

Ella Brown 说: 2018年10月10日上午4:47
绝对正确!开发者很难知道问题,因为他不是正在经历程序的人。用户的工作是告诉问题,这样开发者可以找到解决方案并修复它。

回复

Lập trình viên có nên quăng “cục lơ” cho người dùng? – 7Tek Club 说: 2018年10月19日上午2:26
[…] Techtalk via Codesimplicity […]

回复

Users Have Problems, Developers Have Solutions – coding | factory 说: 2018年12月22日下午6:49
[…] Hacker News […]

回复

Lập trình viên có nên quăng “cục lơ” cho người dùng? - Trang Chủ 说: 2018年12月24日下午9:27
[…] ITZone via Codesimplicity […]

回复

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计