经济下行,企业还在“裁员至上”?
最近小红书、B站崩溃,又延伸到某云服务厂商问题频发,让人忍不住戏谑:“这算不算裁员裁到大动脉?”
在阿道看来,各大企业的裁员动作,绕不开的依旧是“人月神话”:盲目加人带来的是成本的倍增和效率的下降。而大规模裁员也从另一种角度诠释了“人月神话:盲目裁人带来的则是整体业务的崩盘。
管理者更应认识到这种资源悖论,关注如何提效,而非简单的人力堆砌或缩减。
关于团队提效,阿道前段时间抓住春哥(禅道软件创始人王春生)聊了聊他的经验和看法。整理出来禅道团队组织架构、流程规范到研发等各层面的工程实践,希望能带给大家一些启发。
“纪律”共识,是组织执行的血液
很多人对敏捷管理存在一种误解,认为敏捷就是“想干啥就干啥”。春哥提到这其实是团队缺乏基础的“纪律”做保障。
如何理解这里的“纪律”?春哥认为,团队中的“纪律”体现的是团队成员间建立了基本的共识和协作规范,以及约定俗成的工作流程。这是保证团队协作的基础。好比军队训练,通过队形训练、内务训练等这些看似无实战意义的事情,来锻炼团队的意识和纪律性,将这些规范真正融入血液、基因中。
因此,禅道的实践会更关注制定实践规范,如明确的工作流程和任务分配,以及编码上的规范(IDE的规定、代码注释写法、分支管理)等。在明确的“纪律”下,团队成员也可以形成良好的工作习惯,提高工作效率和质量。
1)扁平化组织:做乘法,而不是做减法
帕金森定律是这样形容行政组织的:在行政管理中,行政机构会像金字塔一样不断增多,行政人员会不断膨胀,尽管每个人都很忙,但组织效率却会越来越低下。如果说要问哪种组织架构更适合当下的禅道,春哥会说:扁平化组织。
这种扁平化的管理,不仅仅是在做减法,更是在做效率的乘法。
作为一种去中心化的组织结构,扁平化组织能够减少管理层次、简化决策流程。那些大而繁琐的层层审批没有了,留下来的自然是群策群力和孵化创新的氛围。
春哥也明确了禅道团队扁平化的“纪律”:大方向上。在扁平化组织中,每个声音都值得被听到。
在禅道的具体研发工作中,每个研发小组会在一段时间内相对固定地专注于某个方向。一段时间后,根据某些项目或决策方向的需要,各个研发小组会被打散、重建。这种组织架构与调整,一方面会让团队更好地适应业务需要;另一方面,也会让研发团队的每个人都能熟悉禅道的不同业务。
在这种模式下,研发成员可以灵活地参与到禅道任意功能模块的开发工作中。就像德鲁克所说:“管理者的一项具体任务就是要把今天的资源投入到创造未来中去”。
2)极限编程:打破程序员的“领地意识”
比尔·盖茨曾说过:“团队合作是企业成功的保证,不重视团队合作的企业是无法取得成功的。”我们不难发现,不少程序员对待自己的代码都有一种很微妙的状态:一种“领地意识”,即我负责我的模块,你负责你的模块,井水不犯河水。这种状态在工作中甚至是一种常态。
想让程序员突破这种状态,并不容易。于是我们将极限编程的工程实践运用在了研发工作中,比如采用结对编程、统一编码规范、实现代码集体所有权等等。
在团队初期时,新人较多,会采用“老带新”或“两个新人”结对编程的方式,在编程中互相提醒、协作。结对编程的频率也会增加。
随着频繁的结对编程,成员会从新手转为熟手或高手,彼此间更有默契,此时,大家能够拉齐到同一水平甚至更高的水平中。到了后期,固定的结对编程形式就会减少,并逐渐演变为更多的代码评审和设计评审。
在这一过程中,代码集体所有权也会逐渐深入团队成员的观念中,帮助团队更好地维护项目。
3)人才是公司最大的资产
大荣法则告诉我们:企业未来的生存和发展应着眼对人才的培养。春哥也一直非常重视人才的培养。
在团队中,不同性格成员的协作状态和成果各有千秋。春哥认为,通过规范化的流程,新成员可以迅速融入团队。而另一方面,也要关注团队成员的效能改进。
目前我们禅道自身的实践是:
让团队Leader为每位员工建立基线,重点关注研发过程中的缺陷及其密度。例如,分析一个人完成的故事点数与产生的Bug数,帮助员工了解自己的现状。接着,团队会分析缺陷率较高的原因,如设计不足或缺乏单元测试等,并针对性制定相应的行动路径。通过监控后续指标,评估改进措施的有效性。
“人才是公司最大的资产。”每个人都是天才,但如果要用爬树的能力来评价一条鱼,它也许终生都认为自己很愚蠢。每个团队都要学会制定个性化的改进措施,保障每位员工都能提升效能,促进组织的整体效能提升。
破解流程困局,创新实践
提及管理,绕不开的是流程、人、工具三方面。要想提高效能,需要好的流程、优秀的人才和合适可落地的工具。在春哥看来,“只靠流程规范和严格的纪律,如果没有工具支持,是无法成功的。”
于是,我们将禅道的工程实践融入工具中,通过工具将这些流程、行为固化下来,做到流程工具化,管理一体化。
1) AI辅助代码,从试点到未来常态
如今AI(人工智能)应用范围的不断扩大,在众多领域展现出强大的影响力和创新力。
春哥前段时间参加了微软的一场AI Day活动(详情可看: 微软 AI Day 半日游),活动里提到,目前很多企业正在通过各种AI工具辅助编码,并且代码采纳率能达到20%~30%的实践,这比例也是目前行业普遍的代码采纳率。
我们目前也正在通过代码生成工具进行小规模的编码试点,将开发环境切换至VS Code,然后通过WAM模式辅助生成代码。实践了一段时间后,从效果来看,其可行性也得到了验证。
所以,后续禅道研发团队会统一切换至VS Code环境中,充分利用大模型的能力辅助编码。我们还会将AI工具集成到我们的DevOps流水线中,更多运用AI工具进行辅助。未来,AI辅助编码的工作方式,将会是研发的工作常态。
2)自动化工具赋能研发管理
- 编码规范,是团队技术精进的基石
无规矩,不成方圆。在编码上,禅道也有一套自己的规范。比如,我们会希望研发团队能进行渐进式的代码改动,能尽量小批量、频繁地commit代码,并且每次commit代码的行数不能超过20行。
不过在实际过程中,我们发现尽管在流程上做了很多规范,但依靠大家自发地执行,是难以监督的。春哥也提到:“指望整个团队自发地达成一个状态,几乎是不可能的事情。”
于是我们通过工具,将编码规范进行了固化落地。比如,我们在自研的DevOps平台中增加了“门禁”。当研发人员在本地commit时,会触发hook,对当前代码做diff。如果当前代码行数不能满足少于20行的要求,就不能成功提交代码。
分享我们研发团队在代码规范上的一些具体实践,希望能给大家一些启发。下图是我们的远程分支规范示例:
如图,大家可以很清楚直观地看到我们的规范,若是中长期的功能特性,我们会用Feature来作名称规范 ,补丁会用Patch ,并且必须带上 Bug ID 和Ticket ID,Bug修复用Minor等等。将流程实践固化,并用DevOps工具将流程工具化,这样既能便于领导层了解和跟进团队研发现状,也有助于新人快速上手,融入团队。
除了利用DevOps工具,固化研发流程,还可以通过自动化测试工具(比如禅道自研的ZTF自动化测试工具、ZenData数据生成器),在提高执行效率和覆盖范围的同时,尽可能保证研发的交付质量。
- 沟通,是管理的浓缩
被日本誉为“经营之神”的松下幸之助,曾言:“企业管理过去是沟通,现在是沟通,未来还是沟通。”如果没有人,那么前面的一切就没有意义。
为了团队更好地沟通,我们将工程实践与自研的聊天软件(禅道客户端)融合。比如,团队可通过聊天软件直接推送代码,使得团队可以随时进行代码评审,减少沟通成本,方便团队尽可能快地、能随时随地做持续集成。
上述这些举措,很多大厂都能做到,但显然,成本也会很高。对千千万万个像我们这样的中小企业来说,很难承担这种高额的实现成本。于是,我们团队在将这一整套研发流程跑通的同时,也将经禅道团队实践总结出来的、可落地的解决方案提供给大家。
换句话来说,实践出真知,只有经自身验证成功的实践,才能给用户带来切实可行的效益。
对企业管理来说,从来不是需要锦上添花,只有逆境突围,才更值得庆祝。
相关文章:

