文档章节

一个工程师对流程管理的思考

我的上铺叫路遥
 我的上铺叫路遥
发布于 2014/05/11 23:30
字数 3380
阅读 5603
收藏 130

我平时很少写博客,我是个技术人员,一般来说技术人员的博客应该以技术为主,但同时我又是一个懒人,对于技术我喜欢“亲身体验”而不喜欢“写出来”,因为我觉得把技术对别人说清楚要比实现它更困难。实际上这段时间我都在看别人的博客,所以一直以来我只是个吃白食的:)

为什么现在我要跨界谈一个偏重管理类的话题呢?因为过去经历的一些事促使我对项目的流程管理进行一些思考,并形成了自己的一套看法和逻辑,而我也很愿意将我的看法发表成文,不喜欢憋在脑海里太久。至于能得到多少认同倒是并不在意,我觉得一个人观念的形成源于他对事物本质的理解和认知,而这种理解和认知又同他过去的经历有关。在此通报一下我过去的工作经历,本人电气专业出身,在一家台资IC企业做过三年软件工程师,无任何工程管理上的学位和经验,所以题目定为“一个工程师的思考”以避免把话说太满。但我不认为一个话题出自一个非专业人士之口就得贴上“瞎BB”的标签,作为工程师的我好歹也是大工业时代整条生产链上的一颗“螺丝钉”,虽然项目流程不是我设计的,但身为一颗“螺丝钉”也有反馈一下的权利吧。何况我也不想洋洋万言写成精品,权当一家之言耳。

流程管理在生产上已被奉行多年,但围绕它的争议仍不停歇。有些人喜欢它,认为流程提升了生产效率,有利于培养企业文化;有些人排斥它,认为它束手束脚,僵化死板。前者大多出自管理层,后者大多出自工程师,他们都是站在自己的立场看问题的,能不能统一起来看呢?我们到底需不需要流程?或者多大程度上接受它?在阐述我的逻辑之前,先从我对流程的认知说起。

流程的本质是什么?我的理解是流程是一种介入机制托管机制“介入”是指生产环节上多大程度让外部势力参与和干预,主要表现为人员分工;“托管”是指存在一种自动化工具帮你简化一些步骤,表现为对工具的使用。它们的区别相当于载人飞船和无人飞船。当我们说“这个项目应该走个流程”实际上等价于“要让外部人员参与进来”以及“你该试试这个工具”这些同义语。

让我们以开源项目Linux为例深入解释一下。在上世纪90年代初出现了Linux内核,是由芬兰21岁的大学生Linus Torvalds开发的,他先是写了一个多任务的终端仿真程序来连接modem,又写了一个磁盘驱动程序访问硬盘,再写了一个文件系统管理资源,后来又移植了bash和gcc,一个操作系统雏形就这样建立起来。在这个阶段都是Linus一个人DIY,并没有他人介入,顶多也就通过邮件同少量用户交流一些需求。而且当时工具也不太发达,他甚至不得不手动修改gcc源代码以实现内核自编译。不管怎么样,个人项目还是发布了。后来开始有人协助加入图形、网络各种服务和模块,再后来就演变成一项声势浩大的开源运动,连商业公司都参与进来开发各种发行版。这是Linus意识到自己必须放手,因为随着用户需求的增多,代码量膨胀,版本发布周期也在缩短,这也是为何Linus又发明了版本控制软件git;社区发展壮大导致成千上万开发者参与其中,不仅仅贡献代码,测试、写文档、打包、做网页、翻译、技术支持、售前售后……把整条生产线纳进来了。这么多人,这么多活,没有分工,没有秩序显然是行不通的,于是就像商业公司一样,开源项目也要建立一套好流程,以便外部人员顺利平滑地介入。

