<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; 必备技能</title>
	<atom:link href="https://www.phppan.com/tag/%e5%bf%85%e5%a4%87%e6%8a%80%e8%83%bd/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 25 Apr 2026 00:56:17 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>研发管理之基于代码的研发效能度量</title>
		<link>https://www.phppan.com/2023/12/code-based-rd-efficiency-measurement-for-rd-management/</link>
		<comments>https://www.phppan.com/2023/12/code-based-rd-efficiency-measurement-for-rd-management/#comments</comments>
		<pubDate>Sat, 16 Dec 2023 13:59:29 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[架构和远方]]></category>
		<category><![CDATA[必备技能]]></category>
		<category><![CDATA[研发效能]]></category>
		<category><![CDATA[研发管理]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=2114</guid>
		<description><![CDATA[在研发管理中，如何准确评估研发人员的效能一直以来都是一个挑战。传统的评估方式大多依赖于观察软性技能的表现，如问 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="color: #000000;" data-tool="mdnice编辑器">在研发管理中，如何准确评估研发人员的效能一直以来都是一个挑战。传统的评估方式大多依赖于观察软性技能的表现，如问题的跟进实时性、反馈的有效性、推动事情的能力，以及解决技术问题的能力。然而，对于研发人员而言，他们的代码质量和效率往往是最直接、最硬性的评价标准。而代码很多时候是看不到的，特别是当团队规模到达一定数量的时候。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">代码的质量和开发效率是研发同学工作的核心。好的代码不仅要能完成预设的任务，也要易于理解、修改和测试，以便其他开发者在未来能够维护和改进。代码的质量和开发效率可以直接反映开发人员的技术能力和专业知识。因此对于一个研发管理者来说，要想掌控一个团队的情况，从代码出发，从代码量和代码质量来度量是一个不可或缺的角度。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">为何要度量代码？</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">代码是软件产品的基础，深入理解代码可以帮助我们更好地了解产品的健康状况、性能状况和维护情况。更重要的是，通过深入分析代码，我们可以发现代码中可能存在的问题和改进点，以便提前发现并解决问题，降低项目风险。基于代码的研发效能度量为我们提供了一个量化、可度量的评估标准，从而使我们能够更科学、更有效地管理和优化研发过程和研发分工。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">基于代码的度量是什么？</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">基于代码的研发效能度量是一种通过对代码及代码提交进行深入分析和理解，从中洞察出可能存在的问题和改进点，以提高研发效率和产品质量的方法。这涉及到代码质量分析、代码性能分析、代码测试分析、代码维护性分析以及技术债务分析等多个方面。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">从实际落地来说，基于代码的研发效能度量通常涉及到以下几个方面：</p>
<ol class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">代码质量</strong>：这是衡量代码健康状况的重要指标。</p>
</section>
<ul class="list-paddingleft-1">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">代码复杂度</strong>：例如，使用圈复杂度（Cyclomatic Complexity）或 Halstead 复杂度（Halstead Complexity）度量代码的逻辑复杂度。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">代码规范性</strong>：如代码是否遵循了 PEP 8（Python编程规范）或其他语言的编程规范。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">代码重复率</strong>：如通过工具（如 SonarQube 或 PMD ）检测代码的重复部分，计算代码重复率。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">用例覆盖率</strong>：如使用工具（如 JUnit 和 Cobertura ）运行单元测试和集成测试，计算用例覆盖率。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">注释覆盖率</strong>：SonarQube 等工具可以分析出代码覆盖度</section>
</li>
</ul>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">开发活动</strong>：这是了解开发团队工作模式的重要度量。</p>
</section>
<ul class="list-paddingleft-1">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">提交频率</strong>：如通过 Github 或其他版本控制系统统计每个开发人员的提交频率。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">代码修改频率</strong>：如统计某段代码或某个文件被修改的频率，以理解代码的稳定性。</section>
</li>
</ul>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">问题和缺陷</strong>：这是评估代码质量问题和风险的关键度量。</p>
</section>
<ul class="list-paddingleft-1">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">缺陷密度</strong>：例如，通过错误跟踪系统（如Jira或Bugzilla）统计缺陷数量，然后除以代码行数，计算缺陷密度。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">问题解决时间</strong>：例如，统计从发现问题到解决问题的平均时间，了解团队的响应效率。</section>
</li>
</ul>
</li>
</ol>
<p style="color: #000000;" data-tool="mdnice编辑器">以上就是基于代码的研发效能洞察的主要组成部分。这些度量有助于我们理解代码的健康状况、开发过程的效率，以及代码质量的问题和风险。需要注意的是，这些度量并不能全面反映研发效能，还需要结合具体的项目情况和团队情况进行分析。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">基于代码的研发效能度量如何实施</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">将以上的这些组成部分、时间、人、项目、团队这些结合起来就是一个基本完整的基于代码的研发效能分析系统。</strong></p>
<p style="color: #000000;" data-tool="mdnice编辑器">做基于代码的研发效能洞察无非是回答如下的 2 类问题：</p>
<ol class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">做了什么，做了多少</section>
<ul class="list-paddingleft-1">
<li>
<section style="color: #010101;">你的团队做了什么，做了多少</section>
</li>
<li>
<section style="color: #010101;">你的团队成员做了什么，做了多少</section>
</li>
<li>
<section style="color: #010101;">每个成员在团队中的水平处于什么样的水平，有没有特别突出的（多或少）</section>
</li>
</ul>
</li>
<li>
<section style="color: #010101;">做得怎么样</section>
<ul class="list-paddingleft-1">
<li>
<section style="color: #010101;">你的团队的代码质量如何</section>
</li>
<li>
<section style="color: #010101;">有没有比较突出（好或坏）的成员</section>
</li>
<li>
<section style="color: #010101;">有没有共性的质量问题</section>
</li>
</ul>
</li>
</ol>
<p style="color: #000000;" data-tool="mdnice编辑器">要想回答这些问题，基于代码层面，通过代码度量研发的研发效能，影响力产出，代码质量等，拿到客观的数据度量到人、团队、项目。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">我们做代码的洞察实施简化后可以有 4 步：</p>
<p style="color: #000000;" data-tool="mdnice编辑器">1.<strong style="color: #0e88eb;">引入工具或系统</strong>：将代码这个盒子打开，看到度量后的数据。这里当然会有一个问题分析、行业方案对比的过程。</p>
<ol class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">机制化跟进</strong>：需要有一个组织来承接事项，无组织即无成果。结合管理人员的机制化跟进，根据度量的数据和系统的指标，以某个时间间隔来做洞察，发现问题。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">整体洞察</strong>：从下往上，形成整体效能的洞察，根据发现的问题，明确代码产出的问题点和能衡量状态的指标。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">复盘</strong>：以 3 个月以一个区间来盘点指标和问题，清晰团队/项目的变化。</section>
</li>
</ol>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">基于代码的研发效能度量的优势与挑战</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">当我们引入某些工具或系统来做了基于代码的度量或洞察后，可以得到如下的一些东西：</p>
<ol class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">全面的代码质量管理</strong>：通常能够全面地对代码质量进行管理，包括代码质量分析、代码审查等。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">技术债务管理</strong>：通常提供了一种有效的方式来管理技术债务。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">提高团队效率</strong>：通过对代码的持续分析和审查，可以帮助团队提高效率，减少错误和问题。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">提供具有洞察力的数据和报告</strong>：通常能够提供具有洞察力的数据和报告，帮助团队更好地理解代码质量和研发效能。</section>
</li>
</ol>
<p style="color: #000000;" data-tool="mdnice编辑器">以上是一些好的方面，但是也有一些不好的点：</p>
<ol class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">需要一定的学习和适应</strong>：对于新的系统和工具，团队成员可能需要一段时间来学习和适应。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">可能存在一定的成本</strong>：这类系统通常需要付费使用，这可能会增加公司的开支。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">可能与现有的流程和工具不兼容</strong>：如果团队已经有了自己的流程和工具，那么使用新的系统可能会导致一些兼容性问题。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">安全或隐私问题</strong>：如果系统是基于云的服务，这意味着代码需要上传到外部服务器进行分析。这可能会引发一些安全和隐私问题。一般我们选择通过私有化部署来解决，但是成本会更高一些。</section>
</li>
</ol>
<p style="color: #000000;" data-tool="mdnice编辑器">最后，随着时间的推移，可能会出现「<strong style="color: #0e88eb;">面向指标编程</strong>」的情况。这通常发生在过度重视某些度量标准并以此作为主要驱动开发的团队或组织中。这些度量标准可能包括代码行数、问题数、提交频率、测试覆盖率等。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">这样可能会带来一些问题：</p>
<ol class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">优化错误的指标：</strong> 有时，开发同学可能会在不影响或甚至损害总体产品质量的情况下优化这些指标。比如，如果过度关注代码行数，开发者可能会写出冗长和复杂的代码来增加代码行数。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">忽视质量和实用性：</strong> 过度关注指标可能会导致开发者忽视代码质量、可读性、可维护性和实用性。例如，开发者可能编写无实际价值的测试，只是为了提高测试覆盖率。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">鼓励短视行为：</strong> 如果某些指标被用作评估性能或提升的基准，开发者可能会采取短期行为来满足这些指标，而忽视了长期的技术健康状况。</section>
</li>
</ol>
<p style="color: #000000;" data-tool="mdnice编辑器">为避免「面向指标编程」，作为团队的管理者应该谨慎选择和使用度量标准。应该选择那些能反映出代码质量、可维护性和实用性的指标，并且要注意平衡多个指标，避免过度优化某一个指标。同时，<strong style="color: #0e88eb;">要培养一个开放的团队文化，鼓励开发同学关注长期的技术健康状况，而不仅仅是满足短期的指标。</strong></p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2023/12/code-based-rd-efficiency-measurement-for-rd-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>研发管理之生产环境的变更管理</title>
		<link>https://www.phppan.com/2023/12/change-management-of-production-environment-in-rd-management/</link>
		<comments>https://www.phppan.com/2023/12/change-management-of-production-environment-in-rd-management/#comments</comments>
		<pubDate>Sat, 16 Dec 2023 13:58:14 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[架构和远方]]></category>
		<category><![CDATA[必备技能]]></category>
		<category><![CDATA[研发管理]]></category>
		<category><![CDATA[稳定性]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=2112</guid>
		<description><![CDATA[2017 年，Amazon S3 服务在美国东部区域发生了大规模的故障，影响了许多依赖于 S3 的服务和应用。 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="color: #000000;" data-tool="mdnice编辑器">2017 年，Amazon S3 服务在美国东部区域发生了大规模的故障，影响了许多依赖于 S3 的服务和应用。这次故障的根本原因是维护人员在执行一个操作时，错误地将更多的服务器脱机，这超过了系统设计的冗余容量，导致了该区域S3的部分子系统开始备份，进一步扩大了故障的影响。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">2018 年 10 月 31 日 GitHub 通过官方博客发布了 2018 年 10 月 21 日「挂掉」的事件分析。GitHub 指出此次事件发生的原因是在 10 月 21 日 22:52UTC 进行日常维护——更换发生故障的 100G 光学设备时导致美国东海岸网络中心与美国东海岸数据中心之间的连接断开。更具体地 GitHub 分析，虽然两地的连接在 43 秒内恢复，但这次短暂的中断引发了一系列事件，这才导致了长达 24 小时 11 分钟的服务降级。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">2020 年 7 月，Cloudflare 的 DNS 服务遭受了大规模的中断，影响了许多依赖其服务的网站。该故障的原因是 Cloudflare 的路由器中的一个错误配置。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">以上是在网上搜索各大平台的故障描述，可以看到这些故障都是由于生产环境的变更导致的，有些是网络设备变更，有些是配置变更，有些是维护人员在线上执行了某个操作…… 如此种种。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">这些问题最终都是开发人员通过系统化的建设，一个坑一个坑的填完了，但是当我们带着一个团队急速前进时，可能来不及做这些系统化的建设，此时通过流程对生产环境的变更进行管理，快速解决或规避一些问题以控制线上故障的出现。<strong style="color: #0e88eb;"><span class="wx_text_underline wx_text_underline_private">流程能保证的是我们做事的下限</span></strong><span class="wx_text_underline wx_text_underline_private">。</span></p>
<p style="color: #000000;" data-tool="mdnice编辑器">在做生产环境变更管理流程之前一定要明晰生产环境的概念和范围，在团队内达成共识，然后再去做流程，以规避因为对生产环境的概念和范围不一致，导致的误解和乌龙。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">1 生产环境的概念</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">生产环境，也称为「产品环境」或「线上环境」，是指实际运行并对外提供服务的环境。这个环境中的软件版本、配置和数据都应该是最新的、经过充分测试的，以保证系统的稳定性和性能。线上环境需要提供24小时不间断的服务。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">一个应用或环境是否属于线上环境，主要取决于它是否直接对外提供服务</strong>。例如，如果一个应用接收并处理来自最终用户的请求，那么它就是线上环境的一部分。同样，如果一个环境中的数据被用于生产服务，那么这个环境也应该被视为线上环境。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">通常，生产环境包括以下 4 个部分：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">硬件资源</strong>：例如服务器、网络设备、云服务中的硬件部分等；</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">软件资源</strong>：包括操作系统、数据库、中间件、云服务中的软件部分等；</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">应用程序</strong>：实际运行的业务代码和与之相关联的部分，如 CI/CD 工具；</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">数据</strong>：实际的用户数据和业务数据。</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">定义了生产环境，从生产环境衍生出生产环境的变更。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">2 生产环境变更的概念和分类</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">生产环境的变更是指在生产环境中对任何一部分进行的修改，包括应用程序的更新、配置的修改、硬件设施的更换等。而线上故障大多来源于生产环境的变更，对生产环境的变更进行管理和控制，在较大程度上可以减少对系统稳定性产生影响。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">生产环境的变更从其组成出发，再加上外部流量，可以分为 5 类：</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">2.1 硬件资源变更</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">硬件资源变更主要包含所有与物理硬件和云服务硬件配置相关的更换、升级或维护。</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">硬件规格调整</strong>：例如，升级处理器（CPU）、扩充内存（RAM）、更换硬盘等。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">网络设备更新</strong>：包括替换路由器、交换机或进行固件更新等。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">存储设备变动</strong>：磁盘扩容、存储设备更换等场景会包含在内。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">云服务硬件调整</strong>：如云计算服务中服务器规格的调整、增减虚拟机实例、增减 POD 数、网络设备变更等。</section>
</li>
</ul>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">2.2 软件配置变更</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">软件配置变更涵盖了所有与操作系统、数据库、中间件以及云服务软件设置的修改。</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">操作系统参数调整</strong>：比如，优化操作系统性能通过调整系统参数等。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">数据库设置变动</strong>：例如，数据库参数调整或修改索引，导致数据库负载提升甚至锁表导致的无法读写等线上事故。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">中间件配置更新</strong>：如修改消息队列的设置，调整缓存策略导致缓存穿越或者缓存雪崩等线上问题时有发生。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">云服务软件配置调整</strong>：包括了云服务的安全规则更新、网络配置变动等。</section>
</li>
</ul>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">2.3 应用程序变更</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">应用程序变更主要包含了所有与业务代码和将业务代码发布到生产环境的 DevOps 工具的更改。</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">代码变更</strong>：代码变更是我们最最常见的变更类型，主要是通过修改代码改变应用程序并通过发布系统发布到生产环境。这也是我们变更管理中风险最大的地方，因为变更的人，变更的位置和逻辑等都是不确定的。除了正常的发布变更，应用的回滚也是应用变更的回滚，因为其改动了线上的应用。实际中，代码变更在逻辑上包括了修复 bug、优化性能、增加新功能等，都需要对应用程序代码进行更新。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">配置变更</strong>：指应用系统的配置变更，一般是通过配置系统来变更，触发线上应用的热更新或滚动，配置如果是写死在代码中，会变为代码变更。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">依赖库更新</strong>：实际业务中需要对应用程序所依赖的库或框架进行更新，有些更新可能需要改代码，或者代码本身已经是这么个逻辑，在构建的时候就会带出去。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">DevOps 工具变更</strong>：例如，升级工具版本，或者对某些功能进行调整。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">DevOps 工具配置变更</strong>：如发布脚本中对于 dev 或 prod 环境的配置修改等等，都是高风险操作，线上有着血淋淋的故障。</section>
</li>
</ul>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">2.4 数据变更</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">数据变更很少被人当作变更处理，因为很多时候就是正常的业务操作，如管理后台的批量操作这些，但是这些批量操作如果发生在高峰时期，可能会对线上业务带来较大的影响，轻则速度变慢，重则线上事故。数据变更可以分为线上数据的清理、迁移、更新等操作。</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">数据清理</strong>：如定期删除过期数据，清理无效数据节省成本等等，基于不同的目的，将数据清除，除了可能会影响性能，如果清理错了，将会导致用户丢失，以至用户资产的损坏，这将会是很大的线上事故。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">数据迁移</strong>：如将数据从一个数据库迁移到另一个数据库，或者因为业务升级，数据需要从一种逻辑迁移到另一种逻辑，除了负载压力，更多的可能是数据错乱或者数据丢失，这两种情况都会引发用户投诉。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">数据更新</strong>：如前面说的管理后台批量更新，或者上线新模块在已有的数据库上初始化数据等等，这种最多的情况是其引发的 DB/ES 等存储类中间件的高负载导致服务的异常或引发线上事故。</section>
</li>
</ul>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">2.5 流量变更</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">流量变更和上面四个类别不同，其是从外部来看的，主要包含了流量变化的情况。这里不考虑攻击类的流量。流量一般是带来高负载，或者由高负载引发的链路异常或雪崩，从而导致整体服务异常或线上事故。</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">负载调整</strong>：如对调整负载均衡策略，更改流量路由等由于考虑不周引发某些节点过热或流量过大，引发级联反应，从而出现异常或事故。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">后台投放或大型促销活动</strong>：如没有提前通知的后台投放或大型促销活动、特殊事件导致的流量激增，可能需要进行负载调整或资源扩容等，如果某些链路存在容量上限，或者达到扩容的上限，就会引起线上异常或事故。</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">以上 5 种类型画成简单的脑图，如下：</p>
<p style="color: #000000;"><img class="rich_pages wxw-img" src="https://mmbiz.qpic.cn/sz_mmbiz_png/suE0Ye6UeMz2m4w5J3rgZHdl8Owice3kkO8yKDyup2f4he0D0TbeOdLYQgwibYXCmUicd7nf3CUu6OLicpCkhoRDhw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" crossorigin="anonymous" data-galleryid="" data-ratio="1.3833333333333333" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/suE0Ye6UeMz2m4w5J3rgZHdl8Owice3kkO8yKDyup2f4he0D0TbeOdLYQgwibYXCmUicd7nf3CUu6OLicpCkhoRDhw/640?wx_fmt=png" data-type="png" data-w="1080" data-index="0" data-fail="0" /></p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">3 变更管理</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">变更管理是指以可控的方式对线上的服务、配置或基础设施进行变更，从而减少变更对业务和服务质量的影响，快速处理变更可能带来的问题，提升系统的稳定性。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">变更管理，咱们从组织和流程机制两个方面来看。</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">3.1 组织</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">一个事情要想有力的执行下去，一定是有一个组织来保障事情的整体节奏和推进。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">从组织的角度，整个变更管理的组织成员角色可以分为以下几种：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">变更管理主导者</strong>：一般来说，这个角色通常由技术团队的高级管理者来担任，并且这个事情它本身是一个从上向下的事情，需要更上层的负责人来推进事项，一般是 CTO 或 VP，或质量的负责人。他们需要确保变更管理策略和流程的成功实施，对整个变更管理过程负责，并需要对所有的变更决策拥有最后的决定权。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">变更管理委员会</strong>：这是一个跨部门的团队，包括来自业务、开发、运维、质量保证等部门的代表。他们的任务是评审即将进行的变更，评估其对业务的影响，以及是否符合公司的战略目标。他们还负责改进变更管理流程，并对变更管理的效果进行监督和评估。在实际的实施过程中可能没有正式的名称叫委员会，可能叫 XXX 质量小组，或者就是某个研发中心的管理团队兼任。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">变更经理</strong>：这个角色负责确保变更管理流程的日常运行，是实际的变更控制推进者，他们需要协调变更的执行，确保所有的变更都通过了必要的评审，已经准备好了回滚计划，并且变更后的效果已经得到了验证。在实际的实施过程中，变更经理大概率是某个 Leader 或者质量的负责人，或者 PM。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">变更执行人</strong>：这个角色负责协调变更的具体实施，例如安排变更的时间，通知相关人员，收集反馈，等等，一般这种变更由一线的开发，SRE 来做，也有大一些的公司有专门的职位。</p>
</section>
</li>
</ul>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">3.2 流程机制</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">变更管理有一个理想状态的标准流程，其大概如下：</p>
<ol class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">变更申请</strong>：在我们的流程中可能是创建发布记录，或者申请紧急发布</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">变更评审</strong>：变更评审主要是检查变更过程是否完备，以降低变更的风险，其包括如下内容：</section>
<ol class="list-paddingleft-1">
<li>
<section style="color: #010101;">就绪分析：材料是否完备，人员、设备、软件、网络是否就绪，测试是否达到上线要求等。</section>
</li>
<li>
<section style="color: #010101;">风险分析：架构、性能、业务、合规等方面的风险评估，变更内容是否属于需求范围，变更是否可控。</section>
</li>
<li>
<section style="color: #010101;">重要程度：变更属于一般、重要、紧急、标准哪一种。</section>
</li>
<li>
<section style="color: #010101;">变更审查：内容是否满足业务需求，内容是否通过测试，测试是否全面、有效。</section>
</li>
<li>
<section style="color: #010101;">应急管理：变更步骤、应急方案、回滚方案、应急预案是否完备。</section>
</li>
<li>
<section style="color: #010101;">变更实施：变更计划时间如何安排，发布及回退操作步骤是否完备，自动化步骤情况。</section>
</li>
<li>
<section style="color: #010101;">变更验证：变更涉及的业务、技术验证方法与时间安排。</section>
</li>
</ol>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">变更审批</strong>：相关负责人对于变更评审的结果进行确认，并审批通过。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">变更执行</strong></section>
<ol class="list-paddingleft-1">
<li>
<section style="color: #010101;">根据发布计划执行发布操作，一般应该有一个灰度的过程；</section>
</li>
<li>
<section style="color: #010101;">验证线上功能并回归主流程；</section>
</li>
<li>
<section style="color: #010101;">持续灰度，观察用户直到灰度完成。</section>
</li>
</ol>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">变更验收</strong></section>
<ol class="list-paddingleft-1">
<li>
<section style="color: #010101;">对发布的功能进行验收，对于影响范围内的功能进行验收，对业务主流程进行回归验收；</section>
</li>
<li>
<section style="color: #010101;">留守，并观察日志、监控服务负载等，这个操作是为了及时发现验收检查漏掉的问题，或者及时处理隐藏的问题，以减少变更后产生的问题对线上业务的影响。</section>
</li>
</ol>
</li>
</ol>
<p style="color: #000000;" data-tool="mdnice编辑器">我们做这个流程是形式上的安慰，还是僵化的惯性，还是能真正地解决问题，是我们在做这个流程以及执行这个流程中需要着重思考的问题。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">在变更前，即我们变更线上环境前需要自己做 Code Review，以及交叉的检查，以尽量减少问题流转到后面的操作中，节省问题的处理成本。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">在标准流程之外，另外还有两个特别重要的点，一个是周知，一个是盘点。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">周知在形式上可以是邮件、群通知、群消息，通过这些方式，将研发自己做的前面所定义的线上变更周知给相关方：「我们做了 XXX 操作，可能会影响 XXX ，你们看下对你们自己有没有影响，如果有相关告警可以找我。」</p>
<p style="color: #000000;" data-tool="mdnice编辑器">变更虽然有流程，但是流程保证的是过程，对于过程中的问题通过变更盘点的方式，阶段性回顾问题和成果，在变更委员会中达成共识并继续迭代。在每次迭代的时候我们可以问自己如下的一些问题：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">与上次回顾相比，变更对线上的影响有更严重吗？有影响到稳定性吗？</section>
</li>
<li>
<section style="color: #010101;">变更流程是否有什么问题，是否需要专项来解决？是否应该解决？</section>
</li>
<li>
<section style="color: #010101;">上次回顾安排的事项落实了吗，对应的情况如何，是否有更新到流程或系统中？</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">以上的回顾操作我们建议以某个管理系统来承载，并且这个管理系统是带有通知等功能，以更好的将变更相关的信息周知出去。当然，也可能直接共享文档+群通知来搞。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">4 小结</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">上面的变更管理只是流程方面的，对于实际中变更管理最好是能在类似于 DevOps 系统中的落地，最少也是在项目管理或流程系统中落地。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">生产环境的变更管理是一项复杂而重要的任务。通过对生产环境的良好理解，结合有效的组织、流程和系统工具，我们可以实现对生产环境变更的有效管理，保证业务的稳定运行，提升用户的使用体验，同时也提升了我们自身的运维效率和质量。这也是我们做研发管理必须要完成的任务之一。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2023/12/change-management-of-production-environment-in-rd-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>技术管理必备技能之管理好系统性风险</title>
		<link>https://www.phppan.com/2023/12/essential-skills-for-technical-management-manage-systemic-risks/</link>
		<comments>https://www.phppan.com/2023/12/essential-skills-for-technical-management-manage-systemic-risks/#comments</comments>
		<pubDate>Sat, 16 Dec 2023 13:54:59 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[架构和远方]]></category>
		<category><![CDATA[必备技能]]></category>
		<category><![CDATA[技术管理]]></category>
		<category><![CDATA[系统性风险]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=2108</guid>
		<description><![CDATA[我们在平常工作中经常会听到有人说系统性风险，但系统性风险到底是个啥？ 1 系统性风险是什么 1.1 定义 「系 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="color: #000000;" data-tool="mdnice编辑器">我们在平常工作中经常会听到有人说系统性风险，但系统性风险到底是个啥？</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">1 系统性风险是什么</span></h1>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">1.1 定义</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">「系统性风险」是一个经济术语，主要指的是一种可能导致整个金融系统或市场瘫痪的风险或概率。它是从系统性风险的整体性出发，而不是单一机构或者单一行业的危机。这通常是由于金融体系中一个重要组成部分的失败，例如一个大银行或一系列银行的破产，这可能引发一种连锁反应，影响整个系统。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">当突发性事件导致金融机构或市场失灵时，资金无法在市场中有效输送和配置，从而引起整个市场的崩溃。系统性风险不仅仅是经济价值损失，还会对实体经济造成严重影响，并导致大部分金融体系的信心丧失。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">如 2008 年的全球金融危机。在这个危机中，许多大型金融机构由于负债过重和资产质量下降而陷入困境，这引发了对全球金融系统稳定性的广泛担忧。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">系统性风险是监管机构、政策制定者和经济学家关注的主要问题，因为如果这种风险实现，可能会导致重大的经济损失和社会动荡。因此，他们会尝试制定和执行各种政策和法规，以减少系统性风险的可能性。</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">1.2 系统性风险和非系统性风险的差别</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">系统性风险作为一种具有更大影响面的风险，和非系统性风险有以下几个方面的区别：</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">1. 影响范围</strong>：系统性风险具有广泛的影响范围，不仅仅局限于特定个体或组织，而是可能波及整个系统、市场或行业。非系统性风险则相对较局部化，通常只对特定个体、组织或项目产生影响。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">2. 相互关联性</strong>：系统性风险与系统中各个组成部分相互关联，其中一个部分的风险可能会<strong style="color: #0e88eb;">传播、扩大或影响其他部分</strong>。非系统性风险通常是单个因素或事件的结果，并不涉及系统的相互依赖关系。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">3. 复杂性和不确定性</strong>：系统性风险往往更加复杂和不确定，因为它们涉及到多个变量、因素和相互作用。非系统性风险可能更加可控和可预测，因为它们通常涉及特定事件或条件。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">4. 长期影响</strong>：系统性风险可能具有长期影响，并可能导致持续的连锁反应和不良后果。非系统性风险通常具有较短期的影响，并且其影响通常更容易限定和控制。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">5. 解决方法</strong>：由于系统性风险的复杂性和广泛影响，解决它们通常需要跨部门、跨组织或跨行业的合作和综合性措施。非系统性风险通常可以通过特定个体或组织的行动来解决。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">系统性风险与非系统性风险在影响范围、相互关联性、复杂性和不确定性、长期影响以及解决方法等方面存在明显的区别。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">2 技术上的系统性风险</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">类比经济上的系统性风险，对于一家企业的技术负责人来说，技术上的系统性风险也是一个需要重点关注的点。</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">2.1 定义</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">在技术上，系统性风险指的是一个技术系统或者一个技术生态系统中，某个关键组件或者某些关键组件出现故障、漏洞、安全问题等，导致整个系统或者生态系统无法正常运行，进而引发连锁反应和影响。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">例如，在云计算生态系统中，某个云服务提供商的故障可能会影响到众多企业和用户的业务运营；在物联网领域，某个智能设备的漏洞可能会导致整个物联网网络遭受攻击和瘫痪。因此，在技术领域中，识别和防范系统性风险也是非常重要的。</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">2.2 系统性风险和非系统性风险的不同</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">和经济上的系统性风险一样，技术上的系统性风险和非系统性风险也有 5 个不同点：</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">1. 影响范围和规模</strong>：系统性风险通常具有广泛的影响范围和规模，涉及整个技术系统或架构。它可能涉及多个组件、子系统或关键基础设施，甚至可能跨越多个应用程序或服务。非系统性风险更倾向于局部范围，通常仅影响特定的组件、功能或子系统。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">2. 相互关联和依赖</strong>：系统性风险涉及到技术系统中各个组件和环节之间的相互关联和依赖关系。它们可能因为一个组件或环节的故障或问题而影响其他组件或环节的正常运行。非系统性风险更倾向于独立存在，其影响相对较为局限，不会对其他组件或环节造成波及效应。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">3. 复杂性和不确定性</strong>：系统性风险通常更加复杂和不确定，因为它们涉及到多个技术组件、系统交互、数据流和相关的外部因素。这使得系统性风险的评估、预测和解决变得更加困难。非系统性风险通常更容易辨识、评估和控制，因为其范围和影响相对较小。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">4. 长期影响和连锁反应</strong>：系统性风险可能导致长期的影响和连锁反应，其中一个问题可能触发多个级联故障或影响多个关键业务流程。非系统性风险的影响通常更为短期和局限，不会引起大规模的系统级问题。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">5. 解决方法和复杂度</strong>：由于系统性风险的复杂性和广泛影响，解决它们通常需要跨部门、跨团队的协作，涉及多个技术专长和领域的知识。这可能需要综合性的技术改进、架构调整或系统重构。非系统性风险通常可以通过单个组件或功能的修复或改进来解决，其处理相对较为简单和局部化。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">3 系统性风险的传播</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">在技术系统中，系统性风险通过多种方式传播，包括以下几种：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">级联传播</strong>：级联传播是指一个组件的故障导致其他相关组件的故障，从而在整个系统中形成一种连锁反应。这种传播方式可能导致整个系统的瘫痪，影响业务的正常运行。例如，在一个分布式计算环境中，如果某个关键任务执行节点发生故障，可能导致其他依赖于该节点的任务无法正常执行，从而引发其他节点的过载或故障。这种风险传播会在整个分布式系统内形成级联效应，可能导致整个系统瘫痪。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">传染传播</strong>：传染传播是指一个系统的风险通过某种途径传播给其他系统，从而导致多个系统受到相同类型风险的影响。例如，WannaCry 勒索病毒，它通过网络传播，利用 Windows 系统的一个漏洞进行攻击。当某个系统被感染后，病毒会自动搜索其他具有相同漏洞的系统，并尝试感染它们。这种风险传播方式导致了全球范围内大量系统受到勒索病毒的影响。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">共同暴露</strong>：共同暴露是指多个系统由于共享相同的风险因素，而同时受到该风险因素的影响。例如，多个在线服务都依赖于一个第三方身份验证服务。如果这个第三方身份验证服务出现故障或者安全漏洞，那么所有依赖它的在线服务都将面临安全风险或者无法正常运行，因为它们共同暴露在同一个风险因素下。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">放大效应</strong>：放大效应是指一个较小的初始风险经过多次传播和叠加，最终导致整个系统面临较大的风险。例如，在社交网络中，一个虚假信息可能经过多次转发和传播，形成恶性舆论，对整个社会产生较大的负面影响。</p>
</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">在技术系统中，了解这些传播方式和机制对于有效管理技术风险至关重要。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">4 系统性风险的来源</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">系统性风险的由来可以追溯到技术系统的复杂性和相互依赖性。当一个技术系统由多个组件、流程和环节组成时，它们之间存在着相互依赖和相互作用。这种相互依赖性使得一个组件或环节的故障或问题可能会影响整个系统的运行和稳定性。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">以下是一些常见的系统性风险的来源：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">复杂性和交互作用</strong>：技术系统的复杂性和各组件之间的交互作用可能导致系统性风险的出现。当系统变得越来越复杂，组件之间的相互依赖性增加，可能出现不可预见的问题和故障。例如，一个庞大的分布式系统可能由多个模块和子系统组成，彼此之间的相互作用可能导致系统范围的故障，如性能下降或数据不一致。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">外部环境因素</strong>：外部环境因素也是技术系统性风险的重要来源。例如，技术系统可能受到恶劣天气、自然灾害（如山洪地震等导致光纤断了）、供应链中断或恶意攻击等外部因素的影响。这些因素可能导致系统中断、数据丢失、安全漏洞暴露等问题。例如，一家电子商务平台可能受到网络攻击，导致用户信息泄露或交易中断。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">人为错误和疏忽</strong>：技术系统性风险也可能源自人为错误和疏忽。人员的操作失误、编码错误、配置错误或安全意识薄弱等问题都可能导致系统故障或数据泄露。例如，一个开发人员可能在代码中引入漏洞，导致系统容易受到攻击。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">技术演进和更新</strong>：技术的演进和系统的更新也可能引入系统性风险。当引入新的技术、框架或库时，可能存在兼容性问题或未知的缺陷。例如，将系统从一个版本升级到另一个版本时，可能出现功能不兼容、新增的安全漏洞或数据不一致的问题等。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">依赖供应商和第三方</strong>：技术系统通常会依赖外部供应商或第三方服务。这种依赖性可能带来风险。例如，如果一个关键供应商无法按时提供所需的硬件设备，可能导致项目延期或无法正常运作。另外，如果一个 CDN 第三方服务提供商的服务出现故障，可能会影响到技术系统的正常运行。</p>
</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">以上是一些常见的技术系统性风险的来源示例。在技术管理中，了解和识别这些来源是非常重要的，以便采取相应的措施来减轻和管理系统性风险的影响。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">5 管理好系统性风险的意义</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">聊了这么多术语类的东西，看一下对于一个技术管理者来说，管理好系统性风险到底有什么用，有什么收益。这里我们从技术管理和技术团队，以及业务的角度来看。</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">5.1 技术管理上的意义</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">从技术管理和技术团队的角度来看，管理好技术上的系统性风险具有以下意义：</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">1. 保障系统的稳定性和可靠性</strong>：系统性风险管理可以帮助确保技术系统的稳定性和可靠性，减少系统故障和服务中断的可能性。这有助于降低业务中断的风险，提高技术系统的可用性和持续性，保障业务的正常运行。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">2. 提高技术投资的回报率</strong>：有效管理系统性风险可以降低技术投资的风险并提高回报率。通过规避潜在的系统性风险，可以减少因系统故障或不稳定性而造成的额外成本和资源浪费，提高技术投资的效益和投资回报。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">3. 增强技术管理者决策能力</strong>：系统性风险管理使技术管理者能够更全面地了解和评估技术系统的风险情况。这有助于他们做出明智的决策，选择合适的措施来降低风险，并确定优先级，以使资源和精力能够最大程度地应对最重要的风险。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">4. 提高团队效率</strong>：通过管理系统性风险，技术管理者可以减少系统故障和问题的发生，从而减少紧急修复和事后处理的工作量。这使团队能够更加专注于战略性的工作，提高工作效率和生产力。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">5. 增加业务可信度</strong>：有效管理系统性风险可以提高技术系统的可靠性和稳定性，增加业务的可信度。这有助于提高内部和外部利益相关者对技术部门的信任，加强与其他部门的合作和协调，为企业的可持续发展和成长奠定基础。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">6. 促进技术创新和发展</strong>：管理好系统性风险有助于为技术管理者提供稳定的技术基础，支持技术创新和发展。他们可以更好地专注于推动新技术的应用、优化现有技术架构和流程，为业务增长提供技术支持和竞争优势。</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">5.2 业务价值上的意义</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">从业务价值的角度来看，管理好技术上的系统性风险具有以下意义：</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">1. 提高效率和生产力</strong>：通过管理系统性风险，技术系统可以更加稳定和可靠地运行，减少系统故障和问题的发生，从而减少因为系统问题导致的客诉、修复、沟通等成本。这有助于提高业务的效率和生产力，节省时间和资源，并降低运营成本。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">2. 支持业务增长和扩展</strong>：有效的系统性风险管理可以为业务提供可靠的技术基础，支持业务的增长和扩展。通过降低系统故障和数据泄露的风险，技术管理者可以为业务提供稳定的平台，支持业务的创新、市场拓展和新产品的推出。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">3. 支持业务创新和竞争优势</strong>：系统性风险管理为技术团队提供稳定的技术基础，支持业务的创新和发展。通过降低系统性风险，技术团队能够更好地专注于业务创新、新产品开发和市场敏捷性，从而获得竞争优势。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">4. 提升用户体验和满意度</strong>：系统性风险管理有助于提供稳定、安全和高性能的技术系统，提升用户体验和满意度。用户倾向于选择那些能够提供稳定服务、快速响应和数据安全的产品或服务，有效的系统性风险管理可以增强用户对技术产品或服务的信任和满意度。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">5. 降低损失和风险</strong>：有效的系统性风险管理有助于降低业务面临的潜在损失和风险。通过识别和管理系统中的风险，可以减少数据泄露、安全漏洞和技术故障所带来的损失，并降低法律诉讼和声誉损害的风险。</p>
<p style="color: #000000;" data-tool="mdnice编辑器"><strong style="color: #0e88eb;">6. 提升客户信任和忠诚度</strong>：通过管理系统性风险，技术管理者可以建立客户信任和忠诚度。稳定、安全和可靠的技术系统能够增强客户对企业的信心，提高客户满意度和保持客户的长期合作关系。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">可以看到如果能管理好系统性的风险，对于技术组织，对于技术管理者，对于业务和业务价值来说，都是一件非常好的事情。从生产效率的提升，到业务稳定性，到对成本的减少以及客户成功都是极好的。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">那么如何管理系统性风险呢？</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">6 如何管理系统性风险</span></h1>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">6.1 风险模型</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">风险模型是风险管理的第一步：理解系统中已有的风险，识别、标记并对已知的风险排列优先级，最终形成一张包含了系统所有已知风险的当前状态的表格。这就是我们所说的风险模型。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">建立风险模型的过程是识别风险的过程，在这个过程中我们需要识别出系统中已有的风险，并对其进行分析，标记出优先级、梳理当前状态和历史情况。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">风险模型构建过程中需要考虑模型的作用范围，是公司级的，团队级的，项目组的，还是服务级的。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">对于一个小公司，可以是公司级的，对于大型一些的公司，可以考虑团队或项目级的。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">风险模型至少包括以下一些方面：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">严重性/可能性</strong>：高中低，先评估严重性，再评估可能性</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">风险缓和计划</strong>：可以使用的或者正在使用的用来降低该风险严重性或者可能性的风险缓和措施。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">监控</strong>：对该风险的发生是否进行了监控，如果监控了说明监控的指标，如果没有监控，说明原因，以及达成监控目标的原因，最终所有的风险应该是要监控起来的。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">状态</strong>：活跃 / 已缓和 /  正在修复 / 已解决</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">历史风险情况</strong>：该风险在历史上有没有发生过，什么时候，发生频率等</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">风险缓和计划</strong>：当我们制定风险缓和计划的时候，需要从严重性最高的项开始，缓和风险不是为了消除，而是为了降低风险的严重性和可能性。并不是每一个风险都要制订风险缓和计划。</section>
</li>
<li>
<section style="color: #010101;"><strong style="color: #0e88eb;">风险预案</strong>：当风险发生的时候，我们可以采取的措施</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">除此之外，还包括一些常规的添加时间，ID，负责人之类的</p>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">6.2 识别和评估系统性风险</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">识别系统性风险是一个关键的步骤，它需要深入分析和理解组织或项目所面临的技术环境和相关因素。以下是一些常见的技术上的系统性风险示例：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">依赖单点故障</strong>：系统中存在关键组件、设备或服务的单点故障，一旦出现故障，将导致整个系统或业务的中断。例如，网络设备的故障、云服务提供商的服务中断等。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">服务间的强弱依赖</strong>：如果系统中的服务之间存在强依赖关系，一旦其中一个服务发生故障或不可用，可能会导致整个系统的故障或性能下降。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">内部和外部/离线和在线业务的相互影响</strong>：系统中的离线和在线业务之间存在相互依赖关系，如果其中一个业务出现问题，可能会影响其他业务的正常运行。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">安全漏洞和数据泄露</strong>：系统存在安全漏洞或不当的安全措施，可能导致黑客攻击、数据泄露或信息安全问题。这可能对组织的声誉、客户信任和合规性产生严重影响。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">技术过时和不可维护</strong>：系统采用的技术或架构已过时，不再受支持或难以维护。这可能导致系统难以升级、演进和修复漏洞，增加系统故障和风险的概率。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">第三方供应商问题</strong>：系统依赖于第三方供应商提供的技术、服务或组件，但供应商出现问题，无法提供所需的支持、维护或升级。这可能导致系统中断、服务质量下降或业务受阻。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">文档或流程的问题</strong>，如没有文档，没有沉淀，只在某些人的脑袋里面：如果系统或流程存在缺乏文档、知识沉淀或依赖于个别人员的情况，可能会造成知识孤立和团队合作的问题，影响系统的可维护性和可扩展性。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">数据完整性和一致性问题</strong>：数据在系统内部或与其他系统之间的传输和处理过程中，可能遭受损坏、丢失或篡改，导致数据完整性和一致性问题。这可能对决策和业务流程产生负面影响。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">大规模系统故障</strong>：系统由多个组件、服务或子系统组成，如果其中一个组件出现故障，可能导致整个系统的大规模故障。例如，云服务提供商的故障、硬件故障等。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">法规和合规风险</strong>：系统必须符合特定的法规要求和合规标准，如果系统无法满足这些要求，将面临法律风险、罚款或业务停摆的风险。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">服务容量的不足</strong>：系统中的某些服务容量可能不足以应对高负载或峰值流量，这可能导致性能下降、响应时间延迟或系统崩溃。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">基建发布或扩容等发布操作会影响业务的情况</strong>：系统基础设施的发布操作，如服务器扩容、网络配置变更等，可能会对业务产生影响，例如服务中断或性能下降。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">线上配置/环境/网络等的变更</strong>：对线上系统的配置、环境或网络进行变更时，可能会引入风险，如配置错误、网络中断等，导致系统故障或不稳定。</p>
</section>
</li>
<li>
<section style="color: #010101;">
<p style="color: black;"><strong style="color: #0e88eb;">安全问题</strong>：系统面临的安全漏洞、攻击风险或数据泄露等问题可能对业务运行和用户数据安全产生重大影响。</p>
</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">要识别系统性风险，可以采取以下方法：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">审查历史数据和经验教训，了解以前的系统故障和问题。</section>
</li>
<li>
<section style="color: #010101;">进行风险评估和风险工作坊，与团队一起识别潜在的系统性风险。</section>
</li>
<li>
<section style="color: #010101;">与各个部门和团队合作，收集反馈和洞察，了解系统的弱点和关键风险点。</section>
</li>
<li>
<section style="color: #010101;">借鉴行业标准和最佳实践，了解常见的系统性风险和应对方法。</section>
</li>
<li>
<section style="color: #010101;">定期进行系统评估和安全审查，以发现潜在的系统性风险。</section>
</li>
<li>
<section style="color: #010101;">通过识别系统性风险，组织可以有针对性地采取措施来降低风险，并确保系统的稳定性、安全性和可靠性。</section>
</li>
</ul>
<h2 style="color: #000000;" data-tool="mdnice编辑器"><span style="font-weight: bolder; color: #0e88eb;">6.3 风险治理</span></h2>
<p style="color: #000000;" data-tool="mdnice编辑器">风险治理不是一个一蹴而就的事情，需要持续的来做，需要从组织，流程机制，系统工具和文化层面进行治理。</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">组织层面：一个事情或方案想要比较好的落地，一定是有一个完整的组织来承接，至少需要有 PACE 的逻辑来支撑，明确分工。</section>
</li>
<li>
<section style="color: #010101;">流程层面：流程层面至少要建立明确的沟通机制，如周报、例会等，同时还需要建议风险控制流程，明确制定风险识别、评估、控制和监测的标准流程，确保风险管理工作的有序进行。</section>
</li>
<li>
<section style="color: #010101;">系统工具：理想中是希望有建立统一的风险管理信息系统，用于收集、整理和分析风险相关信息。甚至可以利用数据分析和人工智能，对潜在风险进行预测和预警，提高风险应对的时效性。简化版可以通过群、Jira 系统等项目管理工具来达到前期的系统工具落地的程度。</section>
</li>
<li>
<section style="color: #010101;">文化层面：通过宣导、洞察、关注、固化、奖励等方式引导大家对于风险的关注，将风险意识融入日常工作中，提高大家对风险的认知，强化风险意识。</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">以上的组织、流程、系统工具和文化层面的治理都是为了更好的管理风险而存在。在这个过程中，风险模型是抓手，通过不停的识别风险，消除风险，缓和风险，不断提高系统变好的可能，以最终达到治理系统性风险的目标。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">风险评估和应对规划是一个反复重复的过程，不停的迭代风险模型，识别出新的风险。</p>
<p style="color: #000000;" data-tool="mdnice编辑器">当风险模型构建完成后，我们需要定期逐个风险拉出来 review 一次，我们可以问我们自己如下的一些问题：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">与上次回顾相比，风险有更严重吗？可能性有更高吗？</section>
</li>
<li>
<section style="color: #010101;">接下来会排专人来解决某些风险吗？是否应该安排？</section>
</li>
<li>
<section style="color: #010101;">上次回顾安排的事项落实了，对应的风险情况如何，是否有更新到风险模型中？</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">问完问题，我们可能需要有一些实际的行动：</p>
<ul class="list-paddingleft-1" style="color: #000000;" data-tool="mdnice编辑器">
<li>
<section style="color: #010101;">评估是否有新的风险；</section>
</li>
<li>
<section style="color: #010101;">删除旧的风险：如果风险已经解决了，可以归档；</section>
</li>
<li>
<section style="color: #010101;">评估原有风险模型中的每一项风险，评估其严重性和可能性，如果有变动，对其进行更新；</section>
</li>
<li>
<section style="color: #010101;">对于不同的优先级的风险区别对待。</section>
</li>
</ul>
<p style="color: #000000;" data-tool="mdnice编辑器">以上的回顾操作我们在上面建设的某个管理系统来承载，并且这个管理系统是带有通知等功能，以更好的将风险相关的信息周知出去，如 Jira 系统。</p>
<h1 style="color: #000000;" data-tool="mdnice编辑器"><span style="color: #0e88eb;">7 小结</span></h1>
<p style="color: #000000;" data-tool="mdnice编辑器">系统性风险是一个动态的概念，持续反复的监测和评估至关重要。定期审查系统的运行情况、漏洞和潜在风险，确保及时发现和解决问题，以减少系统性风险。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2023/12/essential-skills-for-technical-management-manage-systemic-risks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>技术管理者必备技能之解决问题的 3 个层次</title>
		<link>https://www.phppan.com/2023/05/3-levels-of-problem-solving/</link>
		<comments>https://www.phppan.com/2023/05/3-levels-of-problem-solving/#comments</comments>
		<pubDate>Wed, 03 May 2023 10:07:46 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[必备技能]]></category>
		<category><![CDATA[技术管理]]></category>
		<category><![CDATA[技术管理者]]></category>
		<category><![CDATA[解决问题]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=2103</guid>
		<description><![CDATA[作为一名技术管理者，面对日常工作中的各种问题和挑战，我们需要具备出色的问题解决能力。技术团队管理本身就是一项充 [&#8230;]]]></description>
				<content:encoded><![CDATA[<section id="nice" style="color: black;" data-tool="mdnice编辑器" data-website="https://www.mdnice.com">
<p data-tool="mdnice编辑器">作为一名技术管理者，面对日常工作中的各种问题和挑战，我们需要具备出色的问题解决能力。技术团队管理本身就是一项充满挑战的任务，而解决问题的能力更是推动团队向前的关键。当一个技术管理者拥有极强的解决问题的能力后，他大概能应对挑战、降低风险、提高团队绩效、增强领导力并提升个人职业发展。</p>
<p data-tool="mdnice编辑器">在解决问题的过程中，我们可以将问题分为三个层次。了解这三个层次将帮助我们更好地应对不同场景下的问题，成为更优秀的技术管理者。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e88eb;">1 应急响应类</span></h1>
<p data-tool="mdnice编辑器">应急响应类问题的处理是通过快速反应和短期改进措施来修复问题的反应性流程。其主要作用是<strong style="font-weight: border; color: #0e88eb;">停止损害，防止蔓延</strong>。</p>
<p data-tool="mdnice编辑器">应急响应通常是一种反应式行为，并不研究根本性的问题以及背后的原因。应急响应不会导致理想状态的实现，但是仍然可以满足即时需求、保护客户，为更加深入地挖掘和调查重要细节赢得宝贵时间。有效的应急响应有助于企业产品获得更好的稳定性。</p>
<p data-tool="mdnice编辑器">应急响应类问题涉及到系统或产品出现紧急故障时，需要立即采取行动以避免进一步影响。这种解决方式专注于快速应对问题，暂时稳定状况，但可能不会深入探讨问题的根本原因。例如，服务器宕机导致网站无法访问，技术管理者需要立即组织团队快速评估问题的严重性，制定并实施紧急应对措施，进行故障排查，找出问题根源并进行修复，以保障系统正常运行。</p>
<p data-tool="mdnice编辑器">针对此类问题，常规处理流程如下：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">确认问题</strong>：在故障发生时，第一步是确认问题的具体表现和影响范围。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">快速定位</strong>：尽快找到故障发生的关键环节或设备。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">制定应急措施</strong>：为了防止问题扩大，制定临时应对措施，如切换备用设备或临时修复。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">实施解决方案</strong>：采取相应的技术手段和方法解决故障。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">验证修复</strong>：确认故障已被解决，系统恢复正常运行。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">总结复盘</strong>：分析故障原因，制定预防措施，避免类似问题再次发生。</section>
</li>
</ol>
<p data-tool="mdnice编辑器">以某个互联网产品的后台服务出现异常，导致用户无法正常登录。为解决该问题，我们可以采取以下步骤：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">确认问题</strong>：收集用户反馈，查看日志和监控数据，确定问题的具体表现和影响范围。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">快速定位</strong>：分析日志和监控数据，找出异常发生的关键服务或代码模块。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">制定应急措施</strong>：为防止问题扩大，可以临时限制新用户注册，或者启用备用服务器等。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">实施解决方案</strong>：针对定位到的问题，进行相应的代码修复或配置调整，然后重新部署服务。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">验证修复</strong>：测试修复后的服务，确认用户可以正常登录，系统恢复正常运行。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">总结复盘</strong>：分析故障原因，制定预防措施，优化代码质量和监控预警机制，避免类似问题再次发生。</section>
</li>
</ol>
<p data-tool="mdnice编辑器">在职场中，经常会出遇到此类的问题，一个技术管理者也经常需要作为发言人去回复此类问题，可能是对业务方或者上级等等。一般我们回复此类问题可以按以下逻辑来讲：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">问题描述</strong>：首先，简洁明了地描述问题的现象，包括故障发生的时间、影响范围以及涉及的系统或模块。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">原因分析</strong>：接下来，阐述经过团队排查后发现的问题根源，以及问题产生的原因。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">解决措施</strong>：说明已经采取的解决措施以及恢复情况，包括故障处理时间以及目前系统恢复的程度。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">防范措施</strong>：提出针对此次故障，团队将采取哪些预防措施，以避免类似问题再次发生。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">跟进计划</strong>：最后，描述团队将如何跟进并持续关注问题的后续处理，以确保问题得到妥善解决。</section>
</li>
</ol>
<p data-tool="mdnice编辑器">示例：</p>
<blockquote class="multiquote-1" style="color: #0e88eb;" data-tool="mdnice编辑器"><p><span style="font-weight: bold;">★ </span><strong>问题描述</strong>：今日上午 10:00，我们的网站出现了访问故障，影响了所有用户对网站内容的访问。<br />
<strong>原因分析</strong>： 经过团队紧急排查，我们发现问题出在流量爆涨，导致服务器负载过高，从而让部分服务无法正常响应用户请求。<br />
<strong>解决措施</strong>： 我们迅速扩展了服务器资源，同时优化了负载均衡策略。截止目前，网站访问已恢复正常，全部用户可以正常访问。<br />
<strong>防范措施</strong>：为防止类似问题再次发生，我们将加强服务器负载监控，提前预警潜在风险。同时，我们将对现有负载均衡策略进行评估和优化，确保系统稳定性。<br />
<strong>跟进计划</strong>：我们将在未来一周内密切关注网站运行状况，并定期向您汇报服务器性能数据。如有任何问题，请随时联系我们。</p>
<p>”</p></blockquote>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e88eb;">2 深度分析类</span></h1>
<p data-tool="mdnice编辑器">深度分析类问题和应急响应类问题相比有一个不同点，在于速度。应急响应类的方式以一种快速而急切的方式处理紧急问题，深度分析的方式则遵循更加严谨的结构，通常包括数据收集、多方分析和深度研究，可能需要以一种更科学的方式花费几小时、几天、几周，甚至更长时间来完成。</p>
<p data-tool="mdnice编辑器">深度分析类不会每次出现问题就触发，仅在以下场景下发生：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">重复发生的问题。</strong></section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">对安全、质量、交付、成本、士气、生产率或者其他关键绩效指标产生负面影响，且不知道根本原因与解决方案的任何问题。</strong></section>
</li>
</ol>
<p data-tool="mdnice编辑器">深度分析类问题的解决是<strong style="font-weight: border; color: #0e88eb;">通过确定一个明确的目标，以及与之对应的衡量和管理流程来实现的</strong>。深度分析类的问题解决是重复的，直到人们清楚地了解问题，解决问题，并且防止问题再次出现为止。</p>
<p data-tool="mdnice编辑器">针对此类问题，常规处理步骤如下：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">界定问题</strong>：在这个阶段，技术管理者需要充分了解问题的背景，并使用事实和数据来描述现状与期望标准之间的差距。这包括明确问题的目的、范围、影响和紧迫性。问题描述应遵循 SMART 原则（具体、可衡量、可实现、相关、时限）。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">分解问题</strong>：分解问题是第一步的延续，但是更加细化，为了更好地理解问题，技术管理者需要将问题分解成更小的部分。可以采用逻辑树、鱼骨图等工具来实现问题的分解。在分解过程中，应确保各部分之间的关系符合 MECE 原则（互斥且完全穷尽）。然后，针对每个子问题进行深入的分析、量化和细化。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">建立目标和成功判断</strong>：在明确了问题的具体表现和原因后，技术管理者需要设定一个清晰的目标，以便于团队集中精力解决主要问题。目标应具有明确的完成标准和时间节点，并遵循 SMART 原则。此外，管理者还需要确保目标与公司战略目标保持一致。同时，为了衡量解决方案的成功程度，需要确定一些关键成功指标。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">根因分析</strong>：根因分析是指根本原因分析，技术管理者需要深入挖掘问题的根本原因，以便于制定针对性的解决方案。可以采用 5W、因果图等工具来进行根本原因分析。找到根本原因后，管理者需要验证这些原因，确保它们是问题产生的关键因素。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">制定解决方案</strong>：根据根因分析的结果，技术管理者需要制定相应的解决方案。解决方案是能够防止问题再次发生的应对措施，并不是指实施你感觉正确或者你希望奏效的行动。对于任何实施措施而言，能否防止问题再次发生和达成前几个步骤所确定的目标，是验证解决方案是否有效的主要检查点。解决方案应具有可行性和可持续性，以确保长期效果。同时，解决方案应具有创新性，以提高团队的问题解决能力。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">里程碑</strong>：为了确保解决方案的实施过程井然有序，技术管理者需要设定一系列里程碑。每个里程碑都应与特定的任务或目标相关联，有助于监控项目进度和实现预期结果。里程碑除了监控项目进度，还有一个作用是<strong style="font-weight: border; color: #0e88eb;">对外或对上的汇报，以大的时间节点同步项目的进展</strong>。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">工作计划</strong>：在这个阶段，技术管理者需要为团队制定详细的工作计划，包括任务分配、时间表和预期结果。工作计划应确保各个团队成员清楚自己的职责和期望，以提高执行效率。同时，管理者需要与团队成员保持密切沟通，确保计划的实施过程中能够及时调整和改进。在工作计划中预期结果<strong style="font-weight: border; color: #0e88eb;">一定要体现必须的交付物</strong>，让预期结果是有能落地的点。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">风险判断</strong>：在实施解决方案的过程中，技术管理者需要关注可能出现的风险和问题。这包括对潜在风险进行识别、评估和分类，以便于采取适当的预防和应对措施。管理者应与团队成员共同讨论可能的风险，制定风险应对策略，确保项目的顺利进行。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">未来改进</strong>：问题解决并非一次性事件，而是一个持续的过程。在解决方案实施后，技术管理者需要关注其效果，并根据实际情况进行调整和改进。同时，管理者还应从这个过程中总结经验教训，为未来解决类似问题提供借鉴。</section>
</li>
</ol>
<p data-tool="mdnice编辑器">通过以上九个步骤，技术管理者可以结构化地解决复杂问题，提高团队的问题解决能力。这种方法论强调了问题的分析和解决过程的重要性，有助于确保解决方案的有效性和可持续性。</p>
<p data-tool="mdnice编辑器">这九个步骤可以作为深度分析类问题的规划方案文档的一级标题。</p>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e88eb;">3 追求卓越类</span></h1>
<p data-tool="mdnice编辑器">追求卓越类问题和深度分析类问题相比，通常都以检查关键指标开始，但是有一些差别。 深度分析类是要对趋势显示出来的与已设定目标的差距进行反应，而追求卓越类的这种机制则是通过建立新的、更具挑战性的未来状态而主动发起。</p>
<p data-tool="mdnice编辑器">深度分析类问题解决方式聚焦在澄清问题及其直接原因上，要尽可能明确和具体。其思维和流程在本质上是调查性的，通过发现与标准之间的偏差，并将关键项目恢复到正常工作状况，围绕着恢复到已知标准或者之前的绩效水平而展开。深度分析类的思维<strong style="font-weight: border; color: #0e88eb;">接受现有标准</strong>。</p>
<p data-tool="mdnice编辑器">相比之下，追求卓越类思维会从根本上对现状提出质疑：「理想状态是怎样的，有没有更好的状态，或者应该是怎样的？」。刚开始的时候你可能没有明确的答案，你必须构想一种改进后的目标状态或未来状态。在聚焦到具体明确的个体问题之前，追求卓越类的问题解决者要拓宽思维宽度，去思考多个备选状态和路径以实现构想。</p>
<p data-tool="mdnice编辑器">针对此类问题，常规处理步骤如下：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">背景</strong>：列出受众和参与者可能需要知道的信息。提供项目的背景信息，例如组织环境、历史、市场情况等。确保所有相关人员对项目有充分了解，为后续步骤打下坚实基础。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">现状定义</strong>：以图表等可视化的方法描述现状，让受众能更好地接收信息。例如，绘制价值流图，展示当前流程的关键环节、瓶颈和效率。通过直观地呈现现状，帮助团队成员更好地理解问题所在。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">现状分析</strong>：全面地检验不同要素的改善潜力，比如前置时间、服务、绩效、成本和特性等。运用数据分析、用户反馈和内部评估等手段，找出现有流程中可以改进的地方。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">设定目标</strong>：明确要在什么时候完成什么，并确定改善的具体水平。设定有挑战性且可实现的目标，为后续改进提供方向。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">目标状态的定义</strong>：可视化地展示改进后的新状态，通过想象图、流程图或数据等方式，形象地呈现预期的目标状态。这有助于团队成员清晰地了解改进的方向和目的。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">制定执行计划</strong>：列出具体的细节，比如姓名、责任、日期和预期产出结果等。明确具体的细节，确保团队成员清楚自己的职责和期望。如果需要，可以将执行计划与其他项目计划相结合进行管理。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">检查结果</strong>：检查改进后的绩效水平是否达到预期。通过定期评估和数据分析，了解实施情况及效果，确保改进措施取得实际成果。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">跟进与标准化</strong>：制定行动清单，确保改进结果在长期运行中是可维持的。对改进措施进行持续跟踪，评估其有效性，确保新的标准在组织内得到广泛应用和推广。</section>
</li>
</ol>
<p data-tool="mdnice编辑器">以一个互联网 SaaS 产品在高峰时段用户体验下降，页面加载速度变慢为例来描述整个过程：</p>
<ol data-tool="mdnice编辑器">
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">背景</strong>：我们的 SaaS 产品面向企业客户，提供在线办公协作功能。近期我们发现，用户在高峰时段访问产品时，页面加载速度减慢，影响了用户体验。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">现状定义</strong>：通过监控系统收集数据，绘制访问速度和用户活跃度随时间变化的图表。在图表中标注高峰时段，突出问题所在。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">现状分析</strong>：分析服务器资源、带宽、前端优化等多个方面的因素，找出可能导致页面加载速度变慢的原因。例如，检查服务器响应时间、CDN 服务情况、代码优化等。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">设定目标</strong>：在高峰时段将页面加载速度提高到行业标准水平。为实现这一目标，我们将设定一个合理的实施时间，例如 3 个月。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">目标状态的定义</strong>：绘制改进后的访问速度和用户活跃度随时间变化的图表，展示目标状态。同时，列出在服务器资源、带宽和前端优化等方面需要达到的具体指标。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">制定执行计划</strong>:为实现目标状态，我们需要分配任务给团队成员。例如：张三负责服务器资源优化，如升级硬件、调整负载均衡策略等。李四负责带宽和 CDN 服务调整，以确保高峰时段能应对流量需求。王五负责前端优化，如代码压缩、图片资源优化等。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">检查结果</strong>:在实施改进措施后，持续监控页面加载速度和用户活跃度。通过数据分析，检查改进后的绩效水平是否达到预期。</section>
</li>
<li>
<section style="color: #010101;"><strong style="font-weight: border; color: #0e88eb;">跟进与标准化</strong>:为确保改进效果的持久性，我们需要：对实施过程进行总结，提炼经验教训。将改进措施纳入团队的日常工作流程，确保新的标准得到长期执行。定期回顾和评估改进效果，以便在未来进一步优化。</section>
</li>
</ol>
<h1 data-tool="mdnice编辑器"><span class="content" style="color: #0e88eb;">4 小结</span></h1>
<p data-tool="mdnice编辑器">本文主要探讨了技术管理者在应对日常工作中不同类型问题时，如何运用有效的问题解决能力来提升团队绩效。文章将问题分为三个层次：应急响应类、深度分析类和追求卓越类。对于<strong style="font-weight: border; color: #0e88eb;">应急响应类问题</strong>，例如服务器宕机等紧急故障，技术管理者需迅速评估并实施紧急应对措施。<strong style="font-weight: border; color: #0e88eb;">深度分析类问题</strong>则需要更加严谨和系统的方法，如面对重复发生或对关键绩效指标产生负面影响的问题，技术管理者要深入挖掘根本原因并防止问题再次出现。而在<strong style="font-weight: border; color: #0e88eb;">追求卓越类问</strong>题解决过程中，技术管理者需要勇于挑战现状，设定更具挑战性的未来目标，从而实现技术团队的持续进步。</p>
<p data-tool="mdnice编辑器">通过了解这三个层次的问题解决方式，技术管理者能更加从容应对各种问题和挑战，为团队创造一个更高效、卓越的技术环境，推动团队不断向前发展。</p>
</section>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2023/05/3-levels-of-problem-solving/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