经济下行,企业还在“裁员至上”?
最近小红书、B站崩溃,又延伸到某云服务厂商问题频发,让人忍不住戏谑:“这算不算裁员裁到大动脉?” 在阿道看来,各大企业的裁员动作,绕不开的依旧是“人月神话”:盲目加人带来的是成本的倍增和效…...

学习笔记之Java篇(0729)
p 数组 大纲知识点数组的概念数组的定义、四个特点数组的常见操作普通遍历、for-each遍历、java.util.Array类用法多维数组多维数组的内存结构、存储表格、Javabean和数组存储表格常见算法冒泡排序基础算法、冒泡排序优化算法、二分法查找(折半查找) 1、…...

吃肉的刷题记录4-基础知识-字符串
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 leetcode.186.反转字符串中的单词 leetcode.186.反转字符串中的单词 https://leetcode.cn/problems/reverse-words-in-a-string-ii/ 给你一个字符数组 s …...

人工智能与机器学习原理精解【7】
文章目录 凸优化基础理论加权正规方程线性回归模型加权最小二乘法加权正规方程注意使用Diagonal函数使用diagm函数总结 加权最小二乘法加权最小二乘法的定义加权最小二乘法的算法加权最小二乘法的计算加权最小二乘法的原理一、基本思想二、原理详解三、总结 加权最小二乘法的例…...

