当前位置: 首页 > 科技观察

标题很重要!程序员要搭建自己的“职阶梯”

时间:2023-03-16 18:12:57 科技观察

编者按:创业初期,大家通常身兼数职,崇尚扁平化管理,不太重视职称。但是,随着组织规模的扩大,这种最初的管理模式会产生很多问题。ChuckGroom是一名软件工程师、经理和创始人,他分析了设置工作阶梯的好处,并根据个人经验提出了建议。无论你是创业公司经理还是软件工程师,都可以参考。软件公司应慎重考虑工程职级的设置,制定职级阶梯,并向员工明确说明自己的期望、不同角色之间的差异以及职业发展的领域。在这篇文章中,我讨论了为什么拥有工作阶梯对每个人都有帮助;一个好的工作阶梯应该是什么样子的;我如何看待软件工程师等级;最后,一些建议。虽然本文的受众是管理层,但工程师们看完后应该也能站在公司的角度思考一下,有所感悟。请注意,本文仅讨论独立贡献者(IC)的工程开发路径。其他并行发展路径(管理、产品)包括工作转移,本文不予讨论。这些主题值得讨论,但超出了本文的范围。是的,工作“阶梯”的想法有点奇怪工作“阶梯”这个词暗示了一个高度结构化、非常稳定、长期的路径,可以通往你所在行业的某个有意义的终点,比如成为合伙人。但现代职业的流动性更强,发展方向也更多样化。员工通常每隔几年就会换工作。不要将职业阶梯视为一项长期的人生计划。这样你就太过关注阶梯的顶端(“我应该如何度过我的生活?”),但那是你的下一步。阶梯是一种工具,可让您设定未来几年的期望。假设您没有工作阶梯新公司或团队通常没有明确定义的头衔或角色。事实上,他们可能为此感到自豪;您听说过“我们是一个扁平化组织”和“头衔无关紧要”。虽然薪水可能相差很大,但人们普遍认为这是精英管理的典范。好吧,如果地球在没有工作阶梯的情况下继续下去,为什么还要费心去改变它呢?我们可以看一些例子。弗兰克想晋升为“高级”,但我们觉得他还没有准备好;但他问为什么不→我们必须找到一种方法来解释不同等级之间的差异,并指导弗兰克应该发展哪些技能。我们正在面试一位候选人。每个人都喜欢她,但在招聘报告中,我们对是否提供2级或3级角色存在分歧→没有明确定义的招聘门槛,重要的决定变得过于主观。我们的初创公司没有正式的头衔。我们刚刚进行了A轮融资,并在此过程中引入了新的领导层。经过闭门紧张的讨论,他们给大家分配了等级,但很多工程师对“初级”感到非常恼火。→哦,废话,标题并不重要,直到他们这样做。现在一堆人很生气,很失望。几年前,我们以每年85,000美元的价格聘请了凯伦。今年夏天我们再次聘请了Noreen——在与Facebook进行一轮谈判后,他的薪水提高到了120,000美元/年。凯伦和诺琳做同样的事情。喝过一次后,卡伦发现诺琳的薪水比他高那么多。→这是一场灾难。我们负担不起每人120,000美元。但凯伦完全有理由称之为犯规。当排名确定时,每个人都是赢家。工作阶梯对员工和公司都有帮助。管理:一位优秀的经理应该定期反馈员工是否表现出色以胜任当前职责,以及需要发展哪些职业技能。工作阶梯提供了一个公正的框架来构建这些讨论。招聘:一个好的工作阶梯应该很容易帮助设置候选人的技能要求。团队可以为每个级别建立一套标准的问题和招聘门槛,并在员工之间进行同类比较。HR薪资范围:只要你招员工,就得确定薪资问题。这需要确定内部层级以及将这些层级与行业市场利率相匹配的方法。公司原则工作阶梯传达了哪些技能和特质很重要。这些必须与公司的使命和价值观保持一致——您需要一种专注于最终客户、解决冲突和做出艰难决策的解决问题的文化。出现在公司原则和使命中的声明应该包含在工作阶梯中,也应该用于员工反馈。亚马逊的领导原则就是一个很好的例子。一个好的工作阶梯应该包括哪些要素?完善的职位阶梯应该:解释和证明不同级别之间的差异。每个等级应该尽可能地扮演不同的角色,而不仅仅是不同的技能水平;你想要的是阶梯函数而不是梯度函数。告诉员工哪些因素会影响晋升(和自我提升)。职位阶梯是职业发展规划的记录,也应该可以说明员工评价的标准是什么。应该易于理解和阅读。少即是多。这应该是提炼结构良好的句子的参考指南。反模式包括:角色与我们所做的不匹配。等级和价值观的描述不符合我们的日常经验和需求。技能和表现的清单很长。员工可能会将这些用作晋升的清单。这样一来就很容易迷失泰山,导致大家在细节中迷失,忘记了不同层次之间的本质区别。写得像算法。一些科技公司似乎认为他们可以创建一个客观的、机械化的流程。抱歉,人事管理总是很混乱而且有些主观;你最好把工作阶梯写成人性化的,有雄心勃勃的目标,听起来模糊但真实。我的软件工程师工作阶梯我倾向于根据所有权和责任范围而不是既定的技能水平来创建工作阶梯。我更喜欢这种模式,因为它与任务的分解和分配方式非常匹配,并且不同层之间有明显的区别。当然,技巧还是很重要的。所有的软件工程师都必须能够编写代码并作为一个团队来解决客户的问题。我发现的一些基本素质包括:编程技能:编码、设计、测试、系统维护、沟通:有效的电子邮件和Slack通知、主动状态更新、基于事实的结构化断言、协作。批判性思维:平衡短期需求与长期目标;思考可能出问题的地方;识别需求。主动性:做事的活力、主人翁精神和毅力。但话又说回来,这些能力之间真的没有明显的“阶跃函数”级别差异,你可以在其中使用任何技能并说“啊哈!这意味着你是2级而不是3级!“我的工作阶梯假设这些特征很重要,但避免了具体的指导方针。唯一的例外是4级(及以上)工程师;这个级别及以上级别需要非常深入和具体的技术和架构经验。1级外部职位:[初级]软件工程师角色:开发定义的功能、调查和修复错误、编写测试。交流进展情况并确定阻碍问题。找到工作与生活的平衡。反模式:代码质量差。缺乏自我激励;需要有人告诉我下一步该做什么。经常去无用的东西。与其卷起袖子,不如发牢骚。平时很无奈。忽略团队进度。经验:0到3年初级工程师可以为公司带来大量的原始能量和潜力。他们完成您交给他们的工作——通常是很多工作。不过,他们确实需要帮助,需要一个将任务分解为具体工作项目的预先项目计划。团队领导需要经常检查以确保他们在正轨上。我更愿意给他们一个头衔“软件工程师”(减去“初级”),因为没有人愿意被称为“初级”。在内部,您可以称他们为1级工程师,没有冒犯的意思。我发现1级工程师面试是最难安排的,因为候选人的技能水平都差不多。主动性和批判性思维是最重要的,但这些特征很难在1、2小时内判断出来。2年内不能升到2级的1级工程师让他们走。2级外部职称:[高级]软件工程师角色:负责某个功能领域。将大型请求分解为子任务并提交更高级别的状态更新。编写测试计划。承担运营责任。设定可衡量的目标并实现它们。查看代码更改。帮助导师招募新人。反模式:消失在对业务不重要的项目中。无法识别或沟通较大的障碍。区分你和我的工作态度。总是低估时间表。没有认真对待卓越运营。解决方案太复杂了。经验:1-8年左右Level2工程师可以负责一个主要软件的很大一部分。您可以相信这些人能够正确处理松散定义的请求——分解负责的任务,做出合理的决定,并在定期检查之间相当自主地工作。沟通和批判性思维是必需的技能。这些人应该被称为“软件工程师”还是“高级软件工程师”?我是中立的,但倾向于在2、3级工程师的名片和LinkedIn上使用“高级软件工程师”的头衔,并在内部按级别称呼他们。尽管一些2级工程师可以在那里工作数年,但最终他们应该证明自己可以承担更多责任并升至3级,或者离开组织。Level3外部职称:高级软件工程师职责:负责整个产品或大型项目的开发和上线。问责制流程(Scrum、TDD等)。在着手重大项目之前编写技术规范并识别风险。标准的制定。找到降低复杂性的方法。根据需要,承担额外的“技术领导”职责以推动计划的完成。反模式:傲慢的傻瓜。未经授权。一直说“是”会让人筋疲力尽。没有丝毫考虑就匆匆忙忙地做了。不注意细节。未能提高对项目风险或人员问题的认识。不追随新技术或行业趋势。经验:5年以上Level3工程师负责整个产品(比如整个应用或者整套服务)。除了交付可靠、可维护的软件外,他们还了解公司动态以及好的流程是什么样子的。高级工程师通常还多戴一顶“技术领导”的帽子。这意味着他们承担了项目管理和流程监督的(吃力不讨好的)工作。他们想确保火车准时运行。请注意,技术领导者没有直接的上级或老板,他们做事完全有责任感。4级(及以上)外部职位:架构师(或首席工程师,或发明一个很酷的职位)角色:负责跨团队共享的基础设施。与CTO和其他架构师合作,选择新技术并促进文化/流程。在关键业务领域拥有深厚的技术专长。仔细研究以评估和测试选项。了解可靠性、可扩展性、经营成本、组织采用的难易程度、招聘等的影响(和权衡)。反模式:过分强调可扩展性或高可用性而不是业务需求。太多的时间花在追逐最新的“亮点”技术上。不合作或提问。居高临下。有一个“宠物”议程。讨厌上级领导。经验:大约8年以上4级工程师是可以评估系统级平台决策以制定长期公司级技术战略的架构师。他们通常有两个角色,既是职能团队的独立贡献者,又是与CTO一起工作的架构审查员。您的架构师应该谦逊而外向;他们是你工作中的啦啦队。其他求职阶梯当然,这里设置求职阶梯只是其中之一,大家可以和其他优秀的博客进行比较。以下是一些:GiltRenttheRunwayFoursquareFogCreek(Joel谈软件)以下是您会看到不同意见的一些领域:个人贡献者应该有多少级别?(3?6?)老前辈该如何对待?工作阶梯应该详细到什么程度?(其中涉及复杂的点系统、电子表格矩阵、文章段落或只是一些一般准则)“技术主管”的角色和职责是什么?谁负责项目管理?相关建议您什么时候需要建立工程职位阶梯?我会说等到你有5-10名软件工程师并开始考虑让某人成为全职经理时,你应该开始考虑定义工作角色和职业道路。谁来写工作阶梯?让委员会从头开始写一份好的工作阶梯是很困难的。我建议让工程经理先写草稿,然后交给工程管理团队进行讨论和研讨会。另一种方法是让所有的流程经理写一个草稿,然后开会比较,然后由委员会合并。头衔很重要即使当有人真诚地告诉您“头衔无关紧要”时,他们真正的意思是“此时头衔并不重要”。随着公司的发展,排名是不可避免的;职称可以作为代表,需要相应的薪水和职业选择。当你换工作时,招聘和薪酬待遇也应该以你以前的工作为参考。始终确保清楚地写下您的头衔和角色。薪资与职级挂钩,使用股权激励的绩效应该像贴在办公室门口一样管理——M.W.Mantle,《知人善用,Managing the Unmanageable》雇主应该根据可比的行业数据为每个职级建立薪资区间。根据基本工资水平或大幅加薪奖励表现最好的人,确实限制了他们招募明星候选人的能力,但这是控制预算和避免不公平的唯一可靠方法。股权授予最好一次性授予,并在未来设定一个最低有效期。例如,授予每年可行使的两年期权,是一种奖励优秀员工的手段。这向关键员工表明,即使你不能给他们大幅加薪,你仍然重视他们的贡献,并希望他们留下来继续一起工作。晋升基于能力而非资历晋升通常不会奖励过去的表现。取而代之的是,管理层会提拔那些已经显示出在下一个层次上解决更大、更棘手问题的潜力的人。—RayWeiss,《技术生涯导航员(The Technical Career Navigator)》提拔那些已经有资格担任下一级别职能的人。如果2级工程师想要晋升,他们应该展示从事3级工作的能力。作为经理,你的工作是为他们提供项目,给他们初步的经验(并在他们能力不足时确保软着陆)。不要让大家认为晋升只是时间的函数,或者为能力不够的人敞开晋升之门。不需要计算机科学学位就1-3级工程师而言,我还没有发现正规教育是成功的可靠预测指标。我见过几位自学成才或经过6个月的职业编码后出现的高绩效者。我不再要求应聘者必须拥有CS本科学位,我不再在面试中问算法重的问题。例外是4级(首席)工程师角色;这个角色需要在算法、系统、架构等方面有扎实的学术基础。第三方是否有资格获得工作阶梯?不;他们是雇佣方。您评估他们不是根据他们的能力水平,而是根据他们是否完成了特定项目。实习生有资格吗?同样,实习生不在工作阶梯上,因为您没有全职雇用他们。我对实习生的原则是这样的:你之所以开始实习生项目,是为了寻找好的苗子,在明年被招聘为一级工程师。(当然还有一些其他的好处,但这是最主要的)所以只聘请那些准备毕业并在次年就业的实习生。避免二年级学生和毕业生,因为他们不太可能留下来。招实习生的条件是:这个人能不能达到我们明年招初级工程师的门槛?避开冷漠的新兵;好学生真的脱颖而出。我通常会选择那些已经写了很多代码并且总是很高兴讨论这些代码的人,比如那些在Github上有业余项目的人。最后,考虑一下员工希望如何了解他们在组织中的位置。拥有职业里程碑并清楚地写下期望和目标将使每个人的工作更加轻松。在编写职位阶梯时,关键是:将职级与公司的组织方式(角色、报告结构)相匹配。雇用和晋升条件符合公司价值观。保证公平。职位阶梯建立后,您也可以在未来调整角色和评价标准;但不得违反公平原则。每个人都必须坚持同一个标准,否则你的士气和生产力就会崩溃。良好的工作阶梯可以公平竞争并制定游戏规则。