上面提到的“介入”和“托管”两种机制,前者是参与分工,后者是工具使用,现在大多数开发者和管理层对工具使用都有某种共识,而且事实上实施很多年了。真正的分歧在于“介入”,这也是流程管理中最大的争议,因为工具是可以替换的,而一旦“介入”是不可逆转的,因为一旦介入,你很难把别人清退出去。何时介入,介入程度多深都会成为争议焦点。一个工程师在项目早期的构思建模阶段一般是不欢迎他人参与进来的,很多人说这会干扰他们的思路,顶多开放一些有限的口头交流,但想要往我的代码中提交pull request(以下简称PR),没门!这种情形不禁让人联想到家里养的母猫在小猫尚未睁眼之前不允许任何人触碰,就算自家主人也不行,不然就摆出一副凶巴巴要跟你拼命的架势(狗妈妈可能无所谓,这也是为何有的程序员性格更像猫而不是狗一样易于管教)。母猫的想法可能是这样的:1.这是我亲生的,凭什么让你碰?2.抚养的细节只有我最懂,兽医也不行。这同一些主观意识强烈的工程师心理如出一辙,这也解释了他们同别的工程师甚至管理层在流程问题上发生争执,说白了就是不想被介入。但随着小猫的成长,母猫终究还是会允许主人帮忙照料养育自己的孩子,以分担一些麻烦,如同工程师最终还是会与团队一同坐下来商谈软件打包发布等各种琐事,以及放开并回应来自社区提交的PR。

如何看待流程早期介入的必要性?从工程师的角度看我更倾向于早期不介入为好,因为程序最初的构造是靠人的创造性思维,开发人员需要在脑海中(或纸上)精心构建一座模型大厦,这种思维具备某种独立性和连贯性,最不希望被打断或中途崩塌,否则情绪上无法接受。对项目主管来说,如果限定时间内一个人就能搞定的模块,就让他放手去做好了;如果是几个模块分工,就按照个人的专业水平安排各写各的好了;时间允许的话,最好不要几个人共写一个模块,除非结对编程。用Linus的话来说“从一开始就告诉自己这份工作只有你一个人负责,并且做好完成它的准备。如果你一开始就认为全世界的人们都会联合起来为你的项目工作,一起创造一个更美好的世界,那么你可能不会走得很远。”

这里还有成员之间的信任问题,主管是否应该在背后监视每一行代码?这是值得讨论的,我还是引用Linus那句话“不要试图控制别人和他们的代码。”有的主管提出代码质量的忧虑,但这引申出另外一个命题,如果代码质量可以衡量一个程序员个人能力,你担心开发过程中的质量,那当初何必把他招进来呢?如果代码质量真出了问题,那就是招聘时埋下的隐患了,作为管理层自身也有责任的。

这里还要说一下,不介入不等于成员之间不交流不讨论了,不同意见的交换是有益的,但只是参考而不是强制性的,而且这种交流最好由工程师主动提出来,主管只负责调整项目进度。另外code review是十分必要的,但时间线最好授权给工程师自己把握,免得一个不成熟的构思匆忙提交下去一通review给提前定型了,何况开发人员在此期间还会私下里觉得不满还会推翻重来,搞得其他成员浪费时间白白折腾。当然我相信一个好的工程师也应该有良好的自觉性和自律性,在招人的时候成为考察重点,要胜过在开发过程中背后另外搞一套监控。

以上讨论的主要是流程管理早期介入的问题,中后期的介入机制会比较复杂比较细节化,由于笔者经验水平所限不便多谈。个人觉得介入也需要同项目团队的规模匹配,根据现状和进度因势导利,逐步介入,而非开闸泄洪,一口一个胖子。另外不同公司的流程制度照搬要谨慎,如同协议那样,如果达不成共识而强行介入,反而对团队不利。

下面谈谈托管机制,也就是工具的使用。其实比起介入没啥好谈的,因为无论是管理层还是工程师都认同工具在流程效率上的重要性,事实上早已使用很多年了。就我个人而言,版本控制用过perforce和git,项目管理用过redmine和trello,各有各的特色。工具也不限于软件,开发语言本身也是一种工具,比如一些高级语言实际上也提供了“托管”功能,帮程序员管理内存、实现并发之类的。工具的一个优势在于将一些重复低效的劳动从流程中剥离出来,简化为开发人员对工具的使用技能,比如面试官在招人时只需要问你会不会使用git而不会让你自己手动merge代码。另一个优势就是讲流程中的操作规范化、标准化,比如git的成功在于它借鉴了Unix的KISS原则设计了一套简单命令接口:clone、add、reset、rm、commit、checkout、push、pull等,这么几个命令足以满足全球最大开源项目Linux的日常代码托管需求了,难怪后来衍生出github、gitlab各种git家族都遵循同一套命令接口,如同达成默契的协议,你只要会用git,就可以在所有开源托管平台上来去自如,让流程简化效率提升。好的工具使得全球范围内的协作项目成为可能,事实也证明了Linux社区所取得的成功。

