月度归档:2023年12月

万字长文,探讨有效的团队管理

在一个软件企业中,人力成本往往是最高的,随着时代的进步,人员的学历更高了,情况也更复杂,管理团队的挑战不断增加,常常被如何吸引和留住顶级人才,如何在团队中建立有效的沟通和协作机制,如何处理日益复杂的项目和任务,如何评估和提升团队的效能等问题困扰。

如何有效的管理团队已经成为企业成功的关键因素之一。特别是在技术团队,在管理过程中都面临一些共性问题,如沟通不畅、目标不明确、流程混乱、人才流失等等。这些问题在很大程度上影响了团队的效率和产出。

针对这些问题,我们将在本文中探讨什么是团队,团队的发展过程,以及如何有效的管理团队。

1 什么是团队

1.1 定义团队

从定义上来看,团队是为了达成某一承诺的共同目标而相互协作的一群人。

团队可以被定义为一组由个体组成的实体,这些个体共享共同的目标,对其达成负有责任,并通过相互协作以实现这些目标。这个定义包含了团队的两个关键特性:目标的共享性和协作的必要性。

  1. 共享的目标:团队的成员都应该对共同的目标有清晰的理解,并对达成这些目标有共享的承诺。这可能是完成一个项目,解决一个问题,或者达到一个业绩目标。这种对目标的共享理解和承诺为团队提供了方向,并保证了所有成员都在努力的推动团队向着同一方向发展。
  2. 相互协作:团队的成员需要通过相互协作来达成这些目标。这可能涉及到分工协作,相互学习,以及共享资源和信息等行为。相互协作不仅可以提高团队的效率,也能促进团队成员之间的关系,增强团队的凝聚力,从而提高团队的整体效能。

除此之外,还有相互依赖、尊重、信任和有效的沟通。

1.2 团队是一个开放系统

从整体上来看,团队是个动态复杂的开放系统

团队是由多个相互依赖、相互影响的部分组成的,这些部分包括团队的成员、团队的结构、团队的目标,以及团队的工作流程等。团队的各个部分都是动态的,都会随着时间和环境的变化而变化。其拆解来看可以分为三部分:

  1. 动态: 团队的状态和行为会随着时间改变。这可能是由于团队成员的交互、团队成员的更换、新的任务或目标的设定,或者团队成员的个人成长和发展。

  2. 复杂: 团队的行为和效能不仅取决于个体成员的行为,还取决于这些成员之间的交互和关系。因此,理解和管理团队需要考虑到这种复杂性。

  3. 开放系统: 团队不是孤立存在的,而是和周围的环境相互作用的。这可能包括其他团队、组织的其他部分、组织的领导、客户、供应商、法规和社会文化等。这些外部因素都可以影响团队的行为和效能。

1.3 团队组成框架

从组成框架来看,团队包括 PCP、SCP 和 ICP 三个层面

任务程序(PCP)、社会程序(SCP)和个体程序(ICP),这三个层面共同构成了团队的基本框架,它们互相交织、互相影响,共同推动了团队的运行和发展。

  1. 任务程序(PCP):任务程序是团队为了实现共同目标而进行的工作流程和规范。这可能包括任务分配、决策制定、问题解决等一系列的工作程序。一个有效的任务程序可以提高团队的效率,确保团队的工作有序进行,帮助团队成功地完成其目标。
  2. 社会程序(SCP): 社会程序是团队中的人际交往和沟通方式,它决定了团队内部的氛围和文化。有效的社会程序可以增强团队的凝聚力,提高团队成员的工作满意度,促进团队成员之间的良好关系。一些如决策程序、冲突解决机制和团队建设活动等,都是社会程序的重要组成部分。
  3. 个体程序(ICP):个体程序是指团队成员各自的行为模式和工作方式,它受到各个成员的个性、技能、经验等因素的影响。团队成员的个体程序会影响到团队的整体效能,因此,管理者需要关注团队成员的个体程序,尽可能地提供适合各个成员的工作环境和条件,以发挥他们的潜力。

总的来说,团队可以被视为一个由任务程序、社会程序和个体程序共同构成的复杂系统。这个系统中的各个部分都是相互关联、相互影响的,只有当这三个部分都有效地运作时,团队才能够高效地运行,成功地实现其目标。

2 团队管理的发展过程

我们常用的团队模型包括 Bruce Tuckman 的团队发展模型,Hersey-Blanchard 情境领导理论,Drexler/Sibbet 团队绩效模型。这三个模型各有偏重:

  • Tuckman 的模型主要是为了解决团队成长过程中的冲突和团队动态问题。它帮助团队理解团队发展的自然进程,并通过理解各个阶段的特点,来更好地应对团队中出现的冲突,提高团队合作的效率。
  • Hersey-Blanchard 模型的重点是领导风格如何应对团队成员的成熟度变化。它主要解决的是领导者如何根据团队成员的成熟度和能力级别,灵活地改变自己的领导风格,以激励团队成员,提高团队效能。
  • Drexler/Sibbet 模型着重于团队的任务完成和效能提升。它解决的主要问题是如何通过明确的目标设定、建立信任、承诺和高效协作,帮助团队在完成任务的过程中提高效率和效果。同时,它也强调了团队在项目结束后的反思和更新。

这里我们主要是根据 Bruce Tuckman 的团队发展模型来看团队的发展过程。

2.1 团队发展模型

Bruce Tuckman 的团队发展模型是一种描述团队从最初形成到最终达到高效运作的理论模型。这个模型最初在 1965 年被 Tuckman 提出,原本包含四个阶段:形成、激荡、规范和执行。然后,在 1977 年,Tuckman 和 Mary Ann Jensen 添加了第五个阶段:解散/休整。

以下是这五个阶段的详细描述:

2.1.1 形成阶段

在形成阶段,团队成员刚刚被组织在一起,他们可能对团队的目标、结构和领导者感到不确定或不安。成员们可能会表现得比较矛盾,既希望被接纳,又害怕过度投入。通常,成员们会对领导者寻求指导和明确的指示。

在此阶段,主要解决的问题是团队成员的熟悉和初步建立关系。团队成员可能会对彼此、团队的目标和期望、以及他们在团队中的角色感到不确定。这个阶段要解决的问题包括:

  • 什么是我们的团队目标?
  • 我们每个人的角色和职责是什么?
  • 如何分配和管理任务?
  • 我们的工作流程和通信方式是什么?
  • 我们如何决定和解决问题?

针对这些问题,我们有一些常用的应对策略:

  • 生命地图:这是一种让团队成员分享他们的个人历史和经验的方法,让大家更好地了解彼此,建立信任和熟悉度。
  • MBTI:MBTI(Myers-Briggs Type Indicator)是一种性格类型指标,由凯瑟琳·库克·布里格斯和她的女儿伊莎贝尔·布里格斯·迈尔斯在二十世纪中叶创立。这种指标基于荣格的心理类型理论,用于评估个体的性格特质和倾向。通过使用 MBTI,我们可以理解团队成员的个性类型,这有助于增进团队内的理解和接纳。
  • 团建活动:通过组织团队建设活动,我们可以通过共享的经验和挑战来增强团队的凝聚力。俗一点,喝点小酒不错,不俗一些,可以一起搞点事情,比如一起解决某个问题。
  • 新成员欢迎仪式:通过举行欢迎新成员的仪式,可以让新成员感到被接纳和重视。
  • 团队画像:提供一个框架,帮助团队成员理解和识别团队整体特征、动态和关系的工具。它可以是一幅图像,一张图表,或者一个模型,描绘出团队的结构,成员的角色,团队的目标,以及团队中的关系和互动等。

2.1.2 激荡阶段

在激荡阶段,随着团队成员开始表达个人观点,冲突可能会开始出现。团队成员可能会对团队的目标、任务分配、工作方法或团队的领导产生分歧。这个阶段可能会有所挫折,但也是团队发展的重要阶段,因为它可以帮助清晰地定义团队的方向和结构。

在此阶段,主要解决的问题是团队内部的冲突和分歧。团队成员可能会对团队的目标、工作方式或他们在团队中的角色产生分歧。这个阶段要解决的问题包括:

  1. 职责和角色的定义:团队成员对自己的角色和职责是否有清晰的认识?是否存在角色冲突或不清晰的地方?

  2. 决策制度:团队有明确的决策流程吗?谁有权做重要决定?团队成员是否对这一流程感到满意?

  3. 沟通效率:团队的沟通是否畅通?是否存在信息传递不准确或不完全的情况?

  4. 冲突解决机制:团队内部出现冲突时,有明确的解决机制吗?成员们是否知道如何提出和解决问题?

  5. 团队文化和价值观:团队的价值观是否明确?成员们是否接受并认同这些价值观?

  6. 信任和尊重:团队成员之间是否存在足够的信任和尊重?是否有开放的、支持性的环境,让成员们能够表达自己的观点和感受?

  7. 团队合作:团队成员是否能有效地合作?是否有明确的工作流程和配合机制?

