软件架构师何志丹 http://hezhidan.shnxh.cn
如果我当上技术经理如何展开工作
何志丹
如果我当上技术经理如何展开工作................................................................................................1
1 总括 .................................................................................................................................... 1
1.1 引子 ........................................................................................................................ 2
1.2 技术经理(总监)的任务 ....................................................................................2
1.3 此职位和我高度匹配 ............................................................................................2
2 术语、概念、假设 ............................................................................................................4
3 规划 .................................................................................................................................... 5
3.1 不同阶段核心要素不同 ........................................................................................5
3.2 研发部组织架构 ....................................................................................................6
3.3 规范 ........................................................................................................................ 8
3.4 关注点 .................................................................................................................... 9
4 计划 .................................................................................................................................. 10
5 培训与考核...................................................................................................................... 11
5.1 培训 ...................................................................................................................... 11
5.2 考核 ...................................................................................................................... 11
5.3 对我的考核 ..........................................................................................................12
5.4 晋升 ...................................................................................................................... 12
6 需求与测试...................................................................................................................... 12
6.1 不同性格在不同阶段的优劣 ..............................................................................12
6.2 关于需求人员 ......................................................................................................13
6.3 关于测试人员 ......................................................................................................14
6.4 需求确认或整理 ..................................................................................................14
6.5 需求分解、任务跟踪 ..........................................................................................14
7 单人代码走查 .................................................................................................................. 14
7.1 代码走查员发展阶段 ..........................................................................................15
7.2 代码走查好处 ......................................................................................................15
7.3 我代码走查需要的时间 ......................................................................................15
8 专业化分工及组建公司公共库......................................................................................16
8.1 专业化分工 ..........................................................................................................16
8.2 组建公司公共库 ..................................................................................................16
8.3 关于技术攻关 ......................................................................................................16
1 总括
公司成立以来,一直处于高速发展状态,未来几年也将高速发展。高速发展意味着:容易摔
软件架构师何志丹 http://hezhidan.shnxh.cn
倒。摔倒了,运气好,继续跑,抢点残羹冷汁;运气不好,直接出局。又不能不跑,等修整
好了,发现无路可跑:增量市场已被抢光。
1.1引子
电脑游戏《双点医院》的经典情节:“赚钱的医院突然巨额亏损,症状是:各科室人满为患”。
新人的解决方法是:建立更多的科室,招更多的医生、护士。新招的医生和护士是新手,效
率低,于是堵塞更严重。根本原因是:那些难治的病占用工作人员太多的时间,将那些难治
疗的病人(不到总病人的 10%)请回去,很快就扭亏为盈。对应到软件开发中,就是不到 10%
的需求,让整个团队疲于奔命,还亏钱。
放到现实中,这个问题各科室主任和各工种主任都无法解决。如果医院有技术总监的
话,归技术总监解决。绝大部分医院没技术总监,所以只能正副院长解决,如果院长们是技
术性、管理型、市场型,没有财务型,那就无解。
1.2技术经理(总监)的任务
核心任务:产品研发全过程进度与质量把控,包括:
根据不同产品、不同阶段的核心诉求,调整部门结构。
在各部门、产品、工种之间调配资源(主要是人力),从上级申请资源。
协调各产品定位,以服务不同层次的用户,分析是否存在断层。
针对高发的问题,建立够用的制度和规范。
处理部门间矛盾,协调部门间合作。
日常任务
对上沟通,了解公司的业务、战略方向、制定相应的计划。熟悉管理知识,以方便与上
级沟通。
和友方部门沟通,以相互配合。了解市场知识,以提高沟通效率。
查看代码、需求文档、测试结果,以保持对相关员工的了解。继续补充需求知识,熟悉
主要产品业务知识,了解次要产品业务知识。
检查各部门的成果(部门自查往往是不彻底的),发现瓶颈。和需求分析人员、售前、
售后(甚至客户、用户)沟通,以估算需求的效果。根据缺陷产生原因分类统计或汇总
缺陷,以发现开发团队甚至个人瓶颈。比对代码走查发现的缺陷和测试员发现的缺陷,
以估算两者的瓶颈。
处理下级部门的申请。
1.3此职位和我高度匹配
“产品研发全过程进度与质量把控”的关键是:看文档、写文档。会看文档,才能正确决策;
会写文档,才能方便上级和其它利益相关人决策。这刚好是我的特长,一般架构师都有这个
特长。
软件架构师何志丹 http://hezhidan.shnxh.cn
一 我是理论与实践的完美结合
大二是就考过了软考的高级程序员(今软件设计师),2014 年过了软件架构师,理论联系实
际至今。创业的那段经历,让我体会到渠道的重要;广州顶丰让我体会到沟通的重要;上一
份工作让我体会到“少即是多”:鸡肋需求(作用很小的需求)砍掉,后期需求(前期没有,
后期有用的功能)暂缓。
二 全局观和技术积累
全局观和技术积累的完美结合,将风险消灭于萌芽状态。同一行业、同一公司待的久,容易
积累技术;不同行业、不同大小的公司容易形成大局观。先积累技术,再培养大局观,显然
比先大局观后技术合适。大型公司(武汉开目、南方数码)、中型公司(中山极点 3 维)、小
型公司(广州顶丰)都待过,创业 4 年。大中公司方便学技术,小公司(往往无规章或规章
不健全)容易发现引起项目失败的非技术问题。创业暴露自己几乎所有的缺陷(尤其是技术
缺陷),后面的几年成功补充了相关知识。
三 公共库
直接使用我积累的组件,以降低成本、缩短工期、提高质量。在创业和业余时间封装了多个
库(dll),主要 3 个:SN.dll 通用功能,不依赖任何库(包括 STL、MFC)和操作系统。SNMFC.dll,
对 mfc 和 Windows api 进一步封装。SNStl.dll,对 stl 进一步封装。目前已经经过两个商业软
件和若干小软件的验证。源代码可以我和公司共有。典型类:几行代码建立服务端、客户端
通讯,如果不用类库,要几十行,几十行足以搞死新手了。而且自动处理拆包、粘包。
CAD 二次开发库。2017 到 2018,广东 XX 开发 CAD 图纸大师时,封装一个 CAD 库,此库归
广东 XX。我现在一边找工作,一边重新封装库,相对于广东 XX 的库,应用范围广,但性能
稍差。典型类:某个适配器类屏蔽 CAD2010 之后和 CAD2010 之前版本的细微区别。
四 开发高质量的软件
开发高质量的软件,以提高用户体验。比如:软件几乎没有崩溃,可维护性(新增功能或大
改功能的难度,架构师与软件工程师的最大区别)高。
五 强大的学习能力
强大的学习能力,以解决新问题。这是适应工作环境的结果,以前的工作职位是:公共组软
件工程师,架构师。出于工作需要:经常完成各类预研工作。曾于 2003 年 3 月出任 CSDN
专题开发大版主、2003 年 7 月出任 CSDN VC/MFC 版的大版主多年。
软件架构师何志丹 http://hezhidan.shnxh.cn
六 培训能力
较强的培训能力,方便团队建设。网上培训 6 人,4 人上班(至少 2 人拿高的工资),2 人(初
中学历)创业接活。
如果可行的话,培养一到多个公共程序员、代码走查员,一次只培养一个。熟练的公共程序
员、代码走查员可以大幅提高开发效率:新手公共程序员、代码走查员会严重降低开发效率:
公共模块有缺陷,意味这所有模块有缺陷。新手代码走查员,会发现大量次要缺陷,被走查
左右为难:改,影响工期;不改,违反制度。
七 我的品德
敢于直言、不拉帮结派
重技术轻业务使得我在哪个公司工作的效率相差不大,所以敢于直言。
实践是检验理论的唯一标准
在方案选择上无偏好,根据实践情况调整。如果别人有更好的方案,则采纳别人的方案。
适可而止,方能全身而退
这和我最近工作经历有关。我的工资比中小公司的平均工资高很多,中小公司没有容错实力,
如果搞砸了(或 6 个月无进展),就出局了。如果搞成(或基本完成)了,公司没有能赚回
我工资的工作,也得离去。
一般而言,公司前期技术重要,后期技术相对次要,这是就形成后期技术部产出低于收益。
这时,我愿意离去。其实许多技术人员,也是适合前期,他们在后期也愿意离去,很憋屈。
善于总结
重要内容书面总结,方便后面来的人查阅。
八 此职位不适合科班出身的技术经理
科班出身的人理论强,但很可能脱离实际(执着质量,忽视工时和成本)。就算按最低标准
CMM3 搞,理想状态也要 3 个月,这个 3 个月许多工作都要暂停。快速奔跑的团队,停 3
个月,不知道能否继续跑。就算搞成了,跑速大幅降低,不利于抢占市场。
九 此任务不适合自学成才的技术经理
自学成才的人实践能力强,勇于尝试。但高速发展时,尝试失败的代价太大。
2 术语、概念、假设
标准工时:假定有一个三年工作经验的人,1 小时的能完成的工作量。主要用于衡量模块的
粒度。
软件架构师何志丹 http://hezhidan.shnxh.cn
3 规划
3.1不同阶段核心要素不同
一 项目管理核心三要素
项目管理核心三要素:时间、成本、质量三要素。三者是鱼和熊掌的关系,不可兼得。不同
阶段,不同的侧重点不同。
二 竞争策略
基本竞争策略有三种:成本领先战略、差异化战略、集中化战略。要么把成本控制到比竞争
对手更低的程度;要么在企业产品和服务中形成与众不同的特色,让顾客感觉到你提供了比
其他竞争者更多的价值;要么企业致力于服务某一特定的市场细分、某一特定的产品种类或
某一特定的地理范围。这三种战略架构上差异很大,成功实施需要不同资源和技能。以公司
的实力,只会“涿鹿中原”,不会“偏安一隅”,所以集中化策略任何阶段不会选择。
三 增量市场阶段
此阶段核心因素:快(时间),早一天就可以多圈一批用户。质量是相对,要评价一个产品
的质量,必须有一个参照物。而大部分潜在用户没接触过同类产品(如果有同类产品的话),
所以无参照物参考。自然对质量没概念。这个阶段,有很多故事可讲,所以融资相对容易,
公司确实也融到资了。由于目前处于存量市场阶段,所以本规划以增量市场阶段为主。
四 存量市场前期
此阶段的核心要素:好(质量)。竞争已经开始了,但软柿子多,提高质量可以更好地捏软
柿子。已经没有多少故事可讲,融资变得困难,但此时用户较多,利润也高,所以还是钱还
是好赚。在保证质量碾压软柿子的情况下,尽可能的快,这样能多捏几个软柿子。
“好”引申一下,变成差异化战略。差异化战略的五种基本途径:1,产品差异化。主要体
现在:形式、特色、性能质量、一致性、耐用性、可靠性、可维护性、风格和设计。2,服
务差异化。3,人员差异化。4,营销渠道的差异化,5,形象的差异化。
五 存量市场后期
此阶段的核心因素:省(成本)。软柿子被清光了,寡头垄断形成了。品牌已经建立,快会
损害品牌,且没好处,所以放弃。在各自的优势领域,质量已经相对完美,通过质量很难有
所突破。万一有个疯子打价格战,大家只能奉陪;寡头垄断下几乎必定出疯子。
软件架构师何志丹 http://hezhidan.shnxh.cn
成本领先战略是企业要在提供的产品的功能、质量差别不大的前提下,努力降低成本来取得
竞争优势。如果上一阶段,质量不过关,则需要继续关注质量,直到质量令人满意。
六 成熟期
大势已定,什么都不重要。要么已经形成垄断,要么寡头已经达成默契。
3.2研发部组织架构
一 工种
开发工程师职责:
详细设计。
编码。
高级开发工程师职责:
负责核心复杂功能的实现方案详细设计、编码实现。
负责疑难 BUG 分析诊断、攻关解决。
新人指导,帮新人详细设计。
开发组长:
团队任务管理:开发工作量评估、开发任务分配。
团队生产质量提升:代码审核、开发风险识别/报告/协调解决。
团队生产力提升:代码模板研发与推广、最佳实践规范总结与推广、自动化研发生产工
具研发与推广。
团队专业力提升:招聘面试、领导复盘总结改进。
部门值日官:
行政管理:请假、报销、值日之类。
进度汇总给部门上级。
调解各组矛盾,如果不服调解,上报部门上级。
配合各组组长完成任务。
部门经理:
行政管理。
确保进度按时完成。如果不能完成,尽快上报给部门上级。
解决部门矛盾。如果不能解决,尽快上报给部门上级。
指导各组长完成任务。
原则上不再编码,但要会代码审查,防止员工欺骗。
如果没有公共组,则临时抽调人员完成公共内容。
二 关于招聘
开发组长考虑技术,部门经理考虑薪资,技术经理(总监)考虑已有人员技能分布,年龄分
布等。开发组缺人,向部门经理申请。如果部门经费充足,则向技术经理(总监)申请招人,
软件架构师何志丹 http://hezhidan.shnxh.cn
否则申请借人。
三 两级架构
研发部由若干部门组成,部门又由若干工作组组成。正式部门由经理负责,如果工作繁杂,
可设值日官;部门太小,也设值日官,不设经理;临时部门设一名值日官。工作组人员不限,
设组长一名,如果超过 10 人,设副组长一名;超过 15 人,设副组长两人,依次类推。如果
组员 3 人(或更少)设置值日生,不设组长。值日官、值日生完全是临时的,副组长有部分
临时性。
四 增量阶段架构
按产品线划分部分部门,此阶段的部门具有临时性,故主管是:值日官,如果产品经理,需
求分析能力达到良好,业务能力及格,则由产品经理担任。否则:由愿意当值日官的组长轮
流担任。这样架构的目的:快,所有任务(包括借过来的售前、售后)都可以在部门内解决。
五 存量前期架构
按开发语言划分部门,再按产品划分组。方便代码走查、培训、总结以提高产品质量。此阶
段:归还售前、售后人员,稍稍减少产品经理,大幅增加测试员。
软件架构师何志丹 http://hezhidan.shnxh.cn
六 存量后期架构
提取各语言的公共开发组,建立培训机构组建研发中心部,以降低成本。研发中心增加架构
师:评估所有任务所需的标注工时。
3.3规范
每条规范都是一个从坑里爬起来的人总结的,遵守规范可以大幅降低掉坑的几率。遵守一条
规范的成本可以忽略,遵守全部规范的成本是巨大的,以至必定亏损。较好的做法:统计掉
各种坑的几率,然后针对性的建立规范。
一 规范建议
代码走查发现的问题,不影响软件工程师的考核。影响考核的因素:完成的任务量(标注工
时),测试员或用户发现的缺陷数量。
二 规范
目前规范维持原状,如果没规范,就暂时没有规范。我收集用户和测试人员反馈的缺陷,对
产生的根源进行分类,优先针对缺陷最多或影响最大的地方建立规范。
三 规范节选
性质
增量阶段
存量前期
存量后期
案例为主(类
似英美法系)
规则为主(类
似大陆法系)
规则为主,案例为
辅
软件开发人员能否直接和客户沟通 可以
能否加班
用户、客户反映的问题
文档
坏代码(暂时没问题,但高几率引发
问题)
对软件外包态度
可以
尽量修改
尽可能少
容许
提倡
不可以
不可以
不可以
随便
请用户、客户提交
给产品经理
转给产品经理
决定
CMM3 本地化 CMM3 简化版
不容许
容 许 出 错 率 低 的
坏代码
质量过得去,便宜
就行。
尽量少,除非
外包公司有我
们正好需要的
稀缺人才。这
种几率太小。