当前位置 博文首页 > charleslei的专栏:当我在做技术管理时,我在做什么?
CEO主要管四方面:人事物财。对于CTO,我认为也是管四个方面:人事物文。
·人-?团队管理
·事-?项目管理
·物-?技术管理
·文-?文化建设
团队管理团队由追求一个或多个共同目标的一群人组成,经过一些规则约束在一起工作。要让高效协作,需以人为本,让成员在各自位置得到最有效发挥,个体与整体相互促进成长。
1.?组织架构
组织架构是公司骨架,明确各个岗位的职责、管理范围、责任链。以下为负责技术开发部分:
组织架构
2.?招聘
招人这件事本身就是个技术活。从哪儿招?要发什么样的招聘文案吸引人?面试时问什么?怎么知道对方是不是有料?什么样的人适合留下来?
有效过的招聘渠道大概有3种:内部推荐,专业招聘网站,社区论坛。其中内推最靠谱。为了鼓励更多内推,我们推行了内推奖励机制:内部推荐成功后,推荐人可获一定奖励。
不同的技术岗位需要掌握的技术技能自然不同,因此刷选时也需要面试官对面试岗位技能都有所掌握,然而每一门技术的技能树各不相同。
前端工程师技能树
技术岗位都需要定一些面试题目来提高候选人筛选效率和标准化结果评估。
面试很占用人的时间、精力,对于应聘者,耐心引导,应避免面试紧张导致应聘者没有发挥好从而给出错误结论。
让新人尽快通过磨合,熟悉开发流程,掌握专业技能,尽早能独立完成开发任务。以下方案:
·引入Mentor导师制度
·[xx公司新人注意事项]
·code review:[Code Review Tips]
·pair programming
·内部培训、分享
·官方BLOG
·外部技术交流会
Mentor制度
指定一名同类岗位、高一级别的同事任“导师”,带新人熟悉环境、流程、规范等,尽快通过磨合,熟悉团队、有归宿感。
开发人员一开始也可能不懂如何指导新人。为解决这种问题,我整理了一份文档,可以是WIKI中的的链接索引。不要分享整个文档给新人,让他锻炼自学能力。
新人注意事项
Code Review
我们在日常开发中鼓励并推行代码审查。
项目开发阶段时,我会根据开发组成员的级别设定审查链,按照“中级审初级,高级审中级,高级互审”。
没有合适的人时我来审查,开发任务完成后,任务开发者需要发Pull/MergeRequest给指定好的审查者进行审查和合并,确保每次代码合并前都有2个人能看到过,一般只有在做演示出现exception,需要紧急合并做部署时才会跳过code review流程。
推行代码审查需要有两个人以上的协作,自然是有代价的,那有什么好处?
代码审查相当于另一种pair programing,大家的编程水平都能提高(无论是提出问题的,还是被指出问题的)
让一个新人融入团队没有比在一起讨论代码更快的方式了,特别是对于新人而言,对代码规范不熟悉,通过Code Reivew能有效减少低质量代码的Check in,对个人、对团队、对项目都是很有益的一项安排。
我日常对进行Code Reivew发现问题做总结,在团队内也做过一次专题培训。
code review examples
特别提一下,设定固定的审查链的好处是减少审查者的负担,每个人只需负责1~2个的代码审查;阶级式的安排,可以让高级的不用反复的去提点低级人的一些低级错误,反复指出一些低级问题对高级人员是负担也是干扰,容易累积高级人员缺乏成就感的情绪(程序员的一个特质是喜欢有挑战性的任务)。
结队编程
结对编程的好处不用多说,应鼓励结对编程。我不会强制安排,不会要求像教科书般要求在某个时间规规矩矩的一个看一个写,实际上一般的情景是某个同事有问题时,需要找我或作指导的其他同事,拿上电脑大家坐在一起讨论、直接敲代码:
pair programming
内部培训、分享
团队的强大不能依赖个体,新知识只有一个人掌握时,不等于团队掌握了,分享出来团队技术才能成长。
在每周五下午,我会不定期的安排一些内部的培训,技术的、设计的、产品的,不限制领域,既是对个人的一次锻炼,又同时是给大家一个休息、坐在一起讨论的时间。
技术博客
知识的累积和巩固途径由浅到深可分为“听读写说”,但听别人说不如自己读书,读书不如动手写,写不如说出来给别人听。能亲口说出来的知识掌握得最牢固,不是人人都有勇气在别人面前开口,因此开设技术blog,把掌握到知识“写”出来。
只是内部交流是不足够的,还要看看别人是怎么做的,做法很简单要么走出去要么请人来。我们会不定期安排一些优秀的员工,参加的一些技术沙龙活动开拓眼界和学习。
5.?效率管理
程序员最烦什么?最烦的不是任务有多难多重,而是在写代码时被干扰打断。为此我需要从沟通方式、工作流程、协作方式各种方面来解决干扰的问题,我大概归纳为“四化”:
·沟通明朗化
·工作流程化
·开发自动化
·协作清晰化
提高沟通效率
微信或QQ混合了非工作消息的通知,开发人员不能很好的区分开这是有工作消息、还是普通社交聊天消息,很容易错过重要的工作信息。注意,这里说的是“企业内部的沟通工具的选择”,对外该用什么的还用什么,两者并不冲突。
工作流程化
在团队中,特别是进行软件开发项目时,需要有一定的流程指引。大家在一起进行工作时可以分工、分步协作,清楚知道自己、别人下一步会做什么,自己会不会被干扰,从而提高协作效率。
·开发流程规范-?规范了从需求确定、项目评估、项目确立、开发、验收交付到项目结束总结各个阶段的各角色的工作内容范围和输入输出的文档
·开发流程图-?创建feature分支->?提交PR/MR -> code review ->?部署staging-> QA ->?部署production
·提倡git flow -?使用Github/Gitlab flow,代码提交使用Pull/MergeRequest来进行code review。