针对这些问题,我们有一些常用的应对策略:

  • 团队委任状:通过明确团队的目标、角色和工作方式,可以帮助团队达到一致。
  • 团队原则:团队成员共同确定的行为准则和期望,这有助于他们更有效地协作。
  • 1 对 1会议:通过私人会议,可以促进直接的沟通和反馈,增强信任和理解。
  • 情感银行:通过积极的行为和互动,可以建立和保持信任,这是团队协作的重要基础。
  • 处理冲突:使用各种冲突解决策略来处理团队内部的分歧和冲突。
  • 建设性反馈:团队成员需要学习如何提供和接受反馈,这对改进工作效率和团队关系至关重要。
  • 双赢思维:鼓励团队成员寻找既能满足所有人需要又能满足个人需求的解决方案。

2.1.3 规范阶段

在规范阶段,团队成员开始解决在激荡阶段出现的冲突,并开始建立更深的相互理解和协作。团队成员开始对团队的目标、角色和工作方式达成一致。团队凝聚力增强,团队成员开始更加尊重彼此,建立更强的关系。

在此阶段,主要解决的问题是团队的凝聚力和工作方式。团队成员开始形成一种共享的工作方式和行为准则。这个阶段要解决的问题包括:

  1. 如何建立并维护有效的团队规则和行为规范?
  2. 如何设计和实施有效的沟通机制以保证信息的准确及时传递?
  3. 如何提供具体且有效的反馈,促使团队和个人的持续发展?
  4. 如何监控和调整团队的工作效果以及内部的关系和氛围?
  5. 当团队或个人取得成就时,应如何进行有效的庆祝和认可以提高团队的凝聚力和动力?

针对这些问题,我们有一些常用的应对策略:

  1. 创建并传播团队原则和规则:建立清晰、明确的团队原则和规则是创建健康团队文化的关键。这些原则和规则应该包括团队的使命、价值观、行为标准以及决策流程等内容。所有团队成员都应参与到创建过程中来,这样可以确保这些原则和规则得到大家的认同。一旦原则和规则确定,就需要通过各种方式(比如团队会议、内部通讯等)在团队中进行传播,并在日常工作中持续实施和维护。

  2. 提供及时的反馈并处理冲突:反馈是提升团队效率和效果的重要工具。建设性反馈应该是具体的、积极的,旨在帮助团队成员改善工作效果和个人发展。1 对 1的沟通机制可以提供一个私密的环境,让团队成员能够分享他们的观察、想法和感受。如果出现冲突,应立即进行处理。处理冲突的过程应以理解和解决问题为目标,避免指责和争吵,寻求双赢的解决方案。

  3. 庆祝成功和成就:庆祝仪式是提高团队士气和增强团队凝聚力的有效方式。当团队或团队成员达到一定的目标或取得了显著的成就时,应进行适当的庆祝和认可。庆祝的方式可以多种多样,比如组织团队聚餐、颁发证书或奖杯、公开表扬等。重要的是,庆祝应该是真诚的,要让团队成员感到他们的努力和贡献得到了认可。

2.1.4 执行阶段

这是团队发展的最后一个阶段,团队已经达到了高效运作的状态。在这个阶段,团队成员能够自我管理,解决冲突,并且能够有效地完成任务。团队的目标已经很清晰,所有的团队成员都对此有深入的理解,他们都为达成这个目标而努力工作。

在此阶段,主要解决的问题是团队的效能。团队已经形成了一种有效的工作方式,并且能够高效地完成任务。这个阶段要解决的问题包括:

  • 如何保持和提高团队的效能?
  • 如何适应和应对新的挑战和变化?
  • 如何确保每个人都能持续地学习和发展?

针对这些问题,我们有一些常用的应对策略:

  • 教练技术:通过使用教练技术,可以帮助团队成员提高他们的技能和效率,从而提高团队的效能。
  • 更新团队规则:团队的发展和变化可能需要我们更新团队的工作方式和期望。
  • 授权:团队领导人可以让团队成员有权做出决策,这样他们能更好地完成任务和承担责任。

2.1.5 休整阶段

这是 Tuckman 和 Jensen 后来添加的阶段。在这个阶段,项目或任务完成后,团队开始解散。团队成员可能会对团队的解散感到不安,尤其是当他们在团队工作中建立了强烈的归属感和相互依赖时。这个阶段的关键是确保团队的努力和成果得到认可,同时支持团队成员进行过渡。

在此阶段,主要解决的问题是团队的结束和转变。当团队的任务或项目结束时,团队可能需要解散或进行重组。这个阶段要解决的问题包括:

  • 如何处理团队成员的情绪和反应?
  • 如何确保团队的知识和经验能够被保留和传递?

需要注意的是,这个模型并不是严格线性的,团队可能会在不同的阶段之间来回移动,甚至可能会跳过某些阶段,或者同时具备两个或多个阶段的特点。

2.2 领导者的成长阶段

以上是团队的发展过程,对一个团队的管理者来说,也有一个类似的发展过程,用《礼记·大学》中我们特别熟悉的一句话来概括就是:「修身齐家治国平天下」。这是一句讲自我修炼,一生成就的四个阶段,将其映射到团队领导者的成长上看,也是适用的。

  1. 修身(个人): 在这个阶段,重点是发展个人能力。这包括技术知识、专业技能、时间管理、沟通、解决问题的能力等。个人也需要建立自我驱动和自我学习的习惯,这样他们可以不断地学习新的技能和知识。

  2. 齐家(团队): 当从个人转向团队的角色时,需要发展一种新的技能集。这包括领导力、决策能力、团队建设、冲突解决、激励和教育团队成员等。领导者需要从个体视角转向集体视角,思考如何提高团队的整体效能,而不仅仅是提高个人的产出。

  3. 治国(组织): 当领导者从团队管理转向组织管理时,他们需要开始考虑更为复杂的问题。这包括组织战略、组织结构、文化建设、财务管理、风险管理等。领导者需要考虑如何建立和维护一个高效、稳定、健康的组织。

  4. 平天下(行业/社会): 在这个阶段,领导者需要考虑他们的组织如何影响更大的社会和行业环境。这涉及到公共政策、行业标准、社会责任等问题。领导者需要考虑如何利用他们的影响力来推动行业的发展,以及如何通过他们的决策和行动来产生积极的社会影响。

每一个阶段都需要领导者具备不同的技能和认知,领导者需要根据不同的角色和责任来适应和发展。

3 有效的团队管理

有效的团队管理是指通过一种系统化的方式,领导一个团队,运营之,以实现既定的目标。这包括以下几个关键要素:

  1. 明确的目标:团队需要有一个明确和共享的目标或愿景,以指导其工作和决策。

  2. 卓越的领导:团队需要有一个或多个能够激励和指导团队的领导者。这包括设定明确的期望,提供反馈,处理冲突,以及帮助团队应对挑战。

  3. 明确的角色和责任:每个团队成员需要明确他们的角色和职责,以确保所有的任务都能得到有效的处理。

  4. 良好的沟通:团队需要有良好的沟通机制,以促进信息和想法的分享,解决问题,以及提高团队的协调性和效率。

  5. 有效的系统和流程:团队需要有一套有效的系统和流程来支持其日常运作。这可能包括决策制定的流程,任务管理的工具,以及反馈和评估的机制等。

  6. 良好的团队关系:团队成员之间需要有良好的工作关系,以提高团队的凝聚力和满意度。

将其概括一下,就是包括方向,领导力、角色分工、系统、沟通和关系六个方面。这六点是基础,在此基础上,有效的团队管理也需要有适应性和灵活性,以应对不断变化的环境和挑战。这可能包括调整团队的目标,改变工作方法,以及提供持续的学习和发展机会等等。接下来我们从这六个方面来阐述如何有效的管理团队。

3.1 方向

带团队如大海行舟,方向是第一要务。为什么要有方向,因为当所有人都对方向有共同的理解,并且同意并承诺支持这个方向时,他们有更大概率的有效地合作,并积极地向目标前进。

方向主要关注三个问题:团队的目标和战略是否明确?每个团队成员是否理解并认同这些目标和战略?团队的目标是否需要随着环境的变化进行调整?

