朋友们和同事们经常问我:“弗兰克,你是怎么这么高效呢?”虽然我没有立竿见影的秘诀,但我有一种心态,并使用了一些工具和技术,这些帮助我在软件工程师的工作中保持高效。在这篇文章里,我会分享一些策略。
什么是生产效率?在经济学中,生产力衡量的是产出与投入的比例。在软件工程里,我认为产出应该看作是我工作创造的价值,而投入则包括我在项目中投入的时间和使用的工具费用。在我看来,重要的是要将你工作的价值看作是产出,而不是仅仅看代码合并或问题解决的数量。
我们通常认为生产效率是由有效性和效率共同构成的。
- 提高效能是指在投入不变的前提下增加产出。从产出是生产的价值这个角度来看,这通常被描述为“做对的事”。
- 提高效率是指在保持相同产出的情况下减少投入。这通常被描述为“把事情做对”。
这种区分是有用的,因为它可以帮助识别改进的潜力。考虑快速地编写一些实际上并不需要的功能。这是高效率但低成效。另一方面,考虑用你不熟悉的编程语言编写一些非常有价值的功能,这会极大地拖慢进度。虽然成效很高,但效率会很低。
优先考虑的事有效意味着“做对的事情”。但如何确定什么是正确的事呢?,这可以通过与客户和利益相关者交谈来做、查看客户反馈或分析业务数据来完成。一旦明确了相关的目标和任务,就可以给它们排个优先级。
在以提高生产力为目的进行优先排序时,我们不能仅仅考虑影响效果(产出)。我们也需要考虑投入的努力(投入)。有用的优先排序工具是影响-努力矩阵。
你可以把任务放在努力和影响这两个维度上。这里提到的“努力”指的是完成任务所需要的付出,而“影响”指的是任务完成后的效果。为了最大化工作效率,先从那些见效快的任务着手。然后计划处理重大项目,并在适当时候加入一些次要任务。要注意避免不必要的浪费。
执行并建立势头优先处理那些高影响力但低投入的任务,你已经为公司、部门或团队的生产力奠定了坚实的基础。然而,当你考虑每个个人贡献者花在任务上的时间和精力时(比如你自己),依然有很大的改进余地。如果不能高效执行,光有“完美的计划”也不够。
每个人拥有的时间是一样的。为了讨论方便,假设你每天工作8小时。然而,你在这8小时里并不能完全专注于高影响力的任务。会有会议、日常事务、额外的工作负担和其他干扰。而且,即使你在处理任务时,你的效率也会受到情绪、精力和专注度的影响。
就我个人而言,我长期生产力的最大因素是建立和保持动力的势头。我喜欢用雪球效应来看待我在工作中的动力。在物理学里,动量定义为物体质量与其速度的乘积。
当你开始一个新工作或换到一个新的职位时,你就像一个小小的雪球位于山顶。雪球的大小对应着你积累的知识和技能。而雪球滚动的速度则对应着你完成任务比如编码、审阅PR请求等的速度。
当你第一次开始推时,会感觉很难推动,由于球很小,容易卡在小树枝或石头之间。继续推时,球会越来越大,速度也越来越快。
为了保持你的动力并维持,你需要承担几项责任:
- 增加你的雪球的 体积。学习新的编程语言、框架、工具和技术。熟悉新的代码库,并了解你所在的工作领域,。改进你的工具和工作流程。与你的同事、利益相关者和客户建立持久的关系。所有这一切都将使你更容易克服障碍。
- 提前规划以避免遇到可能阻止你的雪球前进甚至使其部分脱落的重大障碍,比如树木。这意味着要尽早识别潜在的障碍和风险,并在到达它们之前避免或减轻这些障碍和风险。
- 不断推动你的雪球。这意味着在你的任务上取得进展,提供价值。你需要找到合适的推动力,因为用力过猛会使你在遇到障碍或优先级变化时难以停止和绕过障碍。
你如何在工作日和周内平衡这些活动?如果你只专注于推进而不进行规划,你很容易遇到问题。如果你不注重积累实力,你就无法克服不断增长的障碍并迎接更大的挑战。如果你只注重积累实力而不推进,你就无法创造价值。
在我职业生涯的过程中,应用敏捷软件开发的核心原则效果显著。此外,我还摸索出一些技巧和工具,帮助我每天保持动力和活力。接下来将简要回顾一下敏捷原则,然后具体分享一下我常用的工具和技巧。
敏捷软件开发原则我是敏捷软件开发宣言中的原则的超级粉丝。我所说的不是诸如Scrum之类的敏捷方法,而是核心原则。以下对我而言最重要的几点简要总结如下:
- 持续为客户创造价值
- 欢迎变化
- 简洁性 - 最大化不必要的工作量
- 持续关注技术卓越和良好设计
- 定期反思并作出调整
我怎么把这些方法应用到日常工作中呢?我只有在工作能够在生产环境中使用时才会认为事情完成了。我会把任务分解成尽可能小的部分,目标是在一天内完成拉取请求,以便尽早获得反馈并快速迭代。如果优先级发生变化,这样我就可以切换到另一个任务而不会留下未完成的工作。
这样可以确保我的工作专注于增加价值,并且我可以快速适应变化的需求。为了保持简单,我遵循YAGNI(你永远不需要它)原则。我只实现当前需要的功能,避免过度设计。我专门设计以避免在编写代码后讨论设计时失去动力。每次回顾代码时,我都会尽力改进它,不断偿还技术债务。
我也经常反思我的工作,并努力改进我的工作流程和工具。我们稍后在Kaizen部分会详细讨论这个问题。想了解更多关于敏捷软件开发的内容,可以点击这里查看我的文章《用体育生能理解的方式解释敏捷》(https://dev.to/frosnerd/explain-agile-like-im-a-sports-student-3m8l)。
接下来,我们探讨你可以自己尝试的具体工具和技巧。
工具与技术持续改进
持续改善(Kaizen)[]
改善(Kaizen)是一种日语中的术语,意味着持续改进。它是一种专注于小步改进流程、工作流和工具的哲学。随着丰田模式的流行而广为人知。其核心理念包括:
- 改进是一个持续不断的过程。通过持续的小改进来实现长期的显著效果。
- 让每个人都能发现低效并提出改进方案。
- 专注于流程,而不是人。系统地改进流程。
- 消除或简化那些对客户或公司没有价值的活动。
- 测量并反思。用指标跟踪进度,尝试变化,反思结果。
我在工作中与团队一起应用改善,同时也将其应用到个人层面。每天晚上,我会回想一下当天做的事情以及它们对客户或组织的影响。每周我会安排30-60分钟的时间来改进我的工作流程和工具。
例如:
- 自动化我之前手动制作的每日或每周消息/报告的生成。
- 通过学习或复习键盘快捷键、IDE功能和插件来提高编码效率。
- 取消那些时间投入回报低的会议。可以考虑阅读会议摘要/纪要代替参加会议。
- 在收件箱中添加新文件夹和规则,将一些低优先级的消息每周检查一次。
- 存档一些不再相关的旧Slack群组。
零收件
零收件箱技巧旨在通过将未读消息的数量保持在(或接近)0来有效管理您的电子邮件和Slack收件箱。目的是通过保持未读消息的数量在(或接近)0,来减轻杂乱收件箱带来的认知负担,并确保您不会错过重要消息。核心思想是:
-
处理每一条消息,不单单是“查看”。应用4D原则:删除、委派、推迟、立即处理。
-
删除消息(主要针对电子邮件),如果这条消息无关紧要、垃圾信息或无用。
-
委派任务给其他人,如果这项任务属于他人,立即转发。
-
推迟处理消息,如果它需要你的行动但无法立即处理,安排在之后的时间。大多数邮件客户端都有此功能,对于Slack频道,我会使用“提醒我这个”的功能。
-
立即处理如果任务能在两分钟内完成。
-
使用文件夹、标签、频道对消息进行分类。设置自动化过滤器或规则在消息到达前就自动进行分类。我个人在电子邮件账户中根据项目和消息类型有不同的文件夹,例如拉取请求、工单更新。
-
不要把邮件当作待办事项列表。将较大的待办事项移至专门的任务管理工具。
-
设置专门处理消息的时间。不要整天频繁检查电子邮件或Slack,而是设定专门的时间段,比如午餐后或下午这些低效时段。
-
取消订阅和过滤。如果你收到的通讯/更新无关紧要,请取消订阅。如果不可以取消订阅,请设置自动化过滤器删除这些消息,防止它们进入你的收件箱。
-
积极归档不再使用的临时Slack频道。
- 简单且一致。无论你使用哪种系统,它需要足够简单,让你每天都愿意使用。
待办事项
我尝试使用数字待办事项列表,但它们对我不适用。它们经常变得过时,或者有些任务永远停留在那里。我改用了一本笔记本,它就放在我的办公桌前。我有一个简单的系统:
- 每天,我会写下日期和那天想要完成的任务,按照优先级排序。我要么在前一晚,要么在第二天早上第一件事时来做这件事。
- 我在完成任务后会在列表上打勾。比如我查看Slack消息或处理新的PR审核请求时,我会回顾我的任务列表,提醒自己最重要的任务是什么。这有助于我回到正轨,并优先处理最重要的事情。
- 一天中,添加新任务也是可以的。不必完成所有的任务也没关系。但是,秉承着持续改进的精神,我会在一天结束时回顾这些情况,并制定计划避免类似情况再次发生。
我们来看看一个例子清单,
比如说,在写一篇博客文章时,一位同事叫你今天得交一份报告。于是你把它提到了最前面,就立刻开始做。到了晚上收工时,结果你连邮件都没来得及看。
在你结束一天的时候,你试图理解报告为什么会突然出现。可能的原因有很多,比如说:可能是系统自动发送,也可能是有人误操作等。
- 这份报告今天必须完成,你虽然知道这件事,但在安排你的一天时忘记了。这种情况下,你可能需要调整你的安排,在截止日期前一天设置一个提醒。
- 这份报告今天必须完成,但是因为你同事忘记告诉你,因此你并不知道。这种情况下,提前明确地告诉对方你需要多少时间。考虑使用一个共享的任务管理工具,你的同事可以在上面给你分配一些任务,这样你就能收到通知。
- 这份报告今天并不一定要完成。它下周结束前也不会被发送。这种情况下,今后遇到紧急临时任务时,要敢于挑战其优先权。
时间管理技巧:定时定量法和连续集中法
这是一张日历。
我每天都会使用时间盒和时间块。时间块帮助我规划一天和一周,确保为重要的短期和长期活动留出时间。时间盒帮助我避免陷入细节或迷失方向感。
这里有一些我专门留出时间做的活动:
- 审查拉取请求(PR)(每天)
- 编写代码(每天)
- 阅读和回复信息(每天)
- 一对一和团队会议(每周或每两周)
- 个人成长和学习(每周)
- 运动(每天)
有时我会在我的日历中安排时间,或者在待办事项旁边写上时间。在每个时间段内,我采用时间盒法,同时也会在更广泛的范围内使用这种方法。例如,当我为代码审查设定一个60分钟的时间盒时,即使60分钟内没有审查完所有的PR,我也会停下来。未完成的那些则会在第二天优先处理。
时间盒也有助于我更好地管理未知的未知。当着手一个更大的任务时,我通常会以一个概念验证(PO)来启动,时间限定为几个小时的期限。如果在限定时间内无法完成概念验证,我会调整对该任务所需努力的估计,将其重新定位在影响-努力矩阵中,并相应调整优先级。如果它仍然处于最高优先级,我会延长时间盒;但如果存在其他快速取胜的机会,我可能会暂时转向它们。
时间分块帮助我保持不同活动的平衡,这些活动有助于建立和保持动力,而时间盒法则更注重进步而非完美。
聚焦和番茄工作法
相机镜头聚焦](https://imgapi.imooc.com/6792ebde08e81bf308000533.jpg)
我们的大脑能够应对复杂的问题,但在应对分心和任务切换时却显得吃力。我个人的经验是,如果我将8小时的工作时间分成4小时的深度工作(不受打扰)和4小时的浅层工作(可以处理中断的情况),我的工作效率会比在混合工作中更高。
为了成功进入深度工作状态,我需要有合适的环境。我会戴上耳机听音乐或保持安静,而且我的桌子不完全需要干净整洁。如果太乱,我会先整理一下。我可能会关闭消息和通知。
虽然深度工作极其有效,但也非常耗神。不过,这种工作方式也非常耗体力。不过,大约45到60分钟后,我的注意力开始迅速下降,但即使专注了30分钟左右,我就开始感觉身体吃不消。我的脑袋开始疼痛,肌肉也开始紧绷。
为了保持工作和休息之间的平衡,我经常用Pomodoro技术™。核心理念是工作25分钟后休息5分钟。每完成4个Pomodoro后,休息15到30分钟的长休息。
番茄工作法还对我工作有另一个积极的影响,它促使我把工作分成更小的部分,每个部分都可以在一个番茄钟内完成。写代码时,我争取在每个番茄钟结束前让代码编译成功。理想的话,我甚至能在每个番茄钟结束前提交代码更改。写博客时,我争取在每个番茄钟结束前完成一部分内容。
帕累托原理(即80/20定律)
根据帕累托原则,80%的价值往往来自于20%的工作量。因此,如果我们想提高效率,就应该专注于那部分最重要、最有价值的工作,以最大化生产力。
实际上这对我来说意味着什么?
- 充分利用生成式AI。我用生成式AI生成代码,结果通常不尽如人意,但如果有效,就可以用作初步版本。我也用生成式AI生成自动化测试。我宁愿有丑陋但经过测试的代码,也不愿有漂亮、精炼、高性能但没有测试的代码。一开始不要追求100%的代码覆盖率,而要专注于关键部分。
- 不要过度工程化。首先,让它跑起来,之后再让它更完善(如果它已经证明了其价值)。
- 不断重构。每次接触代码时,我都寻找改进的机会。这样做可以避免一次性代码过于复杂,而使其相关的代码逐渐达到高质量。
- 逐步减少重复劳动。当你第一次遇到某事时,值得将其记录在笔记或工单中。当你定期但不频繁地做某事时,创建一份操作手册。当操作手册变得很长且执行频率较高时,将其编写成脚本。当脚本被频繁使用时,就该考虑自动化了。
当然,你需要记住,剩下的20%的结果会花费四倍于完成前80%部分所需的时间,这部分就是你正在偿还的利息。所以你需要明智地决定能承担多少债务,愿意支付多少利息,并定期偿还债务。
所以为什么使用这种方法能省时呢?如果你最终还是要做完所有的工作,那还有什么意义呢?重点是你做的工作几乎不可能百分之百解决问题的全部。可能是因为你没有完全理解问题的全部。也可能问题会随着时间的变化而改变。也许后来会出现其他更好的方案。通过专注于带来最大价值的那20%的部分,你能更快地创造更大的价值,并且能更容易地调整方向,适应变化。
现场走动
现地现物是源自丰田生产方式中的一个概念。Gemba 是一个日语词汇,意为“真实场所”。在软件开发的背景下,这意味着去工作实际进行的地方,例如团队的工作空间、代码仓库、CI/CD 管道、事故渠道、生产环境。作为技术负责人,这对我而言很重要,可以避免陷入“象牙塔”困境,并与同事的实际工作保持紧密联系。
现场巡视帮助我尽早识别出低效、瓶颈环节和障碍。它还帮助我更好地理解工作的实际情况,并与我的同事们建立更紧密的关系。我每天都尽量安排现场巡视,预留大约15分钟。下面是一些关键点:
- 去那些创造价值的地方。在SRE,我把它叫做“战场”。
- 观察,不要评判。提问并倾听同事们遇到的问题,读懂言外之意,保持好奇。
- 和同事们多交流。
- 关注流程而非个人。
升级事件
升级问题是指当问题在当前层级无法解决时,将其提交给更高层级的权威或专家处理。迅速升级是重要的,因为它确保问题由有相关知识、权限或资源的人快速解决。
升级也非常重要,可以避免任务停滞不前。虽然这听起来可能像“抱怨”,但从公司和客户的角度来说,快速解决问题对大家都有好处。
我经常将上报与设定时间限制结合使用。如果在预计的时间内完不成任务,我可以向相关人员求助,比如向我的主管或者该领域的专家求助。
概要和结论在这篇文章里,我们探讨了多种提高生产效率的战略,同时平衡了效率和效果,使之达到最优。我们强调了使用影响-努力矩阵来优先处理高影响力、低努力的任务。
我们学习了如何建立和保持动力。我们了解了一套生产力工具集,包括敏捷原则以确保价值传递和适应性,Kaizen持续改进,使用零收件箱技巧来管理消息,待办事项列表进行日常任务管理,时间盒法和时间块法进行有效的时间管理,番茄工作法保持专注,帕累托原则最大化价值,现地现物(Gemba行走)保持与团队工作的联系,以及快速解决问题的重要性。
你最喜欢哪些提高工作效率的工具和技巧?你是如何在工作中平衡效率和效果的?在评论区分享你的想法吧!
此处省略
要是你喜欢这篇帖子,可以来我的 Ko-fi 页面支持我一下。
- 封面照片由kris在Unsplash提供
- 待办事项照片由Thomas Bormans在Unsplash提供
- 日历照片由Eric Rothermel在Unsplash提供
- 看板照片由Parabol | The Agile Meeting Tool在Unsplash提供
- 沮丧的人的照片由ahmad gunnaivi在Unsplash提供
- 镜头照片由Paul Skorupskas在Unsplash提供
- 电脑照片由Lukas Blazek在Unsplash提供
- 停车场中的汽车照片由Michael Satterfield在Unsplash提供
共同学习,写下你的评论
评论加载中...
作者其他优质文章