如何制定工程战略
本文介绍了领导者如何有效制定工程战略,包括理解战略核心、如何收集信息并制定可行的策略,以及如何利用行业最佳实践和技术债务管理来提升团队效能和产品质量。原文: How to Build Engineering Strategy
如果你了解过目标框架(如 OKR)背后的理论,通常会发现战略和目标应该是层层递进的。这类方法从公司使命和关键指标(KPI)开始,到公司目标,再到产品战略,然后将战略细分为团队或部门的具体目标。
然而,现实与理论却大相径庭。产品战略往往只是一份要实施的产品功能列表,并不包括技术债务、维护、SDLC 流程、自动化或工作方式等内容。在某些组织中,作为工程领导者,你是唯一知道需要做什么来提高产品整体质量、缩短上市时间和改进底层软件架构的人。只有你知道框架版本的支持何时结束,也知道数据存储解决方案的扩展性不佳,需要迁移。
根据我个人经验,作为技术负责人(公司的一级经理),我负责移动应用平台。尽管公司管理层知道想要提供什么样的产品,但只有我和我的团队知道如何打理我们构建的平台(维护、架构、自动化等)。
作为工程领导者,不仅要确保交给团队的产品任务得以执行,还意味着要制定计划,使团队的工作成果更加完美。为此,你需要有一个好的计划。
本文将探讨一些工具和技术,从而帮助我们制定长期工程战略。有些工具和技术在组织层面效果最佳,因为产品部门和技术部门可以合作应对挑战。有些工具和技术可以成功应用于团队层面,自下而上的激励组织的其他成员。
伟大的领导者都有计划
糟糕的领导者会执行,优秀的领导者会改进,而伟大的领导者则会整合。
整合不是即兴发挥,而是针对未来的战略挑战采取一整套连贯的行动。如果你想制定这样一个计划,理查德·鲁梅尔特(Richard Rumelt)的好战略/坏战略是最好的灵感来源。
虽然鲁梅尔特的著作主要侧重于整个组织的战略,但对较低层次的工程管理人员仍有借鉴意义。
即使作为一级领导(技术领导),也可以运用鲁梅尔特的见解为团队和技术栈制定 12-18 个月的计划。这种方法使团队能够重新构建解决方案、迁移技术栈、减少分心、集中精力、提高质量等等。
作为工程经理或技术主管,你已经负责管理部分技术堆栈、特定领域,甚至可能是整个产品。你应该有足够的背景来诊断问题、制定策略并选择具体的行动来推进工作。
什么是战略?
战略是为应对未来挑战而设计的对策。
理查德·鲁梅尔特认为,好的设计包含三个核心方面:
-
准备(Anticipation):观察和学习。 -
预谋(Premeditation):制定指导性政策,避免临时抱佛脚。 -
设计协调行动(Design of Coordinated Actions):制定在空间和时间上协调一致的计划。
建立在这些方面基础上的战略框架侧重于对长期计划至关重要的三件事(理查德·鲁梅尔特称之为"战略内核"):
-
诊断(The Diagnosis):了解现状,确定组织面临的主要挑战。 -
指导政策(The Guiding Policy):规定组织或团队应对挑战的总体方法。 -
一致行动(The Coherent Action):包括一系列旨在实施指导政策的协调行动。
如何制定战略
简而言之,包括四个步骤:
-
收集输入(Collecting Input):收集有关优势、挑战、机遇、瓶颈、当前计划和干扰因素的信息。这些信息可能与团队、技术栈或组织(利益相关者、管理层等)提出的问题有关。 -
战略模块分组(Strategic Blocks Grouping):对上一步的所有输入进行分类,考虑鲁梅尔特书中的战略要素,如杠杆作用、近似目标、利用优势等。 -
构建战略内核(Build Strategy Kernel):根据收集和分类的信息,制定战略内核--诊断、指导政策和一致行动。 -
迭代和完善(Iterate and Refine):收集输入、分组以及描述策略内核的过程可能需要数周时间,在此期间,应不断进行修改,并与团队和其他利益相关者分享,直到每个人都认为战略是合理的。
如需更全面的指南,建议查看实用工程管理(Practical Engineering Management),其中详细探讨了这一过程:工程战略框架。
为战略献计献策
如果你想寻找战略模块的灵感和范例,还是推荐你参考理查德·鲁梅尔特,他列出了这些要点:
-
关键目标(Leverage Objective):需要重点关注的最关键目标。 -
阶段目标(Proximate Objective):尽管存在模糊性和复杂性,但仍足够接近可行的目标。 -
链条中最薄弱的环节(Weakest Link in Chain):首先需要解决的限制因素。 -
设计的力量(Power of Design):决定是将资源和工作结合起来还是分离开来。 -
利用优势(Using Advantage):利用你的优势和机会。 -
屹立潮头(Riding the Wave of Change):识别和评估行业和环境重大变化的早期迹象。 -
了解惯性和熵(Understanding Inertia and Entropy):惯性是组织内部对变革的抵制,熵是系统和组织走向无序的趋势,
战略模块示例
下面是软件工程实践中的几个例子:
关键目标/修复干扰因素 -- 去除阻碍工程师进入心流状态的障碍。可能包括在开放空间环境中使用降噪耳机,或减少告警系统噪音,从而避免每天数十次的错误告警。还可能包括重新安排团队日程表,让每位工程师每天至少有 4 小时专注工作,或者限制正在进行的工作--"停止开始,开始完成(stop starting, start finishing)"。
题外话:心流状态是开发人员体验的关键因素。 请在 Abi Noda 的 DevEx 框架中相关信息。
阶段目标/改造 SDLC 流程 -- 最终目标--真正的持续交付或部署--往往过于雄心勃勃,难以一蹴而就。首先,必须将其分解为可实现的步骤,如良好的测试实践、发布和回滚解决方案、良好的监控和告警、软件稳定性等,其中每个步骤本身都可以是一个阶段目标。
链条中的薄弱环节/技术债务 -- 技术债务分类是一个真正的链条中的薄弱环节。总有一些工作要做--系统解耦、库更新、重构。在这里,主要工作就是找出最拖后腿的部分。为了进行分类,可以参考十种技术债务类型。
有关行业和软件工程实践中的更多示例,以及关键目标、阶段目标或链条中的薄弱环节等反模式,建议查看工程战略的战略模块示例。
信息来源
在制定战略时,可以利用无数的信息来源:一对一交流、人们的反馈、产品战略背景、分类技术债务等等。如需灵感,建议查看Practical Engineering Management上的这些文章:
工程领导者的信息信号 -- 知识来源可分为三类:拥有的知识(你已经知道的)、外部来源(在公司外部可以观察到的)和内部信号(公司的数据、洞察力、仪表盘)。作为工程领导者,你的任务是:a)为捕捉内部信号奠定坚实的基础;b)利用这些数据推动决策和长期战略。
掌握反馈 -- 反馈是一种特殊的知识来源,其并不总是经验事实,而往往只是意见、信念和个人看法。尽管这些信息并不总是量化的,但往往与遥测数据和产品仪表盘上的数据一样具有洞察力。如果没有收到反馈,并不意味着没有什么需要改变的,也许只是意味着没有与你分享的空间。作为工程领导者,必须在给予和接受反馈这两方面都游刃有余。
结构化信息来源
DevOps 文化 -- 科技行业尽管日新月异,但全球数以千计的成功企业积累了数十年经验和最佳实践。尽管大多数科技企业都认为自己是独一无二的,但通常都会解决经典的、众所周知的软件工程问题。这意味着有许多经过验证的实践也可以在你的组织中发挥作用--与其重新发明轮子,可以采用现有的行业标准,以满足我们的需求。
要制定长期计划,可以采用 DevOps 文化,这是一种促进工程团队和其他团队协作和分担责任的思维模式,帮助团队快速可靠的交付高质量软件。
以下是值得在团队中评估的 DevOps 文化的几个因素:
-
注重高度信任的文化和协作学习的环境。 -
围绕自动化、CI/CD 和遥测的开发实践。 -
团队架构和流程注重独立性和长期目标。 -
可预测的部署和发布管理。 -
每个人都对质量负责的弹性组织。 -
以成果而非任务为导向。
如果想对 DevOps 文化进行全面自我评估,以便更轻松的制定工程战略,建议查看 Practical Engineering Management 上的资料和模板:DevOps 文化清单。
技术债务分类 -- 有些公司,如 Google 或 Thoughtworks,已经制定了自己的技术债务分类,采用它们的框架可以帮助你找到适合你的软件工程战略的模块。
以下是谷歌定义的十种类型:
-
需要迁移或正在迁移 -
项目和应用程序接口 (API) 文档 -
测试 -
代码质量 -
死代码和/或废弃代码 -
代码退化 -
团队缺乏必要的专业知识 -
依赖关系 -
执行不力或放弃迁移 -
释放过程
结束语
为团队和技术制定良好的工程战略是最具挑战性和最耗时的工作之一。然而,有了这样一个计划,你就能成为一个真正有影响力的领导者,从而带来巨大的变化。
在我担任工程总监、工程主管和工程经理/技术领导的职业生涯中,制定了多种战略。最成功的战略充分利用了从理查德·鲁梅尔特(Richard Rumelt)所著的好战略/坏战略一书中吸取的经验教训。
希望这里分享的资料能激励你制定自己的长期计划,并成为一名能扩大影响力的领导者。
你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!
本文由 mdnice 多平台发布
相关文章:
如何制定工程战略
本文介绍了领导者如何有效制定工程战略,包括理解战略核心、如何收集信息并制定可行的策略,以及如何利用行业最佳实践和技术债务管理来提升团队效能和产品质量。原文: How to Build Engineering Strategy 如果你了解过目标框架(如 OKR…...
认识和使用 Vite 环境变量配置,优化定制化开发体验
Vite 官方中文文档:https://cn.vitejs.dev/ 环境变量 Vite 内置的环境变量如下: {"MODE": "development", // 应用的运行环境"BASE_URL": "/", // 部署应用时使用的 URL 前缀"PROD": false, //应用…...
Java18新特性总结
Java 18作为Java编程语言的一个重要更新,引入了一系列新特性和改进,旨在提高开发者的生产力和程序的性能。以下是Java 18的主要新特性概述: 元编程功能: Java 18引入了元注释和元类型声明的功能,允许开发人员在编译时…...
理解 Java 中的 `final` 关键字
理解 Java 中的 final 关键字 final 关键字是 Java 编程语言中一个重要的修饰符,它可以应用于类、方法和变量。理解 final 的用法和作用对于编写稳健和高效的 Java 代码至关重要。在本文中,我们将深入探讨 final 关键字的各种用法及其意义。 一、final…...
磁盘未格式化:深度解析、恢复方案及预防之道
在当今这个信息化爆炸的时代,磁盘未格式化问题无疑成为了众多用户头疼的难题。当我们的存储设备突然提示“磁盘未格式化”时,数据的丢失与恢复的挑战便摆在了我们面前。本文将深入解析磁盘未格式化的现象、原因,并给出两种有效的数据恢复方案…...
JWT 从入门到精通
什么是 JWT JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案 JSON Web Token Introduction - jwt.ioLearn about JSON Web Tokens, what are they, how they work, when and why you should use them.https://jwt.io/introduction 一、常见会…...
31-捕获异常(NoSuchElementException)
在定位元素的时候,经常会遇到各种异常,遇到异常又该如何处理呢?本篇通过学习selenium的exceptions模块,了解异常发生的原因。 一、发生异常 打开百度搜索首页,定位搜索框,此元素id"kw"。为了故意…...
使用Spring Boot设计对象存储系统
对象存储系统是一种以对象为存储单位的存储架构,适合存储大量非结构化数据,如图片、音视频文件、文档等。MinIO是一个高性能的对象存储系统,基于开源和云原生的设计理念。本文将讨论如何使用Spring Boot设计一个类似MinIO的对象存储系统。 目…...
Apple开发者macOS设备与描述文件Profile创建完整过程
安装并打开Apple Configurator 新建描述文件 输入macOS平台的描述文件的相关信息,然后选择证书 选择一个可用证书 存储描述文件 存储成功如下: 使用文本编辑器打开刚才保存的描述文件,找到设备名与UDID...
SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Redis 概述 1.1 Redis 下载与安装 2.0 Redis 数据类型 3.0 Redis 常见五种类型的命令 3.1 字符串操作命令 3.2 哈希操作命令 3.3 列表操作命令 3.4 集合操作命令 …...
mysql设置允许外部ip访问,局域网IP访问
(支持MYSQL8版本) 1. 登录进入mysql;mysql -uroot -p输入密码进入 2. 输入以下语句,进入mysql库,查看user表中root用户的访问 use mysql; select host,user from user; 3. 更新user表中root用户域属性,…...
mac虚拟光驱工具:Daemon Tools for Mac
Daemon Tools for Mac是一款功能强大的虚拟光驱工具,它为用户提供了在Mac上模拟物理光驱的能力,从而方便用户处理各种光盘映像文件。以下是关于Daemon Tools for Mac的详细介绍: 守护进程工具:Daemon Tools不仅是一个简单的虚拟光…...
软考 系统架构设计师系列知识点之杂项集萃(32)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(31) 第51题 网络逻辑结构设计的内容不包括( )。 A. 逻辑网络设计图 B. IP地址方案 C. 具体的软硬件、广域网连接和基本服务 D. 用户培训计划 正确答案&am…...
Web--CSS基础
文章目录 定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动flex布局响应式布局 定义方式 行内样式表 直接定义在style属性中,作用于当前标签 <img src "/imges/logo.jpg" alt "" style "width 400"…...
服务部署:Linux系统部署C# .NET项目
1. 安装 .NET SDK 首先,你需要在你的 Linux 系统上安装 .NET SDK。 Ubuntu系统: 下载 Microsoft 包配置文件 wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb 这个命令使用 wge…...
【机器学习】基于卷积LSTM的视频预测
1. 引言 1.1 LSTM是什么 LSTM(Long Short-Term Memory)是一种特殊的循环神经网络(RNN)变体,旨在解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。LSTM通过引入门控机制和细胞状态的概念,使得…...
细说wayland和X11
文章目录 协议介绍协议区别开发差异 Wayland和X11都是用于Linux和其他类Unix系统的显示服务器协议。它们负责在用户和应用程序之间的交互中管理屏幕的输出以及输入设备的输入。 协议介绍 X11通常称为X Window System,是一个历史悠久的显示服务器,自1987…...
数据结构:二叉树的实现
目录 二叉树的遍历方式 前序遍历: 中序遍历: 后序遍历: 二叉树的基本结构和功能 基本结构: 基本功能: 二叉树功能的实现思路 二叉树功能的实现 1、构建一个二叉树 2、二叉树的销毁 3、计算二叉树里的节点个数 4、得…...
Helm离线部署Rancher2.7.10
环境依赖: K8s集群、helm 工具 Rancher组件架构 Rancher Server 包括用于管理整个 Rancher 部署的所有软件组件。 下图展示了 Rancher 2.x 的上层架构。下图中,Rancher Server 管理两个下游 Kubernetes 集群 准备Rancher镜像推送到私有仓库 cat >…...
Linux目录的作用和常用指令
目录结构及其详细作用 / (根目录) Linux文件系统的起点,所有文件和目录都在其下。 /bin 存放系统启动和运行时所需的基本命令,如 ls, cp, mv, rm,这些命令在单用户模式下或系统崩溃时仍然可用。 /boot 包含启动引导加载器的文件和Linux内核…...
Nvidia/算能 +FPGA+AI大算力边缘计算盒子:隧道和矿井绘图设备
RockMass 正在努力打入采矿业和隧道工程利基市场。 这家位于多伦多的初创公司正在利用 NVIDIA AI 开发一款绘图平台,帮助工程师评估矿井和施工中的隧道稳定性。 目前,作为安全预防措施,地质学家和工程师会站在离岩石五米远的地方࿰…...
MySQL物理备份
目录 备份策略 全量备份 (Full Backup) 增量备份 (Incremental Backup) 差异备份 (Differential Backup) 使用 Percona XtraBackup 全量备份 步骤 1:全量备份 步骤 2:备份后处理(应用日志) 步骤 3:恢复备份 验…...
AWT常用组件
AWT中常用组件 前言一、基本组件组件名标签(Label类)Label类的构造方法注意要点 按钮(Button)Button的构造方法注意要点 文本框(TextField)TextField类的构造方法注意要点 文本域(TextArea)TextArea 的构造方法参数scrollbars的静态常量值 复选框&#x…...
CorelDRAW2024破解激活码序列号一步到位
亲们,今天给大家种草一个神奇的软件——CorelDRAW破解2024最新版!🎨这是一款专业级的矢量图形设计软件,无论你是平面设计师、插画师还是设计师,都能在这个软件中找到你需要的工具和功能。✨ 让我来给大家介绍一下这款软…...
Webpack前端打包工具详解
目录 Webpack前端打包工具详解一、Webpack 的作用二、Webpack 的安装和基本使用1. 安装 Webpack2. 创建 Webpack 配置文件3. 运行 Webpack 三、Webpack 核心概念1. 入口(Entry)2. 输出(Output)3. 加载器(Loaders&#…...
计网总结☞网络层
.................................................. 思维导图 ........................................................... 【Wan口和Lan口】 WAN口(Wide Area Network port): 1)用于连接外部网络,如互联…...
【全开源】云调查考试问卷系统(FastAdmin+ThinkPHP+Uniapp)
便捷、高效的在线调研与考试新选择 云调查考试问卷是一款基于FastAdminThinkPHPUniapp开发的问卷调查考试软件,可以自由让每一个用户自由发起调查问卷、考试问卷。发布的问卷允许控制问卷的搜集、回答等各个环节的设置,同时支持系统模板问卷ÿ…...
网络安全难学吗?2024该怎么系统学习网络安全?
学习网络安全需要循序渐进,由浅入深。很多人对网络安全进行了解以后,就打算开始学习网络安全,但是又不知道怎么去系统的学习。 网络安全本身的知识不难,但需要学习的内容有很多,其中包括Linux、数据库、渗透测试、等保…...
2 程序的灵魂—算法-2.4 怎样表示一个算法-2.4.6 用计算机语言表示算法
我们的任务是用计算机解题,就是用计算机实现算法; 用计算机语言表示算法必须严格遵循所用语言的语法规则。 【例 2.20】求 12345 用 C 语言表示。 main() {int i,t; t1; i2; while(i<5) {tt*i; ii1; } printf(“%d”,t); } 【例 2.21】求级数的…...
重生之我要精通JAVA--第八周笔记
文章目录 多线程线程的状态线程池自定义线程池最大并行数多线程小练习 网络编程BS架构优缺点CS架构优缺点三要素IP特殊IP常用的CMD命令 InetAddress类端口号协议UDP协议(重点)UDP三种通信方式 TCP协议(重点)三次握手四次挥手 反射…...
素材网站开发/电脑系统优化软件排行榜
1.LK<(设备接入&管理) 固件升级全新改版固件升级全新改版,固件和产品关联,并支持固件版本统计。 之前固件升级无法查看固件版本分布,数据不透明,会给用户造成困扰,本次进行了全新改版!固件都已根…...
创建网站哪个好/新闻20条摘抄大全
一,什么是乐观同步 乐观同步是在取出一个数据A的时候,会携带一个取出时的版本信息,比如:1,而如果在操作的时候,有另外一个操作B把存储在Redis中的数据修改了,那个redis中的数据版本就会加1&…...
wordpress网站合并/优化大师下载
配置好了conda环境,想要继续打开该环境时,出现服务器出问题 问题描述: jupyter notebook打开显示500 : Internal Server Error 解决方法: 在CMD中直接输入: pip install --upgrade --user nbconvert 解决历程&…...
搜索引擎网站推广如何优化/十大网站平台
一、环境安装测试 1、创建环境conda create -n yolo python3.7conda activate yolo2、安装pytorchconda install pytorch torchvision cudatoolkit11.3 -c pytorch11.3为cuda版本号3、克隆yolov5git clone https://github.com/WongKinYiu/yolov7 # clonecd yolov7pip install…...
龙岩网站建设/h5网站制作平台
1前言回弹法检测混凝土质量是非破损检测硬化混凝土抗压强度的一种最常用的方法,在工程建设中成为质量检测、质量监督和质量控制的重要方法。但在实际应用中发现,按照规范JGJ/T23-2011《回弹法检测混凝土抗压强度技术规范》(以下简称《规范》)…...
石家庄哪里有网站推广/美国搜索引擎排名
三角形面积 时间限制:3000 ms | 内存限制:65535 KB 难度:2描述给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积输入每行是一组测试数据,有6个整数x1,y1,x2,y2,x3,y3分别表示三个点的…...