方向在团队管理中非常重要,原因有以下几点:

  1. 共享目标:一个明确的方向为团队提供了一个共享的目标或愿景。这可以帮助团队成员理解他们的工作为何重要,以及他们的努力如何帮助团队实现其目标。

  2. 决策指导:方向也提供了一个框架,用于指导团队的决策和优先事项。团队成员可以根据团队的目标来决定他们应该如何分配资源,选择哪些任务,以及如何执行这些任务。

  3. 提高凝聚力:当团队成员对团队的方向有共同的理解和认同时,他们可能会感到更加投入和满足。这可以提高团队的凝聚力和满意度。

  4. 提供动力:明确的方向也可以为团队提供动力。团队成员知道他们正在追求的目标,了解他们的工作如何贡献于这个目标,这可以激发他们的积极性和热情,将从被动执行任务变为主动推动目标的实现。

  5. 测量进度:最后,方向可以帮助团队测量其进度和成效。通过比较当前的状态和目标,团队可以了解他们在实现目标方面的进度如何,以及他们是否需要改变策略或方法。

在我们做战略沟通,或者在探讨方向时,需要考虑以下三个方向:

  • Why:为什么我们要这样做?这通常涉及到组织的使命、愿景或核心价值观。
  • What:我们要做什么?这是具体的目标或战略。
  • How:我们如何做到这一点?这包括实施战略的具体步骤或方法。

要想达成方向的一致,有许多方法,我们常用的方法如下:

  1. 一对一讨论: 领导者可以与每个团队成员单独会面,讨论并达成共识。

  2. 集体共创: 可以组织工作坊或大会,让所有人都有机会参与讨论和决策。

  3. 单方宣导: 在某些情况下,领导者可能需要明确阐述他们的观点,并期望团队成员接受和支持。

无论选择哪种方式,最重要的是确保每个人都有机会表达他们的观点,并且他们的观点被认真考虑。这样才能保证达成真正的共识,而不仅仅是表面的一致。

3.2 领导力

经常有人说「领导者决定了团队的基因」,这说明领导者的行为、决策、态度、价值观和领导风格对团队的特质和行为有着重大影响。就像基因决定了生物的特性一样,领导者的特质和行为也可以决定团队的「特性」。其主要体现在以下 4 个方面:

  1. 设定价值观和期望:领导者通常会设定团队的价值观和期望,这些价值观和期望形成了团队文化的基础。例如,如果领导者重视创新和风险承受能力强,那么团队可能也会发展出一种鼓励尝试新事物和接受失败的文化。

  2. 塑造行为和决策:领导者的行为和决策模式对团队成员有示范作用。例如,如果领导者以开放和透明的方式进行决策,那么团队成员也可能会采取同样的方式。

  3. 激励和驱动:领导者通过他们的激励策略影响团队的动力和表现。如果领导者激励团队成员追求卓越和持续改进,那么这可能会成为团队的一个核心驱动力。

  4. 选择和发展人才:领导者在招聘和发展人才方面的决策也会影响团队的特性。例如,如果领导者倾向于招聘具有强烈团队精神和合作能力的人,那么整个团队可能也会具有这些特性。

在领导者改变团队的过程中,领导的领导力是一个非常重要的因素,在团队管理和组织成功中扮演着重要的角色。

当你在管理岗位上时,看看以下的一些陷阱你有没有遇到过:

  1. 过度放权或忽视领导职责:领导者有时可能会过度放权,以至于放弃了领导权力,并忽略了团队管理的各种要素,如ICP/SCP/PCP(Input/Control/Process)。可能过于乐观地认为,只要给团队足够的自由,一切都会按计划进行。然而,这是一种误解。领导者不仅要放权,还要根据团队的成熟度正确使用权力,以及情景管理。我们应该与团队一起工作,帮助解决难题,而不是完全放手。

  2. 以自我为中心,忽视团队需求:领导者可能过于关注自己的想法和目标,而忽视了团队的需求和感受。可能把人性假设得太理想化,缺乏对团队的爱和耐心。领导者应该以团队的理解和需求为出发点来进行沟通和赋权。他们也应该愿意为提高团队的能力付出努力,包括必要时进行人员调整。

  3. 过度依赖自我思考,忽视团队输入:领导者可能会认为自己已经清楚了解了所有问题,结果导致团队成员只是执行者,没有参与决策的机会。这种做法可能会阻碍团队成员的发展和创新。领导者应该把团队成员视为平等的伙伴,愿意花时间进行沟通和同步,并相信他们具有巨大的潜力。

  4. 过度参与执行,忽视领导职责:有些领导者可能过于关注执行任务,以至于忘记了他们的领导职责。他们可能会在周会上跟进每项任务,但忽视了作为领导者的责任,包括设定战略,提供支持,和激励团队。领导者应该意识到他们是团队的扩大器,他们的主要职责是领导和赋能,而不仅仅是执行任务。

  5. 避免冲突:领导者可能会避免处理团队之间的冲突,以希望保持和谐。然而,未解决的冲突可能会升级,影响团队的士气和效率。领导者应该勇于面对和解决冲突,而不是避开它。

  6. 过度承诺:有些领导者可能会对团队成员或者与他们合作的人过度承诺,这可能会导致资源过于紧张,或者在无法达到承诺的时候失去信任。领导者应该明白他们的能力范围,并理性地做出承诺。

  7. 忽视个人发展:领导者可能过于专注于团队的目标,而忽视了他们自己的个人成长和发展。这可能导致他们的技能和知识变得过时,无法有效地领导团队。领导者应该意识到,他们自己的发展同样重要,他们需要不断地学习和提高。

  8. 忽视人才培养:领导者可能过于关注短期的目标,而忽视了人才的培养。这可能导致团队的长期发展受到限制。领导者应该投资于人才的培养,为团队的未来做好准备。

  9. 抵制变革:领导者可能对变革持防御态度,尤其是当这些变革可能影响他们的权力和舒适区时。然而,变革是必要的,领导者应该积极接受并驱动变革,以变化应对不断变化的环境

每个领导者都可能面临这些陷阱,关键在于认识到它们,然后采取行动来避免或者克服它们。避免这些陷阱需要领导者具有深度的自我认识,对团队的尊重和理解,以及对长期目标和策略的清晰理解。

那么,领导力是什么?

领导力是一种复杂的能力,包含多个层面。领导作为团队绩效的放大器,他们的作用和影响占团队成功要素的 70%,他们的角色既不是独自承担所有工作,也不是放任不管,而是负全责。领导力有一个基本框架,可以分为以下 6 个层面:

  1. 战略层面:这涉及到制定和实施长期目标和策略,以及识别和适应外部环境的变化。领导者在这个层面需要展示出前瞻性和战略性思考。

  2. 人际层面:这涉及到与团队成员、客户、合作伙伴等各方进行有效的沟通和协作。领导者在这个层面需要展示出强大的沟通、协调和冲突解决能力。

  3. 任务层面:这涉及到设置和实现具体的目标,以及管理和分配资源。领导者在这个层面需要展示出强大的组织、规划和执行能力。

  4. 发展层面:这涉及到培养和发展团队成员,以及自我学习和成长。领导者在这个层面需要展示出教育、指导和激励他人的能力,以及开放性和学习意愿。

  5. 情绪层面:这涉及到理解和管理自己和他人的情绪。领导者在这个层面需要展示出较高的情商,包括自我意识、自我管理、社会意识和关系管理。

  6. 变革层面:这涉及到驱动和管理变革,以适应不断变化的环境。领导者在这个层面需要展示出创新思维、灵活性和适应性。

换成宝洁的 5E 领导力模型来描述,即:高瞻远瞩(Envision),凝聚他人(Empower),发展他人(Encourage),激励人心(Educate),和高效执行(Evaluate)。

  1. 高瞻远瞩(Envision): 领导者需要有构建愿景的能力,能够给整个组织指明方向,激发团队内心的激情。好的愿景应该符合外部市场、用户和业务现阶段的需求,有足够的力量解决业务目前面临的根本问题,并且不只是口号,而要有实际的行动路线。要设计一个好的愿景,可以参照行业标杆,找出关键路径,建立 KPI。领导者需要清晰、有说服力地表述这个愿景,并展示出他们如何带领团队实现这个愿景。

  2. 凝聚他人(Engage): 领导者需要将员工、同事、客户甚至老板纳入自己的愿景达成梯队,让每个项目的所有参与者都把这个项目当成重要的项目。在这个过程中,需要保持开放的沟通,同步进展和规划,让每个人都有机会了解项目的全局情况并参与其中。这包括倾听他人的观点,尊重和理解他们的需求,以及鼓励他们在实现共同目标的过程中扮演积极的角色。

  3. 发展他人(Enable): 领导者需要确保团队有信心、有能力、有精力来做好自己的那部分工作。这包括提前告知工作需求和意义,提供全面的信息,及时提醒需要的方向调整,以及在可控的范围内给予团队犯错和改进的机会。

  4. 激励人心(Energize): 无论困境逆境,领导者需要保持团队的斗志。这可以通过保持积极的态度,使用幽默来化解压力,及时庆祝小胜利,反馈表扬,以及了解并回应每个人的想法来实现。

  5. 高效执行(Execute): 领导者需要保证任务的完美执行。这包括梳理工作,做好分配和排期,让每个人都有机会参与,不遗余力地寻求帮助,以终为始,及时检查里程碑,以最终体验为目标。

