用户提出问题,开发者提供解决方案:软件开发的核心原则

本文探讨软件开发中用户与开发者的角色定位,强调用户应专注于提出问题,开发者负责提供解决方案,这种分工协作能有效避免软件复杂度和维护困难,提升产品质量和用户体验。

用户提出问题,开发者提供解决方案

2013年1月16日 作者:Max Kanat-Alexander

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

如果你想看到一个臃肿、无用、复杂的软件,只需找一个开发者实现了用户提出的每个解决方案的案例。确实,用户是知道问题所在的人,有时他们还会提出新颖的解决方案。但是,关于如何解决问题的最终决策权应该始终掌握在系统开发者手中,而不是用户手中。

当你在组织内部为少量用户编写软件时,这个问题可能尤为严重。你为之编写软件的用户通常因为身居高管职位或接近高管而对你拥有过大的权力。他们完全可以直截了当地告诉你该做什么。然而,如果他们想要一个真正对他们有利的解决方案,就应该尽量避免这种做法。如果你足够信任一个团队来为你编写软件,那么你也应该足够信任他们来为这些软件做决策。如果你不信任他们,为什么他们还在你的组织工作?一群互不信任的人通常是一个效率极低的群体——甚至可能根本算不上一个"群体",而只是一群各自为政、互相防备的个体。这绝不是运营组织或让其中任何人过上幸福生活的方式。

如果用户想要影响开发者的决策,他们能做的最好的事情就是提供数据。开发者需要信息来为用户做出好的决策,而这些信息通常来自用户本身。如果你作为用户认为某软件正朝着错误的方向发展,请提供你希望解决的问题的相关信息,并解释当前软件为何无法解决它。收集有关其他多少人遇到此问题的信息。最好能展示具体数字,但有时即使是轶事在开发者做决策时也可能有所帮助。开发者应恰当判断数据(关于大量用户的硬数据显然比单个用户的轶事更好),但当信息以数据形式而非特定解决方案的要求提出时,他们通常都会感激收到的所有信息。

另一方面,开发者常常面临相反的问题。如果你想看到一个用户讨厌的软件,只需找一个开发者凭空想象用户有问题,然后开始为该问题开发解决方案的案例。问题来自用户,而非开发者。有时某软件的开发者同时也是其用户,他们能看到自己正在经历的明显问题。这没问题,但他们应该从用户的角度将其作为数据提出,并确保这也是其他人实际正在经历的问题。开发者应将自己的意见视为比普通用户稍具价值(因为他们看到大量用户反馈并且日复一日地与自己的程序打交道),但仍应将其视为来自用户的意见。

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

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

-Max

评论

Simon 说: 2013年1月16日下午2:07

我完全同意,从双方的角度都是如此。从开发者的角度来看,我们代码库中最糟糕的部分有些来自开发者试图实现客户要求的内容,而不是弄清楚客户实际需要什么——结果通常是既难以维护,又无法真正解决客户问题的东西。唯一的好处是,由于交付的内容确实满足了客户陈述的要求,我们因此获得了报酬。

但如果最糟糕的代码来源于此,那么紧随其后的就是开发者试图解决实际上不存在的问题。通常来自很少接触客户问题的架构师类型的人,他们实施宏大的基础设施流程,旨在带来秩序,但大多只是引入了更大的复杂性。过去几周,我有机会简化事务,删除了 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

[…] 如果只是实施向你建议的解决方案,你最终会遇到我在《用户提出问题,开发者提供解决方案》中描述的相同问题。也就是说,当你从事开发者生产力工作时,开发者就是你的用户。你不能只是[…]

回复

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 设计