22 流程与方法论:防范螺丝钉化
你好,我是李云。这一讲我想和你聊一聊,工程师在工作中所面临的螺丝钉问题。
如果我说,我们每个人在职场都是螺丝钉,不知你听到这话的反应是什么呢?你可能会感到失望,觉得这样的比喻太过于贬低,甚至还有些悲观。毕竟,将自己比作一个小小的螺丝钉,似乎意味着我们在工作中可有可无、缺乏特色,因为容易被替代而让人没有职业安全感。有这样的感受是正常的,那咱就来看看如何处理这样的担心。不过,我得先让你知道成为螺丝钉的好处。
理解螺丝钉的好处
“铁打的营盘流水的兵”这话估计你听过吧。在职场中,这个比喻用来形容公司和团队具有稳定的基础或结构,而人员则如同流水一样不断变化。这句俗语通常用来描述那些虽然人员更迭频繁,但组织架构和流程制度保持稳定,能够持续运作不受影响的情况。
作为工程师,你一定希望自己所在的团队和公司是一个铁打的营盘,这样身边的同事即便有流动,对自己开展工作也不会带来太大的困扰。不知你有认真关注过所在团队和公司是如何打造营盘的吗?
如果你所在的公司是相当重视规范化建设的,那么很可能看到过像下图这样的流程图,用于定义开发工程师的主要工作步骤,并配以一定的文字,对每个步骤会提出工作要求。
那为什么要有这张工作流程图呢?我总结了一下,无外乎这么三大原因。
第一,分解复杂任务,责任到人,促进沟通与协作,确保工作质效。工作流程图基于系统化思维原理,将复杂的工作分解为一系列具体的、可管理的步骤,包括各步骤的执行顺序、责任人、要求,以及各步骤之间的逻辑关系。这样的信息透明有助于团队成员和相关利益方,清楚自己的角色和任务,从而更好地协作。步骤分解使得复杂的工作变得简单明了,便于理解和执行,通过确保每个步骤的质量,来保障最终整体的工作质量。
当工作流程中的步骤具体且可管理时,这就意味着能够更准确地评估时间和资源分配,从而有效地规划和跟踪执行,进而落实风险管理。
第二,通过标准化,规避因个体差异所带来的混乱,便于新员工培训。通过工作流程图,可以确保所有参与者都遵循相同的步骤和标准来完成任务。这种一致性除了维持工作质量,还可避免因个体差异而导致的错误和遗漏。流程图为新员工提供了直观的学习材料,帮助他们快速了解岗位的工作图景和要求。
第三,使流程可视化,方便持续优化和传承。通过对工作流程的可视化,可以更容易地识别其中的瓶颈、重复或不必要的步骤,为流程的优化提供依据。基于流程所沉淀的最佳实践和知识,会自然成为公司的无形资产甚至是核心竞争力,传承下去。
总之,通过流程来规范工作,这背后涉及了系统化思维、效率优化、质量控制、持续改进等多个方面,通过明确、标准化的工作方式来提升工作质效和团队协作,同时降低风险,促进个体成长和流程改进。
你看,流程的背后有这么多好处,才能撑起它在公司中的营盘地位。这也是为什么,任何一家向工作要质效的企业,都会走上流程化之路的根本原因。
当企业通过流程化去追求质效时,必然带来的一个结果就是,对工作流程中的员工螺丝钉化。这么看来,咱被螺丝钉化并没什么问题。一方面,因为需要关注的事情变少了,更能聚焦做好手头的工作;另一方面,企业因为员工的螺丝钉化而更能保证工作质效,当员工离职时也能更快地让代替他的人上手。无论对企业还是咱个人,确实是双赢的局面。
你可能会问了,所有追求工作质效的企业都在搞流程,可流程那么具体、那么细,又怎么能看出哪一家公司流程的独特之处呢?企业之间又如何切磋交流呢?这就轮到方法论出场了。
方法论指导流程
方法论也被称为方法学或方法理论。通常是指一组用于研究或解决问题的原则、理论和技术的系统性组合。方法论通常涵盖了思维方式和实践应用两个方面,它指导着我们如何进行问题的研究与实践操作。对于咱来说,我们所关心的方法论是指:如何高质高效地开发软件产品。工作流程是要服务于这个目标的。换句话说,方法论指导流程,流程实现方法论。
哎呦,你可能一听方法论就头痛,这可太虚了,我还是对写代码更感兴趣,为什么要和我聊这个呢?别急,背后确实有原因。
我们在17讲聊软件设计时,指出软件设计能力是工程师的竞争壁垒,这一讲中还讲到了概念能力和洞察力两个概念。方法论的背后,考验的正是人的洞察力,只不过主题是“如何实现高质效软件开发”,这与03讲的专业化本质是一回事,与每位工程师都相关。
方法论是一种更高阶的思维模式,它通过抽象总结用模型对思维进行表达,从而方便传播、理解和运用。你看,有了方法论以后,企业之间交流软件开发的质效问题,就不用从事无巨细的流程层面了,而是从方法论层面。
方法论具有可复制性,它所具有的模式化和结构化的特点,使得其他人可以在相似的问题上应用同样的方法并达到相近的效果。是的,也正因方法论的这一特点,企业之间才有了相互探讨软件开发质效问题的基础。
还有呀,提炼方法论的过程能帮助我们更深入地理解问题,通过收敛问题表象而触达问题本质。而坚持使用方法论可以培养个体的思维习惯,使个体的思维更具逻辑性、结构化和系统性,从而能更好地理解和应对复杂问题。你意识到了吗?这些能力也是一名优秀的软件开发工程师应具备的,否则很难驾驭软件的复杂性本质。
有了方法论,我们对其所针对问题的研究和思考就有了蓝图,不仅能有效地避免盲目试错,还能更快地明确举措,从而提高解决问题的效率。当然,方法论并不是一成不变的,它可以根据实际情况和需要进行调整和改进,以此适应不断变化的环境和挑战。方法论来自实践,又指导于实践,在运用它的时候还得重视对它进行迭代与完善。
说了这么多,能否举一个关于高质效软件开发方法论的例子呢?我曾在《专业嵌入式软件开发:全面走向高质高效编程》这本书中提了一个,让我简要地搬过来。
大体上,我所提出的方法论,可以用公式“工程方法论 = 流程 + 工具”来表达。背后又包含以下的三个原则。
- 关键要素有形化。实现高质效软件开发的关键要素,可分为有形的和无形的。是否有形是指,能否通过一定的具体方法施加影响,通过约束实现保障其质量的目的。比如,软件设计能力和编程好习惯一开始就不是一种有形的要素,将之分别转换成设计原则和编码规范并文档化就是有形的了。
- 工具和流程的无缝整合。无缝整合的目的,是让工程师能在开发环境中轻松地使用工具和流程,低成本甚至零成本体会到它们的好处。不少工具和方法之所以不能被持久地运用而发挥作用,大多是因为使用起来太麻烦,以致工程师还没尝到“甜头”就放弃了。另外,将一些重复性的工作自动化,也是无缝整合的一种方式。比如,19讲聊到的持续集成、持续交付和持续部署就可以算在内。
- 以单元测试为中心。软件产品的质量保证,在很大程度上需要通过代码质量保证加以落实,而单元测试能做到最小粒度的代码功能验证。单元测试需要通过设计测试用例,保证代码尽可能多地被执行,这也正是代码覆盖、动态分析和性能分析所需要的。将代码覆盖、动态分析和性能分析以单元测试为中心进行整合,能实现在单元测试的同时顺便完成以之为中心的其他质量保证工作。
从这个例子,相信你能体会到方法论的简洁和抽象性。还有,流程的设计和工具的运用,应是围绕上面讲到的三个原则去展开的。下图分别代表了这个方法论的后两条原则。
现在你明白了咱成为螺丝钉的背后,其实是企业通过流程和方法论追求工作质效的必然,这么看来“职场螺丝钉”这个词的含义,并不完全是负面的。话说,因为成为螺丝钉而担心自己的职业安全,这样的担心又是健康的,也是我基于自己的职场经历想特别提醒你的。
防范螺丝钉化
虽说每位工程师都受益于螺丝钉化的好处,可如果没有“反螺丝钉化”的意识,来思考与学习整个工作流程及背后的方法论,那咱对软件行业的认知就会成为井底之蛙。换句话说,我们只是知道那样做,但不知道为何要那样做,更别谈能对流程和方法论进行完善了。年轻时这样不是什么大问题,可随着年龄的增长还这样,那就是大问题了。
另外,井底之蛙所带来的局限性,会在我们从一家流程化更高的公司跳槽到流程化更低的公司,或者走上管理岗位带领团队时,很明显地暴露出来。对于前者,咱会觉得做事不像以前那么顺手,好像一身的武功却施展不出来,还特别慌乱没有头绪;对于后者,如何确保整个团队的个体能做事规范化,从而获得整体的工作质效,会成为咱手上最具挑战的课题。
不知在你身边有以前在大厂工作的同事吗,你有觉得他们在做事规范化上与你有什么不同吗?如果你觉得他们和你没什么大的区别,那大概率他们在大厂工作时,只是做好了螺丝钉,没有反螺丝钉的意识与行动。当他们离开大厂后,没有大厂的流程与方法论的加持,自然能力也会大大缩水。
如果你现在仍就职于大厂,希望你能建立起反螺丝钉化的意识并有所行动。千万注意,离开大厂进到别的公司时,别人对你的最高期望,是你能建设营盘,而不是只能做螺丝钉。否则,你身上的大厂光环很快就消失殆尽了。
这么说来,成为螺丝钉是提高工作质效很重要的一步,掌握背后的流程与方法论,也就是反螺丝钉化,才是终极目的。
总结时刻
在进入下一讲之前,让我们回顾一下今天的关键内容。这一讲,我们以“铁打的营盘流水的兵”这句俗语为引子,探讨了高质效软件开发背后的营盘长什么模样。
营盘的背后,是基于方法论所打造出的流程与各种工具的配合,结合自动化、文档化等手段,让工程师们能更具质效地完成软件开发工作。你发现了吗?营盘才是一个企业最真切、扎实和可持续的竞争壁垒。知晓了流程的价值,对于咱来说就得很好地遵守,这也是09讲中所聊到的,律己中的守规要素中的重要内容。
对于存在研发效能团队的公司来说,研发效能平台难用,是因为缺了方法论层面的思考。没有以稳定的原则和系统化思维,去指导研发效能平台的产品设计。这些公司的研发效能团队,最缺的不是合格的产品经理,而是掌握方法论的专业工程师。
作为企业的员工,被螺丝钉化是不可避免的,只是我们要注意流程是一把双刃剑。一方面,它能帮助我们在工作中聚焦,更有质效地完成手头工作;另一方面,如果我们缺乏思考和学习整个工作流程的意识,在享受流程的价值的同时也会受限于它,因为缺乏建设流程的能力,在新的公司或新的岗位上,就不能更大程度地发挥自己的价值。我得告诉你,驾驭流程化是专业化的一个核心组成部分。
最后,我想请你思考,既然工作流程这么有价值,为什么我们在工作中却会产生抵触流程的现象呢?期待你留言与我分享交流。
我们下一讲见。
- 极客001 👍(3) 💬(1)
刚毕业时做为一名开发者确实很抵触流程,觉得作为一名程序员,只要把功能开发出来就行,尤其是对写文档很反感,随着工作年限的增加,越来越发现了流程的重要性了,听了老师的课产生了很强的共鸣!
2024-04-28 - SMTCode 👍(3) 💬(1)
抵触流程的原因:1、掌握流程要学习一些和当前工作关系不密切的工具和知识。2、程序员思维更愿意关注代码实现。3、建立规范流程并不能直接带来企业效益,如果高层不支持,很难落地。4、探索出一条适合当前公司的流程,对个体要求更高,挑战更大。5、以打工者身份面对工作。总之,抵触就是个人和组织的认识高度不够,导致不够重视,而让流程成为空中楼阁无法落地提效吧!
2024-04-26 - pyhhou 👍(1) 💬(1)
老师讲的真好 我个人觉得在工作中抵触流程大致有两个原因: 1. 没有看到流程的真正价值,仅仅是从自己个人的视角来看,但没有从整个公司的角度来看 2. 在流程化的体系内,大多需要与别人合作,交流,共同把事情落地,这跟我们之前学生时代的上课、做作业、考试又很不一样,如果没有反思,还是遵循之前的思维模式和习惯,我们对流程的抵触情绪就会越深 也想请教下老师,除了去大公司,还有什么其他好的途径能让我们更加深刻地了解流程化、方法论、研发效能这些东西?感觉自己在小公司待久了,对这方面的感受确实不怎么到位。虽然平时也会经常思考这些相关理论,但是跟亲身经历比起来还是差许多
2024-05-01 - FireMo 👍(1) 💬(1)
在工作中产生抵触流程,深层原因是抵触要学习流程而带来的压力,新入职一个环境的前期由于对工作环境有个需要学习的预期,可能会主动地去学习流程和公司规范,当掌握公司当前流程和规范后就倾向于守成,本能地抵触公司在流程和规范上做出的改变。 学习了本节课程,反思了自己在工作中的行为,我现在所处的位置就是一个合格的螺丝钉,熟悉了公司的发版流程,知道在哪一步应该做什么事应该找什么人,有些时候还会指导不懂流程的同事,前期还会质疑一下流程为何会这么设计,现在有些守成了,按照流程一步一步走下来,走得多了反而少了质疑流程的意识。 后续会着重了解公司流程的形成以及演化史,向着驾驭流程化努力! 谢谢老师。
2024-04-26 - 骨汤鸡蛋面 👍(1) 💬(1)
流程的核心是为了提高质效,但在落地过程中,很容易就为了流程而流程,而软件开发毕竟是非标的行为,有很多意外情况,比如xx必须xx号前上线,所有人为这个事儿倒排, 加班,但按日期上线后也并没有什么后续动作跟进, 只是为了说起来没有延期而已。
2024-04-26