作为一名领导者,需要持续的自我反思和对团队的深深关爱,时刻反思 ,时刻反思自己的行为和决定,以确保它们都是以团队的最佳利益为导向的。这意味着你需要放下自我,优先考虑团队的需求和利益。在决策时,你需要考虑的是决策对团队的影响,而不仅仅是对自己的影响。此外,你需要建立一个开放和透明的环境,鼓励团队成员提供反馈,以帮助你更好地理解他们的需求和期望。

同时许以 严格的爱。严格的爱是建立在对标准、规则和期望的坚持上的。这意味着你需要设定明确的期望,使团队知道他们需要达到什么样的标准。你也需要坚持规则和程序,确保所有的工作都按照既定的方式进行。同时,你需要提供及时和具有建设性的反馈,帮助团队成员理解他们需要如何改进。在这一过程中,你也需要给予团队成员必要的支持和关心,以帮助他们达到这些标准。

如 Python 中的「鸭子模型」:如果一个对象能够完成你需要的操作(也就是它“走起来像鸭子,叫起来像鸭子”),你就可以把它当作鸭子来对待(即不在乎它的真实类型或类别)。

如果你像领导者一样思考,像领导者一样讲话,像领导者一样行动,那你就是一个合格的领导者。

3.3 角色和分工

在有效的团队管理中,角色和分工十分关键。明确的角色和分工可以确保团队的高效运作,减少重复工作和冲突,同时也能让每个团队成员明确自己的责任和期望。

首先,我们需要根据团队的战略和核心任务来规划组织结构,即「先岗再人」的原则。这一步包括:

  1. 基于战略和核心任务的组织规划:在招募团队成员之前,我们需要首先明确团队的目标和任务,以确定所需的角色和这些角色在组织中的位置。

  2. 任务性质和管理范围的团队分工和分层:根据任务的性质和管理范围来决定团队的结构和角色分配。这样可以帮助每个人清楚地理解他们的职责和与其他团队成员的关系。理解团队分工和分层就像是在打造一支足球队。首先,你需要了解比赛的规则和每个位置的特点(任务性质)。例如,守门员的任务是防守,而前锋的任务是进球。然后,你需要决定哪个球员去打什么位置(团队分工)。这取决于他们的技能和才能,以及他们与其他球员的协作方式。你还需要了解每个位置在球场上的位置(管理范围)。例如,队长可能需要管理全队的战术,而边锋可能只需关注自己的区域。最后,你需要明确哪些位置是领导位置,哪些位置是执行位置(团队分层)。例如,队长和教练需要做战略决策,而前锋和中场球员需要执行这些决策。

  3. 明确关键岗位:我们需要确定哪些是关键岗位,这些岗位在实现团队目标和任务上起着决定性的作用。

接着,我们要遵循「强将精兵高产出」的效率原则,以提高团队的效率:

  1. 强将是核心:强将被视为团队或组织的核心,因为他们拥有推动力、领导力、专业知识和技能,同时他们的行为和态度常常被其他团队成员视为模范。他们不仅能推动团队前进,提供专业的解决方案,还能通过他们的领导力引导和协调团队的工作。另外,他们的存在为团队提供了稳定性和信任,特别是在面对挑战的时候,他们的冷静和果断能帮助团队保持稳定并继续前进。

  2. 精兵至关重要:精兵是团队或组织的重要组成部分,他们的专业技能、执行力、稳定性和团队协作能力对于团队的成功起到了关键的作用。他们不仅能以高效和质量的方式完成任务,提升整个团队的效率,也通过他们的纪律性和可靠性为团队提供了稳定性。同时,他们的协作精神让他们能够与团队中的其他成员携手合作,共同推动团队的进步。并且,他们的专业性和忠诚度也使他们成为未来领导角色的有力候选人。

最后,当团队规模越大,结构越复杂时,我们更需要重视核心团队的建设和分层管理,以形成像涟漪一样向外扩散的效应,拆解下来分为三个关键点::

  1. 核心团队的建设:随着团队规模的扩大和结构的复杂化,建设一个强大的核心团队变得越来越重要。核心团队的成员应具有关键的角色或岗位,并且能够对组织的目标和决策产生直接影响。

  2. 分层管理:应使用分层管理的方式来应对团队规模的增长和结构的复杂化。每一层都有自己的职责和管理者,以保持信息流和决策过程的效率。

  3. 涟漪效应:一个强大的核心团队和有效的分层管理系统可以在整个组织中产生积极的影响,就像在水面上投下一颗石子会产生涟漪一样。可以提高整个团队的效率和生产力。

随着团队规模的增长和结构的复杂化,我们应更加重视核心团队的建设和分层管理,以实现有效的组织管理和协同工作,从而产生涟漪效应,提高整个团队的效率和生产力。

3.4 系统

这里的所说的系统是一种整体观念,强调整体大于部分之和,部分之间的互动关系对整体的性质和功能有决定性的影响。以系统观来解决问题

系统可以理解为一套组织的流程、规则和机制,这些流程、规则和机制协同工作,以实现组织的特定目标。系统观强调整体性和协同性,而不仅仅是单个流程或机制。

有效的团队管理中的系统,包括了流程(如工作流程、决策流程)、规则(如政策、规章制度)和机制(如奖励机制、反馈机制)。这些元素相互关联,共同构成了一个整体,以实现团队的目标。系统的设计和实施主要是为了解决团队管理中的各种问题,如效率低下、信息流通不畅、决策错误、员工满意度低、团队目标达成困难等问题。

系统中的各部分都建议遵循目的、痛点、方案、行动的逻辑来走,这其实也就是我们之前聊过的解决问题方案中的第二类方法,深度分析类问题。

系统的建设和实施需要以下几个步骤:

  1. 明确目的:首先,需要明确系统的目的,即希望通过系统解决什么问题,实现什么目标。

  2. 识别痛点:然后,需要识别和分析现有的问题和痛点,这将为系统的设计提供依据。

  3. 制定方案:根据目的和痛点,制定相应的流程、规则和机制。这可能包括重新设计工作流程,制定新的政策,或设置新的奖励机制等。

  4. 实施行动:将方案落实到实际行动中,这可能需要培训员工,改变工作方式,或调整资源分配等。

  5. 持续优化:在实施过程中,需要收集反馈,评估效果,然后根据结果进行调整和优化,使系统能够更好地服务于团队的目标。

这里的系统是指一系列的流程、规则和机制。今天我们主要简单聊一下流程和运营机制。

3.4.1 流程

对于流程建设,它的核心并不仅仅是管理者制定内部规章的过程,而更是一个机会,一个可以总结和提炼团队内部的最佳实践,同时也是管理者对于自身权力的一种约束。流程建设是将团队实践中的隐性知识沉淀为明文规定的最佳工具。

流程本质上是人与任务的有效组合。 它是为了完成特定目标或任务,人们进行的一系列逻辑相关的,跨时间和空间的活动集合。流程是将投入转化为产出的方法,通常包含三个组成部分:投入、转换活动和产出。具有系统观点的人会将组织视为一个流程,而不是各自独立的部门。

流程中的专责化的含义并不是专门的机构或者人员来负责团队所有的标准流程建设,而是谁负责工作,谁就应该负责流程的建设工作。流程建设是一种实践性的工作,源于实际工作,服务于实际工作。如果由专职人员负责流程,可能会导致一线管理者在责任上有所缺失。

流程是一个过程性的制度,需要在过程中发现问题,解决问题,并随着业务的发展和变化进行持续迭代。当某些流程不再适用时,我们需要主动发起优化,按照更优的方向优化流程,精简冗余的流程,追求极简。

一个组织实际上是由各种流程串联起来的。这些流程可能并不都是书面的,但一定隐藏在团队的常规操作和员工的习惯中。组织的工作效率在很大程度上受到流程的影响,组织的运行本质上就是业务流程的运行。

