原文:humanwhocodes.com/blog/2020/0…
在我作为软件开发人员的职业生涯的早期,我认为我的主要贡献是编写代码。毕竟,软件工程师就是公司花钱招来写代码,做软件的。我花了几年的时间才意识到除了写代码还有很多其他的事(像经理,设计师,产品经理,销售人员等)。而后,我慢慢地发现自己不再像一个程序员,而更多地是成为了一个解决问题的人。有时可以通过编写代码来解决问题,而有时解决方案根本不涉及代码。
一旦意识到解决问题的价值,我便着手确定解决问题的最有效方法。在成为技术负责人后,我便陷入了许多日常问题中。我必须想出一种能让我果断行动,有效排序并尽可能多地解决问题的方法。
最终,我列出了一个问题清单,每一个出现的问题我都会问自己。我发现依次问这些问题有助于我做出最佳决定:
-
这真的是个问题吗?
-
这个问题需要解决吗?
-
需要现在就解决这个问题吗?
-
这个问题需要我来解决吗?
-
有没有更简单的解决问题的方式?
每个问题都旨在揭示有关该问题的某些信息,使您可以继续进行下一步;或者,如果幸运的话,请完全避免该问题。每个问题都有细微差别,因此详细描述每个问题会有所帮助。
这真的有问题吗?
解决任何问题的第一步是确定它是否确实是一个问题,并且需要定义。出于本文的目的,我将问题定义为如果不解决会导致客观上不理想的结果。比如,下雨天晚上如果把窗户开着,这是一个问题,因为里面会变湿,并且可能会损坏地板,家具或其他物品。解决这个问题的方法可以防止产生不良后果,因此在上床睡觉之前关闭窗户可以防止财产被破坏。
担任领导职务时,通常会收到听起来像是问题而只是意见的投诉。例如,我曾与许多软件工程师进行过交谈,他们在开始新工作或加入新团队后立即感到该团队做错了很多事情:他们使用的框架错了;代码样式错误;文件的组织方式是错误的。他们将如何解决所有这些问题?这是一项艰巨的任务。
我问这些软件工程师这个问题:是问题还是不同?在许多情况下,“错误”仅表示“不是我曾经习惯或喜欢的。”如果您可以确定报告的问题实际上不是问题,那么您就不再需要在解决方案上花费资源。团队成员对完成工作的方式不满意并不是客观上不希望的结果。团队之间的分歧本质上没有问题。如果您能够确定这个问题并不算问题,那就做点其他事吧。
这个问题需要解决吗?
确定存在问题后,下一步就是确定是否需要解决问题。如果不良后果可以忍受并且持续增长或缓慢增长,则无需解决问题。例如,如果某个Web应用程序的某个部分仅由管理员(通常是五个人或更少的人)使用,并且加载速度比该应用程序的其余部分慢,那么您可以确定这是可以的。该问题的范围很窄,在极少数情况下会影响到少数人。尽管可以很好地解决问题,但是它不是必需的,而且问题很小,因此无法解决就不会在将来导致更大的问题。提出此问题的另一种方式是:“如果问题从未解决,会发生什么?”如果答案是“没啥”,那么或许并不要为这个问题多花时间。
现在是否需要解决问题?
如果您有一个需要解决的问题,那么下一个问题是确定是现在需要解决还是可以等到以后解决。有些问题显然是紧迫的,需要立即解决:站点关闭,每当有人使用它时应用程序崩溃,等等。这些问题需要解决,因为不良后果是立竿见影的,持续不断的,并且有可能增长:网站停机时间越长,公司损失的钱就越大;应用程序崩溃的次数越多,客户使用竞争对手的可能性就越大。
同样重要的是确定是否可以推迟解决问题。令人惊讶的是,许多非紧迫的问题冒出了领导层。这些是需要最终但不是立即解决的问题。符合此描述的软件中最常见的问题是技术债务。技术债务是您应用程序(或相关基础结构)中性能不佳的任何部分。它不会在今天或明天引起重大问题,但最终会造成问题。以我的经验,直到技术问题变成紧急情况(为时已晚)之前,很少解决技术债务问题。但是,技术债务并不是解决所有其他问题的方法。它属于中间区域,今天不应完成,但绝对需要完成。
如果现在不必解决问题,通常最好推迟一下。推迟它是指将来计划解决它,而不是避免对其做任何事情。如果现在不是解决问题的合适时间,那么请决定何时:一周,一个月,六个月?将其放在日历或任务管理系统上,这样就不会丢失它。提出此问题的另一种方式是“问题是否紧急?”
这个问题需要我解决吗?
这个问题最适用于担任领导职务的任何人,但也适用于已经完成太多任务的任何人。这个问题是仅需要您具备的特殊技能吗,还是其他人可以完成任务?
这是我根据一位导师给我的建议改编的一个问题。我在抱怨自己似乎只是在收集任务而无法跟上步伐。他说我应该问自己,“这是尼古拉斯(作者名字)问题吗?”有些事情只有我知道该怎么做,而那是我应该关注的事情。其他任何事情都应该委托给其他人。他给我的另一个重要提示:仅仅因为您可以比别人更快地做某件事,并不意味着您应该自己做。对于大多数非紧急任务,一天或两天后完成并不重要。
因此,如果问题可以由其他人解决,并且您是领导者或已经有太多工作,则请委派。
有没有更简单的解决问题的方式?
确定需要解决的紧急问题后,该过程的最后一步是确定是否有更容易解决的方式。关键是,较简单的问题必须在节省时间(或其他资源)的同时,为您提供与原始问题相同或相似的结果。
当时我在开发新的My Yahoo! 页面,我们的一位产品经理说Beta客户要求我们在页面上添加可调整大小的列。这是相当复杂的事情,因为那是2006年,Web浏览器没有今天那么强大。这项任务并非不可能,但是在一个已经充满JavaScript的页面上,添加更多内容来管理复杂的鼠标移动并需要将这些信息保存回服务器是一件艰苦的,容易出错的工作。
我从客户反馈会议中获取原始数据,以查看是否可以确定可调整大小的列将解决什么问题。最终,没有客户要求可调整大小的列(产品经理只是从投诉中推断出此请求)。相反,他们抱怨无法获得新的My Yahoo!。页面看起来像他们的旧My Yahoo!页。我们创建了与旧版式不匹配的全新版式,但事实证明,人们真的很喜欢旧版式。这使我们能够专注于一个更简单的问题:重新创建旧版式。
因此,我们花了一些时间在新页面中重新创建旧版式,并和客户进行了沟通。他们很高兴新页面现在看起来与旧页面非常相似。通过解决更简单的问题,我们节省了很多开发时间,客户也同样高兴。
解决问题并非总是容易的,但是值得花一点时间检查一下问题似乎特别严重或困难。
结论
这五个问题已成为我解决问题的方法的基础,不仅在我的工作中,而且在我的整个生活中。每当遇到问题时都要经历这些问题,这使我成为了更有效的问题解决者,并且总体上对结果感到满意。无法为我的服务员计算15%的小费?我会计算20%(如果不满意该服务,则计算10%)。我的高中校友办公室不断向我发送通知,通知我我不是经过验证的校友?那不是我需要解决的问题。如果我想在美国旅行,我需要获得新的驾照吗?这是我今年要解决的问题,但现在不是。
解决问题的方法有很多种,但我不确定我的方法是否适用于所有人。我所知道的是,有解决问题的方法总比没有解决方法要好。生活中充满着大大小小的问题,您每天都会面对这些问题。制定明确,可重复的策略是使问题解决更容忍的最简单方法。