与此同时我也思考过这两种机制之间的辩证关系,因为一个是“载人”的,一个是“无人”的,我曾怀疑过当管理工具日益强大时,来自外部势力的介入需求会否因而减少,也就是说介入和托管在流程管理中的比重是否是此消彼长的?如果是,这个世界的生产链条上人是否终将被工具取代呢?过剩的人力资源是否使得未来工程师失业呢?在现实世界中的确看到大量个人项目,只要凭借个人对工具技能的掌握,完全不需要外人介入就能完成整个项目流程。然而答案是否定的。因为托管工具仅仅是将低效重复的劳动从流程中剥离,并未满足全球科技行业日益增长的创造性需求。也许以前那些从事手工merge代码的专职人员因此失业,但从全局来看是好事,那就是将开发人员从日常繁杂事物中解放出来,投入到更激动人心的创造性活动中去。只要人的脑容量增长速率追不上人类社会发展出现的各种变动,市场仍需要更多工程师投身其中,协同参与。现实世界也并未印证这种担忧,开源项目的代码量和参与人数都在逐年上升中。

如果你的团队在项目开发上进展不顺,不妨回过头来看看自己的流程管理,当初在人才选拔和介入机制上是否需要整改,亦或是换一个更先进的工具。

参考:

Linus Torvalds's Lessons on Software Development Management

Linus Torvalds谈软件开发管理经

© 著作权归作者所有

我的上铺叫路遥

我的上铺叫路遥

粉丝 84
博文 3
码字总数 8610
作品 4
浦东
程序员
私信 提问
加载中

评论(31)

gahello
gahello
小企业要效率,大企业需要流程;小企业追求个人效率最大化,大企业是流程标准和控制;“早期”这个标准,视环境不同而异;
gahello
gahello

引用来自“haitaosoft”的评论

早期还是得多听听看看各方的意见才是正确的做法吧
否则,后期再加、改,才是要命的
是啊
gahello
gahello

引用来自“周星_开心白日梦”的评论

招人就应该用80%的时间而不是随便找个大学毕业生,招来了就要信任,放手,要不招人干啥,自己都干了就好了,然后人家还真是什么都自己指导着你干。。。
这个想法很好
梁欢
梁欢
赞一个79
周星_1980
周星_1980
招人就应该用80%的时间而不是随便找个大学毕业生,招来了就要信任,放手,要不招人干啥,自己都干了就好了,然后人家还真是什么都自己指导着你干。。。
周星_1980
周星_1980

引用来自“ruki”的评论

不仅是代码上的介入 我们这边的领导经常会介入来打乱整体的产品开发 主管都没实权 经常做无用工 对外一个版本都没发 内部已经重写了好几遍 版本迭代到3.0了
我们全公司都要做好老大随时临幸于你的准备
雷毅
雷毅
写得挺好。
另外,我最希望看到从搞得快可以多赚多少钱或者减少多少损失、搞得稳可以多赚多少钱或者减少多少损失的角度来看软件产品的队伍规模、队伍结构、需求与变更控制力度等现实问题如何解决的分析文章
期待!
12年来,我见过超过1000份移动互联网产品的白皮书、商业书,令人失望的是,99%沦落为科技玩具、流产婴儿、吸引VC的工具等等,非常遗憾
jazz
jazz
介入就是把相干人员include进来,那项目中人的反馈呢(包括自主的和被动的)。这个也很重要啊,比如流程中出现了问题怎么办?
金拱门
金拱门
如果你的团队在项目开发上进展不顺,不妨回过头来看看自己的流程管理,当初在人才选拔和介入机制上是否需要整改,亦或是换一个更先进的工具。
这点深有体会。人才选拨的话其他 重要性不大。因为 选拨的人才,只要不是蠢材,在进入公司理论上几个月应该会熟悉大体流程的。
而项目进度跟不上,更多是 领导层对于介入 不及时引起的。 我做过领队,因为没有介入整个团队中,让他们自由耕放,结果导致后期不少项目 变得不可控了。 当时想介入已经来不及了。
F
FaintX