每个管理者都应该学会建立和优化流程。建立流程的目的是高效管理业务,让大家可以按照流程解决问题,尤其是跨团队的问题,而不是寻找人来解决;每件事情都可以按照流程来解决,而不是频繁的开会沟通。那么如何来构建有效的流程呢?

  1. 从实际出发:流程建设应该是为了解决实际问题或提高某个事情的效率,而不是为了流程本身。比如,如果在人力调度问题上需要频繁地找各级领导开会讨论,明显存在效率问题。为此,我们可以制定一个人力调度的流程,明确需要提供的信息,哪些人需要讨论,哪些人需要审批等。在此之后,大家可以按流程执行,无需频繁地找各级领导开会。

  2. 灰度执行:流程建设完成后,不应立即全面实施,而应该先在某个部门或业务部门进行试点,发现可能存在的问题,如流程的顺序、时限等,然后有针对性地对流程进行优化和完善,再逐步扩大试点范围,最后全面实施。这个逻辑和我们服务灰度的逻辑是一致的,尽量减少新变化的影响范围,使变化更好地落地。

  3. 持续迭代:流程全面实施一段时间后,需要对流程进行复盘和回顾,而不是一旦流程建立就不再关注。例如,如果公司是从事 toC 业务,现行的研发流程是双周迭代,运行了一段时间。但现在,公司要转向 toB 业务,这时候就需要重新审视双周迭代的流程,看是否需要优化,以满足新的业务需求。

在流程的构建过程中需要注意不是所有的事情都需要建立流程,关键的流程能够大大提升团队的效率,在出现以下的情况时,我们就需要注意是否要创建新的流程或者优化流程了:

  1. 刻意跟进的重要不紧急(突破创新)的事情
  2. 多方共同参与,提升协同效率(流程/角色/决策等需要配置)
  3. 日常的重复性工作

流程建设是一个动态的过程,需要管理者从实际工作出发,灰度执行并持续迭代,以达到提升工作效率,解决问题的目标。

3.4.2 运营机制

运营机制是一套规范团队运作的方法和流程,它解决的是如何有效管理和协调团队资源,以实现团队的目标。它的本质是制度和流程,它旨在提高团队的效率,减少混乱,提升团队的协作能力,以及适应环境的变化。

在有效的团队管理中,以下是关键的运营机制:

  1. OKR 跟进:OKR(Objectives and Key Results)是一种目标设定框架,它明确了团队的目标(Objectives)和衡量目标实现程度的关键结果(Key Results)。团队需要定期跟进 OKR,以确保目标的实现。这个过程包括定期检查关键结果的进展,以及调整策略以更好地实现目标。

  2. 常规基础工作:这是团队日常运营的重要组成部分,包括任务分配、项目管理、报告编制,以及其他常规的管理工作等。这些工作是确保团队正常运行的基础,也是团队能够有效执行其职能和达成目标的基础。

  3. 处理突发问题/bug:在日常运营中,团队可能会遇到突发的问题或者 bug。团队需要有处理这些问题的能力,这包括快速定位问题,制定解决方案,并执行修复。这种能力不仅可以避免问题对业务造成影响,也是提升团队解决问题能力的重要方式。

除此之外,还有关于团队、领导和反馈的一些机制,详细内容在前面讲过,这里带一下:

  1. 明确的角色和职责:一个高效的团队需要有一个核心团队,其中每个成员的角色和职责都应该明确。这可以确保每个人都明白自己的工作是什么,以及如何与其他团队成员协作。明确的角色和职责,可以提高团队的协作效率,也可以有效地避免工作的重复和遗漏。

  2. 团队领导的责任:团队的领导者(Owner)是决定团队成功的关键因素。他们需要对团队的成功负责,这包括确定和维持团队的战略方向,做出关键的判断和决策,以及协调资源以支持团队的工作。适当的领导可以激发团队成员的潜力,驱动团队的创新和进步。

  3. 定期的跟进和反馈:团队需要进行定期的跟进和反馈,这包括周度跟进和月度跟进,以及在关键节点的洞察。这些跟进和反馈可以帮助团队了解他们的进展,发现问题,并在需要的时候做出调整。定期的跟进和反馈,也是团队持续改进和学习的重要机制。

通过以上这些运营机制,团队可以确保目标的实现,日常工作的正常推进,以及在遇到问题时能够有效地解决。这也可以帮助团队建立一个明确的定位和团队精神,使成功成为一群人共同的事情。

从流程观到系统观,是一个从关注单个流程或机制,到关注整个系统如何协同工作以实现目标的转变。这需要明确目的,识别痛点,制定并实施方案,最后通过收集反馈和持续优化,以实现系统的最大价值。

有系统观的团队管理,能使团队运行更高效、更有序,有助于提高工作效率,减少错误,提升员工满意度,最终实现团队的目标。同时,通过系统的反馈机制,可以不断学习、优化和改进,从而实现组织的持续改进和发展。

3.5 沟通

在团队管理中,沟通是一个至关重要的组成部分。沟通是团队成员之间交换信息、观点、想法和感受的过程。沟通不仅仅是说出自己的想法,更重要的是倾听和理解他人的观点。在沟通过程中,我们应首先接纳对方的观点,然后再去理解。这样的沟通方式可能更容易促成有效的合作。

沟通从种类上来分,可以分为语言沟通或非语言沟通、口头沟通和书面沟通、正式沟通和非正式沟通,向上沟通、向下沟通和平级沟通等。

  • 语言沟通或非语言沟通是从沟通的载体来区分,语言沟通包括书面沟通和口头沟通,非语言沟通包括面部表情,身体语言等;
  • 口头沟通和书面沟通是从语言的载体来区分,口头沟通有会议、面谈、演讲、电话等,书面沟通有电子邮件、信函、刊物(电子和非电子)、报表、通讯录等传递书面文字的手段。口头沟通的特点是快速传递和反馈,但是可能传递过程中会失真,书面沟通更偏向于单向沟通、一般会缺少反馈且耗时较多。
  • 正式沟通和非正式沟通更多的是在组织层面,通过是否具有系统性和结构性来区分。正式沟通是从组织所规定的路线和程序进行信息的传递和交流,如组织间的信函、内部的文件、汇报、会议等等;非正式沟通一般是线下的一些闲聊、喝酒时的吹牛以及一些小道消息等。
  • 向上沟通、向下沟通和平级沟通,这里主要是以组织层级间沟通的对象为区分,以方向表述对象群体。向上沟通一般是指向你的老板沟通,即所谓的下情上达;向下沟通是指向你的下属沟通,即所谓的上情下达;平级沟通是指横向的沟通,如一些平级的部门负责人之间的沟通,以交接意见,互助互赢为主。

沟通的主要目的有几个方面。首先,沟通可以帮助团队的成员对团队的目标、任务、策略和进度有清晰的理解,这需要我们寻找合适的沟通「切入点」。其次,沟通也可以帮助解决可能出现的误解或冲突,这需要我们正确对待和处理抱怨。最后,沟通可以增强团队的凝聚力和合作精神,这需要我们建立完善的内部沟通机制,消除沟通障碍,确保信息共享,引导团队成员之间进行充分的沟通。

沟通在团队管理中的重要性不可忽视。首先,良好的沟通可以加强团队的协作效率,帮助团队成员更好地理解和接受团队的目标和策略。其次,通过沟通,我们可以及时发现和解决问题,避免小问题演变成大问题。此外,通过有效的沟通,我们可以建立一个开放、透明的工作环境,增强团队的凝聚力和合作精神。

有效的沟通方法包括以下几个方面:

  1. 定期的团队沟通:可以通过团队会议,一对一的交谈等方式进行定期的沟通,以确保团队成员对团队的目标和策略有清晰的理解。

  2. 寻找沟通的「切入点」:寻找合适的沟通「切入点」可以使沟通更为有效。这可能是一个共享的目标,一个共同关注的问题,或者一个相关的话题。

  3. 消除沟通障碍:消除沟通障碍,确保信息的准确、及时和有效的传递。这可能包括明确的表达,有效的倾听,以及建立开放和透明的沟通环境。

  4. 处理抱怨:对于抱怨,我们应该先理解抱怨的原因,然后提供有效的反馈,最后寻找和实施解决方案。

