但是,在许多领域中,典型的客户是:
- 对日常运营问题感兴趣-短期策略...而非策略;
- 只关注即时解决方案;
- 通常是一维的,非抽象的思想家;
- 最初对“完成工作”感兴趣,而不是提出一种持久的高质量解决方案。
坦率地说,他们通常有充分的理由进行这样的思考。首先,他们正在经营一项业务,该业务应该在今天和明天产生收入,而不是在遥远的将来。其次,他们不是技术专家-他们不知道什么是可能的,什么是不可能的,以及特定体系结构/设计/实现选择的后果。这就是我们所知道的。
因此,答案是-毫不奇怪- 沟通。
您需要进行大量交流,互相教育,使对方至少在基本水平上理解对方的观点。您需要向他们解释可能的替代方案的短期和长期后果。并且您需要使用他们理解的语言。
- 如果您说“这将是hack,这会使代码的可读性和可扩展性降低”,那么他们会说:“是的,随便什么”。
- 如果您说“这将是一个短期修复,这将使长期的开发和维护成本更高,并增加引入错误的风险”,那么他们会说“啊,让我们考虑一下”。
- 并且,如果您说“此解决方案现在将花费您100美元,但会引入500美元的技术债务,您早晚必须偿还利息; OTOH,另一种解决方案现在使您花费400美元,并且不留下技术债务;请选择一个想要”,他们说“现在我们在说话!” 。
OTOH他们可以教我们有关业务角度的一两件事。业务需要可用且足够好 -几乎不完美 -解决方案。他们可能比任何人都更清楚“完美是善的敌人”。因此,您需要记住,我们的工作是为客户的问题提供解决方案,而不是生产技术上完美的软件。有时这两个会收敛到相同的位置,但更多时候却不是。许多人可能会认为这很可悲,但这是商业现实。对我而言,如果我设法解决了客户的问题,并且发现这样做使他们的生活明显变得轻松了,那么我和他们一样快乐。OTOH如果我设法实现了我心目中的完美设计,但是该公司在下周破产了,那对任何人来说都很难赢吗?
明智的企业主将理解-如果您使用他们自己的语言解释它们-为什么保持软件清洁,编写单元测试,重构等重要的原因。即使这些似乎在短期内并没有直接贡献,对于长期维护至关重要。明智的客户确实关心他们的业务的长期可维护性,因此,当他们看到投资产生的价值时,他们肯定会愿意投资。但是,它们的资源和时间都是有限的,因此您需要确定优先级并专注于最重要的事情。但是,只有对你们两个都重要时,它才重要。
您可能需要重构模块A,因为其中的代码简直太糟糕了,并且您有一个绝妙的主意,如何使用刚刚阅读的设计模式将代码重构为简洁,优雅和简洁。但是,如果该模块已经使用多年,并且运行可靠,那么您最好将注意力集中在模块B上,该模块将在下周通过一项非常重要的新功能进行扩展,其中包含大量错误已经。