引用来自“我的上铺叫路遥”的评论

引用来自“我的上铺叫路遥”的评论

引用来自“haitaosoft”的评论

早期还是得多听听看看各方的意见才是正确的做法吧
否则,后期再加、改,才是要命的

文中并没有排斥意见交流啊,只是建议最好由工程师主动提出。

引用来自“haitaosoft”的评论

现实问题是:很多情况下,都不是 最好 的,所以才成为问题
你如何确定什么是最好的呢?意见的交流是参考,关键是一开始无法确定的,没有人是先知,好的结果总得在做的过程中验证出来的,实践是检验真理的唯一标准。那么避免不了推倒重来的过程,就像画家一样。在这个阶段,少的介入可以降低重构的成本,但意见和反馈可以伴随在这个过程中。

赞你~
技术团队管理笔记(一)-识人

声明:所谓的技术管理笔记,是一位原大公司的码农不甘寂寞,出来加入小公司后的管理心得记录。大公司到小公司的落差是全方位的,制度,氛围,资源,人才皆有。从最初的不适应到一路磕磕碰碰活...

jackjoe
2017/11/19
0
0
ZStack 3.6.0,支持云主机从任意KVM云平台在线迁移至ZStack

经常在新闻里听到“企业号航母”并不是新船,它是1962-2012年服役的,其核心功能已经稳定运行了50年。铁打的营盘流水的兵,船上的人经常变,电控系统和操作流程,既在尊重传统,也在持续演进...

ZStack社区版
前天
9
0
大咖带你了解技术团队效能动力模型

摘要: 如何避免自己成为整个团队的瓶颈?如何让集体成为真正的团队?我们需要怎样的工程师?团队效能的未来在哪里?阿里云效邀请了阿里巴巴高级技术专家李云(花名至简),亲情讲解团队效能...

猫耳m
2018/06/06
11
0
顺丰运维工程师误删库被开除,心中有点震撼

首先是一封邮件,简单阐述误操作,误删库,所以这个邓姓工程师被动跑路。 曾经的一个搞笑图片变成现实,你心中有没有惊起一片涟漪? 邮件正文大概是这样: 邓某错选了 RUSS 数据库,打算删除...

数据工人
2018/09/20
0
0
头衔很重要!程序员必须要搭建自己的“工作阶梯”

  编者按:初创企业在早期一般都是人人身兼数职,倡导扁平化的管理,并不怎么看重头衔。但是随着组织的扩大,初期的这种管理模式会引起诸多问题。身兼软件工程师、经理与创始人角色的Chuck...

36氪
2018/03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用原生js对表格排序

本文转载于:专业的前端网站➸用原生js对表格排序 阿里的模拟笔试题,当时时间有限没写出来,其实是因为自己对原生dom操作不熟悉,这里补一下。 题目的大意是有一个表格,如代码所示 <table>...

前端老手
15分钟前
3
0
IT兄弟连 HTML5教程 HTML5表单 HTML5新增表单元素

HTML5有一些新的表单元素:<datalist>、<keygen>、<output>。不是所有的浏览器都支持HTML5新的表单元素,但即使浏览器不支持该表单属性,仍然可以显示为常规的表单元素。 1 <datalist>元素 ...

老码农的一亩三分地
17分钟前
3
0
【朝花夕拾】Android自定义View篇之(一)View绘制流程

https://www.cnblogs.com/andy-songwei/p/10955062.html

shzwork
19分钟前
4
0
Qt编写自定义控件70-扁平化flatui

一、前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产...

飞扬青云
28分钟前
2
0
教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部