对于团队管理来说,需要建立有效的沟通机制。以下是一些常见的步骤和建议:

  1. 明确沟通的目标:首先,我们需要明确沟通的目标,这可以帮助我们确定沟通的内容和方式。比如,我们的目标是提高团队的协作效率,还是解决具体的问题,或者增强团队的凝聚力。

  2. 设定沟通规则:我们需要设定明确的沟通规则,这包括沟通的时间,方式,频率,以及参与的人员。规则需要根据团队的具体情况进行设定,比如,团队成员的地理位置,时间区域,工作方式等。

  3. 选择合适的沟通工具:我们需要选择合适的沟通工具,以支持我们的沟通活动。这可能包括面对面的会议,电话,电子邮件,即时消息,视频会议,项目管理工具等。我们需要根据团队成员的需求和习惯,以及沟通的内容和目标,选择最合适的工具。

  4. 提供沟通培训:我们可以提供一些沟通培训,以帮助团队成员提高他们的沟通技巧。这可能包括如何清晰的表达自己的观点,如何有效的倾听他人的观点,如何解决沟通中的冲突和误解等。

  5. 鼓励开放和透明的沟通:我们需要鼓励开放和透明的沟通,让团队成员感到他们的观点和感受被尊重和接纳。我们可以通过设定安全和尊重的沟通环境,以及提供反馈和建议的机会,来实现这一点。

  6. 定期评估和改进沟通机制:我们需要定期评估我们的沟通机制的效果,以便进行必要的改进。我们可以通过收集和分析沟通的数据,以及听取团队成员的反馈和建议,来进行评估和改进。

通过这些步骤,我们可以建立一个支持团队目标和策略,增强团队凝聚力和协作精神,以及应对变化和冲突的沟通机制。

3.6 关系

这里的关系不是指拉帮结派,而是涉及到团队成员之间的相互作用、感情、理解和信任。这些关系能够影响团队的凝聚力、合作效率和整体的工作环境。这包括团队成员如何沟通、如何协作、如何处理冲突,以及他们对彼此的信任和尊重程度。有效的团队关系不仅涉及到个体与个体之间的关系,也涉及到个体与团队,以及团队与其他团队之间的关系。

团队关系对于有效的团队管理来说非常重要,其意义主要表现在以下几个方面:

  • 提高效率:当团队成员之间的关系良好时,他们更可能愿意共享信息,协作解决问题,这可以大大提高团队的工作效率。

  • 增强凝聚力:良好的团队关系可以增强团队的凝聚力,使成员感到他们是团队的一部分,愿意为团队的目标努力。

  • 提高满意度:当团队成员在工作中感到被尊重和被理解时,他们的工作满意度也会提高,这对于保持团队的稳定性和吸引优秀的人才非常重要。

  • 创新和解决问题:良好的关系可以促进不同观点的碰撞,从而激发创新和解决问题。

建立良好的团队关系需要投入时间和努力,以下是一些有效的策略:

  • 建立信任:信任是关系的基础,需要通过遵守承诺、公平对待所有成员、开放和诚实的沟通以及接受反馈来建立。
  • 提供支持:团队领导应提供必要的资源和支持,帮助团队成员成功完成任务,同时也要关注他们的职业发展。
  • 鼓励开放沟通:团队领导应鼓励开放、诚实和尊重的沟通,以确保所有成员都能够表达他们的观点和感受。
  • 解决冲突:团队领导需要具备解决冲突的能力,以及确保冲突的有效解决。

一旦建立了良好的关系,就需要进行维护。以下是一些有效的策略:

  • 定期沟通:团队领导需要定期与团队成员进行沟通,了解他们的需求和期望,解决可能出现的问题。
  • 公正和一致:团队领导需要公正地对待所有成员,确保所有的决策和行动都是公平和一致的。
  • 承认和奖励:团队领导应该承认和奖励团队成员的努力和贡献,以增强他们的满意度和投入度。

建立和维护良好的团队关系需要团队领导和成员的持续努力。在遇到破坏团队信任感的人,不能留,但用人不疑,疑人不用。团队关系在团队管理中起着关键的作用。通过建立信任、提供支持、鼓励开放沟通和有效解决冲突,我们可以建立和维护良好的团队关系,从而提高团队的效率,增强凝聚力,以及提高满意度。

4 团队有效性的评估和度量

当我们做了一些手段来优化团队管理的有效性,就需要有一个评估和度量的过程。以下是一个基于各种机制的团队系统有效性评估表。其分为五个主要类别:决策与目标设定、沟通与任务分配、报酬与激励、绩效评估、人才管理和日常运营。

1. 决策与目标设定

项目 描述
决策机制 评估团队的决策过程是否清晰、公平且有效。
OKR(Objectives and Key Results)机制 评估团队是否设定了清楚且可衡量的目标,以及这些目标是否与团队和组织的更大目标相一致。

2. 沟通与任务分配

项目 描述
沟通机制 评估团队的沟通是否有效,成员是否感到他们的声音被听到,以及是否有足够的机会进行沟通。
任务分配机制 评估任务是否根据团队成员的技能和兴趣进行分配,以及是否有机会进行新任务和挑战。

3. 报酬与激励

项目 描述
报酬机制 评估团队是否有一个公平和激励的报酬系统,这个系统是否与团队和个人的目标相一致。
激励机制 评估团队是否有有效的奖励和激励制度,以奖励和激励团队成员的努力和成就。

4. 绩效评估

项目 描述
绩效评估机制 评估绩效评估是否根据明确和公平的标准进行,团队成员是否有机会接收和提供反馈。

5. 人才管理和日常运营

项目 描述
人才招聘机制 评估招聘流程的有效性,应聘者的质量,以及新员工的留存率。
人才发展机制 评估是否有定期的技能培训,职业发展的机会,以及员工的满意度和忠诚度。
人才留任机制 评估员工的满意度,留任率,以及离职原因。
流程优化机制 评估工作流程是否清晰,是否有流程优化的机制,以及流程优化的结果。
风险管理机制 评估是否有风险预警系统,团队如何应对风险,以及风险管理的效果。
质量控制机制 评估是否有质量标准,质量控制的结果,以及质量改进的机制。

使用此评估表时,可以为每个项目打分,比如在 1-5 的范围内,其中 1 表示不满意,5 表示非常满意。然后对所有分数进行总结,得出总体评估结果。也可以将这些分数与其他团队或行业标准进行比较,以获得更深入的洞察。

后记

花老师说:你是爱自己还是爱团队?

一言以蔽之:搭班子、定战略、带队伍。

研发管理之基于代码的研发效能度量

在研发管理中,如何准确评估研发人员的效能一直以来都是一个挑战。传统的评估方式大多依赖于观察软性技能的表现,如问题的跟进实时性、反馈的有效性、推动事情的能力,以及解决技术问题的能力。然而,对于研发人员而言,他们的代码质量和效率往往是最直接、最硬性的评价标准。而代码很多时候是看不到的,特别是当团队规模到达一定数量的时候。

代码的质量和开发效率是研发同学工作的核心。好的代码不仅要能完成预设的任务,也要易于理解、修改和测试,以便其他开发者在未来能够维护和改进。代码的质量和开发效率可以直接反映开发人员的技术能力和专业知识。因此对于一个研发管理者来说,要想掌控一个团队的情况,从代码出发,从代码量和代码质量来度量是一个不可或缺的角度。

为何要度量代码?

代码是软件产品的基础,深入理解代码可以帮助我们更好地了解产品的健康状况、性能状况和维护情况。更重要的是,通过深入分析代码,我们可以发现代码中可能存在的问题和改进点,以便提前发现并解决问题,降低项目风险。基于代码的研发效能度量为我们提供了一个量化、可度量的评估标准,从而使我们能够更科学、更有效地管理和优化研发过程和研发分工。

基于代码的度量是什么?

基于代码的研发效能度量是一种通过对代码及代码提交进行深入分析和理解,从中洞察出可能存在的问题和改进点,以提高研发效率和产品质量的方法。这涉及到代码质量分析、代码性能分析、代码测试分析、代码维护性分析以及技术债务分析等多个方面。

从实际落地来说,基于代码的研发效能度量通常涉及到以下几个方面:

  1. 代码质量:这是衡量代码健康状况的重要指标。

    • 代码复杂度:例如,使用圈复杂度(Cyclomatic Complexity)或 Halstead 复杂度(Halstead Complexity)度量代码的逻辑复杂度。
    • 代码规范性:如代码是否遵循了 PEP 8(Python编程规范)或其他语言的编程规范。
    • 代码重复率:如通过工具(如 SonarQube 或 PMD )检测代码的重复部分,计算代码重复率。
    • 用例覆盖率:如使用工具(如 JUnit 和 Cobertura )运行单元测试和集成测试,计算用例覆盖率。
    • 注释覆盖率:SonarQube 等工具可以分析出代码覆盖度
  2. 开发活动:这是了解开发团队工作模式的重要度量。

    • 提交频率:如通过 Github 或其他版本控制系统统计每个开发人员的提交频率。
    • 代码修改频率:如统计某段代码或某个文件被修改的频率,以理解代码的稳定性。
  3. 问题和缺陷:这是评估代码质量问题和风险的关键度量。

    • 缺陷密度:例如,通过错误跟踪系统(如Jira或Bugzilla)统计缺陷数量,然后除以代码行数,计算缺陷密度。
    • 问题解决时间:例如,统计从发现问题到解决问题的平均时间,了解团队的响应效率。