ResNet学习笔记
《Deep Residual Learning for Image Recongition》:用于图像分类的深度残差学习。 ResNet(残差网络)是在2015年由微软研究院的Kaiming He等人提出的,旨在解决深度神经网络训练过程中的梯度消失、梯度爆炸问题,并允许…...

使用chainlit快速构建类似OPEN AI一样的对话网页
快速开始 创建一个文件,例如“chainlit_chat” mkdir chainlit_chat进入 chainlit_chat文件夹下,执行命令创建python 虚拟环境空间(需要提前安装好python sdk。 Chainlit 需要python>3.8。,具体操作,由于文章长度问题就不在叙述…...

【根据字符出现频率排序】python刷题记录
R2-字符串算法 包哈希表的呀。 注意 class Solution:def frequencySort(self, s: str) -> str:dictdefaultdict(list)#字符串不能直接排序,需要转换为列表["a","b","c"]slist(s)for str in s:if not dict[str]:dict[str]1else:…...

活动报名小程序
#活动报名工具# # 活动报名小程序 ## 项目简介 一款通用的活动报名工具,包含活动展示,微信支付,订单管理,分享评价等功能。 品客聚精彩,有你才精彩!不只有线下活动还可以进行线上裂变活动。 …...

unity基础问题
1.一个列表中的UI有放大效果,用什么实现? 缩放,Layout组件可以勾选使用子级缩放,这样缩放之后也能保持间距 2.UGUI事件传递机制的冒泡机制是怎样的 事件系统从内向外遍历UI层次结构,通知父级UI元素有关该事件的信息。类…...

RedHat Enterprise Linux 7 YUM源(本地/网络源)配置详解
目录 一、挂载 二、建立本地源 三、建立网络源 四、验证可行性 一、挂载 ——将光盘挂载到 /mnt 下 当/mnt中有如图内容时,即挂载成功 若挂载光驱/dev/sr0时报错:mount: no medium found on /dev/sr0 解决措施:查看该设备状态是否全部勾选…...

关于顺序表数组下标的一些关系梳理
...

VS C++ Project(项目)的工作目录设置
如果只是简单创建一个VS CProject或者MFC Project,可能很多时候,只关心将Project放在硬盘的那个位置,与Project目录相关的的其他问题,并不引人注意,我们也不是十分在意。有时我们不得不进行工作目录方面的设置…...

STM32自定义协议串口接收解析指令程序
1、在使用串口接收自定义协议指令时,需要串口解析收到的是什么指令,举例通信报文为 上位机->单片机 名称 长度 备注 帧头 1Byte 0x5A 0x5A 帧长度 1Byte 数据包的长度0x00-0xFF 数据包 命令字 1Byte 功能标识 数据 可以为空 校验 …...

STM32——GPIO(点亮LEDLED闪烁)
一、什么是GPIO? GPIO(通用输入输出接口): 1.GPIO 功能概述 GPIO 是通用输入/输出(General Purpose I/O)的简称,既能当输入口使用,又能当输出口使用。端口,就是元器件…...

VulnHub靶机入门篇--kioptrix.level 3
1.环境准备 靶机:Kioptrix Level 3(Nat模式) 下载地址:https://download.vulnhub.com/kioptrix/KVM3.rar 攻击机:kali(192.168.26.128)(Nat模式) 2.渗透测试 信息收…...

aiGPT系统源码★重大升级★AI写作/AI绘画/AI音乐/AI视频
亲爱老铁们好,又一段时间未更新内容了,我依然是爱你们的神点妹,今天点妹给大家带来一波新的福利:咱们用的aiGPT经过攻城师们近半年来夜以继日的技术升级,今天终于迎来了新版上线首秀。此次升级内容包含:首先…...

Vue Router高级用法:动态路由与导航守卫
Vue Router是Vue.js官方的路由管理器,它和Vue.js的核心深度集成,让构建单页应用变得轻而易举。 动态路由 动态路由允许你在路由路径中使用变量,这些变量可以从实际的URL中获取,并传递给对应的路由组件。 定义动态路由 在route…...

江科大/江协科技 STM32学习笔记P9-11
文章目录 OLED1、OLED硬件main.c EXTI外部中断1、中断系统2、中断执行流程图3、STM32中断4、中断地址的作用5、EXTI6、EXTI基本结构7、AFIO复用IO口8、EXTI框图或门和与门 9、旋转编码器介绍10、硬件电路 OLED 1、OLED硬件 SCL和SDA是I2C的通信引脚,需要接在单片机…...

【培训通知】成为Power BI数据分析可视化实战第一人,加入3天直播即可
Power BI数据分析可视化实战课程培训是一门旨在提升学员在数据分析与可视化领域能力的专业课程。以下是对该培训课程的详细介绍: 一、课程概述 Power BI 是一种业务分析服务,能够提供深入的见解,帮助用户实现快速、明智的决策。该课程通过实…...

24暑假算法刷题 | Day22 | LeetCode 77. 组合,216. 组合总和 III,17. 电话号码的字母组合
目录 77. 组合题目描述题解 216. 组合总和 III题目描述题解 17. 电话号码的字母组合题目描述题解 77. 组合 点此跳转题目链接 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输…...

一篇文章告诉你对讲机为什么不能被手机取代的7个原因
在智能时代,手机几乎无处不在,涵盖了从基本通信到多媒体娱乐的一切功能。然而,即使在这种情况下,对讲机仍然没有被完全取代。这不仅仅是出于怀旧或专业需求,还有许多实质性的原因使得对讲机在特定领域和情况下仍然保持…...

LION论文阅读
一、论文主要出发点 3D目标检测的性能受限于3D卷积的局部感受野。 Transformer在3D检测领域效果很好,但由于算力限制,已有的工作在pillar内,或将voxel分组在组内进行特征交互,阻碍了他们捕捉更远程的依赖关系。 线性RNN算子的计…...

在Android上实现汉字笔顺动画效果——HanZiWriter
序,万般皆是命,半点不由人。 Hanzi Writer 是 javascript 免费开源库,根据汉字书写时按照笔画顺序的特征,可以播放正确笔画顺序的描边动画和练习测试。支持简体字和繁体字。可以让全球用户能够通过手绘模仿的方式来学习和练习书写…...

黑马头条vue2.0项目实战(一)——项目初始化
1. 图标素材(iconfont简介) 制作字体图标的工具有很多,推荐使用:iconfont-阿里巴巴矢量图标库。 注册账户 创建项目 可以根据项目自定义 class 前缀 上传图标到项目 生成链接,复制 css 代码,在项目中使用…...

Unity Shader动画:用代码绘制动态视觉效果
在Unity中,Shader是运行在GPU上的小程序,用于控制顶点和像素的渲染过程。通过编写自定义Shader,开发者可以创造出各种令人惊叹的动画效果,从简单的颜色变化到复杂的流体模拟。本文将探讨如何使用Unity Shader来实现动画效果。 Sh…...

智税集成2.0生成凭证
:::info 💡 整体业务流程 从A9服务器中取数,生成列表数据,写入到对方oracle数据库中。 ::: 项目关键点 1.连接数据库 左连接连接本地SQLserver数据库、右连接要链接A9开票服务器的数据库然后设想用SQLserver 自带的外部连接来连接oracle数据…...

B4005 [GESP202406 四级] 黑白方块 【暴力枚举】【前缀和】
#include<bits/stdc.h> using namespace std; int n,m,ans,tmp; char mp[20][20]; int cheak(int a,int b,int c,int d){//a<c b<dint cnt0;//枚举矩阵中的每个点 for(int ia;i<c;i)for(int jb;j<d;j)if(mp[i][j]1) cnt;//统计黑格的个数 return 2*cnt(c-a1…...

深度学习趋同性的量化探索:以多模态学习与联合嵌入为例
深度学习趋同性的量化探索:以多模态学习与联合嵌入为例 参考文献 据说是2024年最好的人工智能论文,是否有划时代的意义? [2405.07987] The Platonic Representation Hypothesis (arxiv.org) arxiv.org/abs/2405.07987 趋同性的量化表达 …...

决策树与随机森林:比较与应用场景分析
决策树与随机森林:比较与应用场景分析 引言 决策树和随机森林是机器学习中广泛使用的两种算法,因其简单性和强大的功能而被广泛采用。决策树是一种树形结构的决策模型,易于理解和解释。随机森林则是通过集成多棵决策树来提高预测性能的模型…...

C#用Aspose.Cells导出Excel,.NET导出Excel
ASP.NET MVC 控制器里面Action处理,下载文件,输出文件流 public async Task<ActionResult> ExportNewsAuthorFee(string deptId, DateTime? startDate, DateTime? endDate){if (startDate null){startDate DateTime.Parse(DateTime.Now.Year …...