以上就是基于代码的研发效能洞察的主要组成部分。这些度量有助于我们理解代码的健康状况、开发过程的效率,以及代码质量的问题和风险。需要注意的是,这些度量并不能全面反映研发效能,还需要结合具体的项目情况和团队情况进行分析。

基于代码的研发效能度量如何实施

将以上的这些组成部分、时间、人、项目、团队这些结合起来就是一个基本完整的基于代码的研发效能分析系统。

做基于代码的研发效能洞察无非是回答如下的 2 类问题:

  1. 做了什么,做了多少
    • 你的团队做了什么,做了多少
    • 你的团队成员做了什么,做了多少
    • 每个成员在团队中的水平处于什么样的水平,有没有特别突出的(多或少)
  2. 做得怎么样
    • 你的团队的代码质量如何
    • 有没有比较突出(好或坏)的成员
    • 有没有共性的质量问题

要想回答这些问题,基于代码层面,通过代码度量研发的研发效能,影响力产出,代码质量等,拿到客观的数据度量到人、团队、项目。

我们做代码的洞察实施简化后可以有 4 步:

1.引入工具或系统:将代码这个盒子打开,看到度量后的数据。这里当然会有一个问题分析、行业方案对比的过程。

  1. 机制化跟进:需要有一个组织来承接事项,无组织即无成果。结合管理人员的机制化跟进,根据度量的数据和系统的指标,以某个时间间隔来做洞察,发现问题。
  2. 整体洞察:从下往上,形成整体效能的洞察,根据发现的问题,明确代码产出的问题点和能衡量状态的指标。
  3. 复盘:以 3 个月以一个区间来盘点指标和问题,清晰团队/项目的变化。

基于代码的研发效能度量的优势与挑战

当我们引入某些工具或系统来做了基于代码的度量或洞察后,可以得到如下的一些东西:

  1. 全面的代码质量管理:通常能够全面地对代码质量进行管理,包括代码质量分析、代码审查等。
  2. 技术债务管理:通常提供了一种有效的方式来管理技术债务。
  3. 提高团队效率:通过对代码的持续分析和审查,可以帮助团队提高效率,减少错误和问题。
  4. 提供具有洞察力的数据和报告:通常能够提供具有洞察力的数据和报告,帮助团队更好地理解代码质量和研发效能。

以上是一些好的方面,但是也有一些不好的点:

  1. 需要一定的学习和适应:对于新的系统和工具,团队成员可能需要一段时间来学习和适应。
  2. 可能存在一定的成本:这类系统通常需要付费使用,这可能会增加公司的开支。
  3. 可能与现有的流程和工具不兼容:如果团队已经有了自己的流程和工具,那么使用新的系统可能会导致一些兼容性问题。
  4. 安全或隐私问题:如果系统是基于云的服务,这意味着代码需要上传到外部服务器进行分析。这可能会引发一些安全和隐私问题。一般我们选择通过私有化部署来解决,但是成本会更高一些。

最后,随着时间的推移,可能会出现「面向指标编程」的情况。这通常发生在过度重视某些度量标准并以此作为主要驱动开发的团队或组织中。这些度量标准可能包括代码行数、问题数、提交频率、测试覆盖率等。

这样可能会带来一些问题:

  1. 优化错误的指标: 有时,开发同学可能会在不影响或甚至损害总体产品质量的情况下优化这些指标。比如,如果过度关注代码行数,开发者可能会写出冗长和复杂的代码来增加代码行数。
  2. 忽视质量和实用性: 过度关注指标可能会导致开发者忽视代码质量、可读性、可维护性和实用性。例如,开发者可能编写无实际价值的测试,只是为了提高测试覆盖率。
  3. 鼓励短视行为: 如果某些指标被用作评估性能或提升的基准,开发者可能会采取短期行为来满足这些指标,而忽视了长期的技术健康状况。

为避免「面向指标编程」,作为团队的管理者应该谨慎选择和使用度量标准。应该选择那些能反映出代码质量、可维护性和实用性的指标,并且要注意平衡多个指标,避免过度优化某一个指标。同时,要培养一个开放的团队文化,鼓励开发同学关注长期的技术健康状况,而不仅仅是满足短期的指标。

研发管理之生产环境的变更管理

2017 年,Amazon S3 服务在美国东部区域发生了大规模的故障,影响了许多依赖于 S3 的服务和应用。这次故障的根本原因是维护人员在执行一个操作时,错误地将更多的服务器脱机,这超过了系统设计的冗余容量,导致了该区域S3的部分子系统开始备份,进一步扩大了故障的影响。

2018 年 10 月 31 日 GitHub 通过官方博客发布了 2018 年 10 月 21 日「挂掉」的事件分析。GitHub 指出此次事件发生的原因是在 10 月 21 日 22:52UTC 进行日常维护——更换发生故障的 100G 光学设备时导致美国东海岸网络中心与美国东海岸数据中心之间的连接断开。更具体地 GitHub 分析,虽然两地的连接在 43 秒内恢复,但这次短暂的中断引发了一系列事件,这才导致了长达 24 小时 11 分钟的服务降级。

2020 年 7 月,Cloudflare 的 DNS 服务遭受了大规模的中断,影响了许多依赖其服务的网站。该故障的原因是 Cloudflare 的路由器中的一个错误配置。

以上是在网上搜索各大平台的故障描述,可以看到这些故障都是由于生产环境的变更导致的,有些是网络设备变更,有些是配置变更,有些是维护人员在线上执行了某个操作…… 如此种种。

这些问题最终都是开发人员通过系统化的建设,一个坑一个坑的填完了,但是当我们带着一个团队急速前进时,可能来不及做这些系统化的建设,此时通过流程对生产环境的变更进行管理,快速解决或规避一些问题以控制线上故障的出现。流程能保证的是我们做事的下限

在做生产环境变更管理流程之前一定要明晰生产环境的概念和范围,在团队内达成共识,然后再去做流程,以规避因为对生产环境的概念和范围不一致,导致的误解和乌龙。

1 生产环境的概念

生产环境,也称为「产品环境」或「线上环境」,是指实际运行并对外提供服务的环境。这个环境中的软件版本、配置和数据都应该是最新的、经过充分测试的,以保证系统的稳定性和性能。线上环境需要提供24小时不间断的服务。

一个应用或环境是否属于线上环境,主要取决于它是否直接对外提供服务。例如,如果一个应用接收并处理来自最终用户的请求,那么它就是线上环境的一部分。同样,如果一个环境中的数据被用于生产服务,那么这个环境也应该被视为线上环境。

通常,生产环境包括以下 4 个部分:

  • 硬件资源:例如服务器、网络设备、云服务中的硬件部分等;
  • 软件资源:包括操作系统、数据库、中间件、云服务中的软件部分等;
  • 应用程序:实际运行的业务代码和与之相关联的部分,如 CI/CD 工具;
  • 数据:实际的用户数据和业务数据。

定义了生产环境,从生产环境衍生出生产环境的变更。

2 生产环境变更的概念和分类

生产环境的变更是指在生产环境中对任何一部分进行的修改,包括应用程序的更新、配置的修改、硬件设施的更换等。而线上故障大多来源于生产环境的变更,对生产环境的变更进行管理和控制,在较大程度上可以减少对系统稳定性产生影响。

生产环境的变更从其组成出发,再加上外部流量,可以分为 5 类:

2.1 硬件资源变更

硬件资源变更主要包含所有与物理硬件和云服务硬件配置相关的更换、升级或维护。

  • 硬件规格调整:例如,升级处理器(CPU)、扩充内存(RAM)、更换硬盘等。
  • 网络设备更新:包括替换路由器、交换机或进行固件更新等。
  • 存储设备变动:磁盘扩容、存储设备更换等场景会包含在内。
  • 云服务硬件调整:如云计算服务中服务器规格的调整、增减虚拟机实例、增减 POD 数、网络设备变更等。

2.2 软件配置变更

软件配置变更涵盖了所有与操作系统、数据库、中间件以及云服务软件设置的修改。

  • 操作系统参数调整:比如,优化操作系统性能通过调整系统参数等。
  • 数据库设置变动:例如,数据库参数调整或修改索引,导致数据库负载提升甚至锁表导致的无法读写等线上事故。
  • 中间件配置更新:如修改消息队列的设置,调整缓存策略导致缓存穿越或者缓存雪崩等线上问题时有发生。
  • 云服务软件配置调整:包括了云服务的安全规则更新、网络配置变动等。

2.3 应用程序变更

应用程序变更主要包含了所有与业务代码和将业务代码发布到生产环境的 DevOps 工具的更改。

  • 代码变更:代码变更是我们最最常见的变更类型,主要是通过修改代码改变应用程序并通过发布系统发布到生产环境。这也是我们变更管理中风险最大的地方,因为变更的人,变更的位置和逻辑等都是不确定的。除了正常的发布变更,应用的回滚也是应用变更的回滚,因为其改动了线上的应用。实际中,代码变更在逻辑上包括了修复 bug、优化性能、增加新功能等,都需要对应用程序代码进行更新。
  • 配置变更:指应用系统的配置变更,一般是通过配置系统来变更,触发线上应用的热更新或滚动,配置如果是写死在代码中,会变为代码变更。
  • 依赖库更新:实际业务中需要对应用程序所依赖的库或框架进行更新,有些更新可能需要改代码,或者代码本身已经是这么个逻辑,在构建的时候就会带出去。
  • DevOps 工具变更:例如,升级工具版本,或者对某些功能进行调整。
  • DevOps 工具配置变更:如发布脚本中对于 dev 或 prod 环境的配置修改等等,都是高风险操作,线上有着血淋淋的故障。

2.4 数据变更

数据变更很少被人当作变更处理,因为很多时候就是正常的业务操作,如管理后台的批量操作这些,但是这些批量操作如果发生在高峰时期,可能会对线上业务带来较大的影响,轻则速度变慢,重则线上事故。数据变更可以分为线上数据的清理、迁移、更新等操作。

  • 数据清理:如定期删除过期数据,清理无效数据节省成本等等,基于不同的目的,将数据清除,除了可能会影响性能,如果清理错了,将会导致用户丢失,以至用户资产的损坏,这将会是很大的线上事故。
  • 数据迁移:如将数据从一个数据库迁移到另一个数据库,或者因为业务升级,数据需要从一种逻辑迁移到另一种逻辑,除了负载压力,更多的可能是数据错乱或者数据丢失,这两种情况都会引发用户投诉。
  • 数据更新:如前面说的管理后台批量更新,或者上线新模块在已有的数据库上初始化数据等等,这种最多的情况是其引发的 DB/ES 等存储类中间件的高负载导致服务的异常或引发线上事故。

2.5 流量变更

流量变更和上面四个类别不同,其是从外部来看的,主要包含了流量变化的情况。这里不考虑攻击类的流量。流量一般是带来高负载,或者由高负载引发的链路异常或雪崩,从而导致整体服务异常或线上事故。

  • 负载调整:如对调整负载均衡策略,更改流量路由等由于考虑不周引发某些节点过热或流量过大,引发级联反应,从而出现异常或事故。
  • 后台投放或大型促销活动:如没有提前通知的后台投放或大型促销活动、特殊事件导致的流量激增,可能需要进行负载调整或资源扩容等,如果某些链路存在容量上限,或者达到扩容的上限,就会引起线上异常或事故。

以上 5 种类型画成简单的脑图,如下:

图片

3 变更管理

变更管理是指以可控的方式对线上的服务、配置或基础设施进行变更,从而减少变更对业务和服务质量的影响,快速处理变更可能带来的问题,提升系统的稳定性。

变更管理,咱们从组织和流程机制两个方面来看。

3.1 组织

一个事情要想有力的执行下去,一定是有一个组织来保障事情的整体节奏和推进。

从组织的角度,整个变更管理的组织成员角色可以分为以下几种:

  • 变更管理主导者:一般来说,这个角色通常由技术团队的高级管理者来担任,并且这个事情它本身是一个从上向下的事情,需要更上层的负责人来推进事项,一般是 CTO 或 VP,或质量的负责人。他们需要确保变更管理策略和流程的成功实施,对整个变更管理过程负责,并需要对所有的变更决策拥有最后的决定权。

  • 变更管理委员会:这是一个跨部门的团队,包括来自业务、开发、运维、质量保证等部门的代表。他们的任务是评审即将进行的变更,评估其对业务的影响,以及是否符合公司的战略目标。他们还负责改进变更管理流程,并对变更管理的效果进行监督和评估。在实际的实施过程中可能没有正式的名称叫委员会,可能叫 XXX 质量小组,或者就是某个研发中心的管理团队兼任。

  • 变更经理:这个角色负责确保变更管理流程的日常运行,是实际的变更控制推进者,他们需要协调变更的执行,确保所有的变更都通过了必要的评审,已经准备好了回滚计划,并且变更后的效果已经得到了验证。在实际的实施过程中,变更经理大概率是某个 Leader 或者质量的负责人,或者 PM。

  • 变更执行人:这个角色负责协调变更的具体实施,例如安排变更的时间,通知相关人员,收集反馈,等等,一般这种变更由一线的开发,SRE 来做,也有大一些的公司有专门的职位。

3.2 流程机制

变更管理有一个理想状态的标准流程,其大概如下:

  1. 变更申请:在我们的流程中可能是创建发布记录,或者申请紧急发布
  2. 变更评审:变更评审主要是检查变更过程是否完备,以降低变更的风险,其包括如下内容:
    1. 就绪分析:材料是否完备,人员、设备、软件、网络是否就绪,测试是否达到上线要求等。
    2. 风险分析:架构、性能、业务、合规等方面的风险评估,变更内容是否属于需求范围,变更是否可控。
    3. 重要程度:变更属于一般、重要、紧急、标准哪一种。
    4. 变更审查:内容是否满足业务需求,内容是否通过测试,测试是否全面、有效。
    5. 应急管理:变更步骤、应急方案、回滚方案、应急预案是否完备。
    6. 变更实施:变更计划时间如何安排,发布及回退操作步骤是否完备,自动化步骤情况。
    7. 变更验证:变更涉及的业务、技术验证方法与时间安排。
  3. 变更审批:相关负责人对于变更评审的结果进行确认,并审批通过。
  4. 变更执行
    1. 根据发布计划执行发布操作,一般应该有一个灰度的过程;
    2. 验证线上功能并回归主流程;
    3. 持续灰度,观察用户直到灰度完成。
  5. 变更验收
    1. 对发布的功能进行验收,对于影响范围内的功能进行验收,对业务主流程进行回归验收;
    2. 留守,并观察日志、监控服务负载等,这个操作是为了及时发现验收检查漏掉的问题,或者及时处理隐藏的问题,以减少变更后产生的问题对线上业务的影响。

我们做这个流程是形式上的安慰,还是僵化的惯性,还是能真正地解决问题,是我们在做这个流程以及执行这个流程中需要着重思考的问题。

在变更前,即我们变更线上环境前需要自己做 Code Review,以及交叉的检查,以尽量减少问题流转到后面的操作中,节省问题的处理成本。

在标准流程之外,另外还有两个特别重要的点,一个是周知,一个是盘点。

周知在形式上可以是邮件、群通知、群消息,通过这些方式,将研发自己做的前面所定义的线上变更周知给相关方:「我们做了 XXX 操作,可能会影响 XXX ,你们看下对你们自己有没有影响,如果有相关告警可以找我。」

变更虽然有流程,但是流程保证的是过程,对于过程中的问题通过变更盘点的方式,阶段性回顾问题和成果,在变更委员会中达成共识并继续迭代。在每次迭代的时候我们可以问自己如下的一些问题:

  • 与上次回顾相比,变更对线上的影响有更严重吗?有影响到稳定性吗?
  • 变更流程是否有什么问题,是否需要专项来解决?是否应该解决?
  • 上次回顾安排的事项落实了吗,对应的情况如何,是否有更新到流程或系统中?

以上的回顾操作我们建议以某个管理系统来承载,并且这个管理系统是带有通知等功能,以更好的将变更相关的信息周知出去。当然,也可能直接共享文档+群通知来搞。

4 小结

上面的变更管理只是流程方面的,对于实际中变更管理最好是能在类似于 DevOps 系统中的落地,最少也是在项目管理或流程系统中落地。

生产环境的变更管理是一项复杂而重要的任务。通过对生产环境的良好理解,结合有效的组织、流程和系统工具,我们可以实现对生产环境变更的有效管理,保证业务的稳定运行,提升用户的使用体验,同时也提升了我们自身的运维效率和质量。这也是我们做研发管理必须要完成的任务之一。