人员、产品和技术:工程管理初学者指南

已发表: 2022-03-11

作为一名软件工程师,你的职责通常定义得很清楚:任务分配给你,你的工作是按时有效地实施它们。

然而,在工程经理的角色中,职责通常没有明确定义。 管理不是二元的。 某些问题和问题没有直接的答案。 作为经理,你的成功程度取决于你领导员工、管理产品和管理技术的能力。

以人为本

在工程经理角色中,您的新优先级是您的团队。 那么,如何确保您拥有一支优秀的团队呢?

建立团队并建立信任

第一步是确保在您还没有团队的情况下为您的团队雇佣合适的人。

一个糟糕的招聘不仅会浪费他们的时间,还会浪费你其他团队成员的时间,他们需要收拾残局。 这将使您团队的其他成员士气低落。 即使一个人是一个出色的程序员,如果他们不适合团队的文化,他们仍然可能是一个糟糕的员工。

确保您不仅要问技术问题,还要问有关在团队中工作或担任领导角色的开放式问题。 例如,询问候选人:

  • 描述他们必须解决的最近的问题
  • 他们如何实施解决方案
  • 他们考虑了哪些替代方法
  • 谈论他们在生产中遇到关键问题的时候,他们如何应对,以及他们为防止将来出现相同类型的问题所做的工作

一旦你有了一个团队,就要花时间赢得团队的尊重并建立信任。 为了有效地领导团队,您需要与团队成员建立健康的关系。 花时间了解他们的职业目标以及对他们来说什么是重要的。

一对一会议是与每个团队成员建立联系并更好地了解他们的重要工具。 理想的一对一会议频率是多少? 这将取决于您的团队成员的具体需求,但最好每个月至少与他们会面几次。

但是,如果您和您的团队密切合作,或者您有一个庞大的团队,您可以每月召开一次会议。

工程经理如何授权和改进团队

你工作的很大一部分取决于识别个体成员的优势和劣势。 通过将他们与高级工程师配对并进行频繁的代码审查来帮助他们解决他们的弱点,并专注于他们的优势。 毕竟,是我们的优势激励我们并塑造了我们喜欢做的事情。

根据每个工程师的能力和特征分配任务,以便从每个人中提取最好的东西并创建一个伟大的团队。 在这方面,自动化可以走很长一段路。 设置持续集成以识别损坏或次优代码以及频繁提交此类代码的人。

您的团队成员将不断寻求在对他们或团队重要的领域学习、改进和成长。 去年对每个团队成员有意义的角色和责任今年可能不再合适。 为确保每个团队成员继续感到挑战和改进:

  • 密切关注他们的个人成长,投资他们的发展,帮助他们实现抱负。
  • 与团队成员单独会面,制定个人发展计划并授权他们制定职业战略。
  • 尝试为自我发展分配额外的时间,允许团队成员定期转换角色,并组织内部研讨会或培训课程。

除了确保每个人的专业成长之外,工程经理的职责是保护他们的团队。 您应该授权您的团队做出决定,而不必害怕失败。 如果事情确实失败了,请承担责任并从错误中吸取教训。

这将在您的团队尝试新方法并培养成长心态时培养勇气。 也就是说,如果您提供了适当的反馈并及时采取行动来引导您的团队朝着正确的方向前进,那么错误就不会发生不止一次。

产品经理和工程经理

工程经理角色的第二个重要方面是产品。 您必须与产品经理建立密切的关系,以调整期望并利用技术和团队的技能来交付出色的产品。

以下是您应该承担的六项工程经理职责:

确保项目优先排序

您的团队 6 到 12 个月的目标是什么? 你的听众是谁? 您的客户对产品有什么期望? 您的团队可能知道他们将在接下来的几周内做什么,但了解完整的产品及其发展方向至关重要。

参与产品开发决策

作为一名工程经理,您将与不同的团队一起工作,并且比您作为个人贡献者更多地参与产品方向和产品更新。 您不一定要同意有关产品的每一个决定,但您必须相信产品并希望将其做得更好。 如果您不同意他们的决定,您可以挑战产品经理,但请记住,产品经理拥有最终决定权。 尊重他们并支持他们的决定。

定义和推动技术战略和开发方法

产品经理的工作是定义产品策略和概念,而您的角色是定义产品的架构愿景和技术设计。 您还负责定义开发方法并确保其被团队采用。 请记住:产品经理可能拥有产品,但您和您的团队拥有产品的实施。

在某些情况下,可以通过少量的工程工作来实现有用的功能。 例如,检查升级到产品使用的框架的较新版本是否可以帮助您更快或更有效地实现某些特定功能。 对产品有一个很好的了解可以帮助您和您的团队识别此类案例并将其推荐给产品经理。

平衡创造和偿还技术债务,以及开发新功能

当您构建最小可行产品时,上市时间是重中之重,因此您可能会积累一些技术债务。 随着产品的发展,重点转移到添加新功能和改进产品,同时偿还技术债务。 如果不解决您最初所做的权衡,添加新功能将花费更多时间并且成本更高。 花时间了解并跟踪您所做的妥协,并在解决债务和添加新功能之间找到平衡。

使用技术和自动化来帮助管理技术债务**

使用源代码静态分析来识别具有最多可维护性索引的代码,并优先考虑重构代码。 这样,处理新功能变得更容易,产品的性能也会得到提高。

确保产品执行步入正轨

您应该了解团队工作的当前状态。 如果您的团队落后于计划,请找出明显的障碍并将其移除。 例如,如果团队经常遇到技术问题,请建立频繁的结对编程会议,以改善团队成员的知识共享。 如果团队花费大量时间将代码部署到服务器,请自动化该过程以节省时间并减少出错的可能性。 尽量减少中断并为如何承担新工作和解决错误报告创建清晰的流程。

技术与授权

即使您仍然是工程师,但作为经理,开发软件解决方案不再是您的主要职责。 您的团队中有高级工程师,他们负责大多数技术解决方案。 将军不拿步枪打仗; 管理者不应该对每一行代码进行微观管理。

但是,您应该使用您的知识和经验来确保高级工程师做出的决策符合产品的技术路线图和方向。 将技术决策委派给您的高级工程师,但提出正确的问题,以确保产品具有可扩展性、安全性和可靠性。

例如,用“如果我们的用户数量增加 20 倍怎么办?”来挑战他们的选择。 那会是可持续的吗?” 或者“这种技术在两三年内还会得到支持吗?”

您可以并且应该根据您的知识和专业领域提出替代解决方案和框架,但不要强迫或迫使您的团队接受它们。 除了技术建议,您还可以提出与开发过程和方法相关的建议。

此外,请确保监控产品的关键指标。 业务和技术指标同样重要。 与 DevOps 团队合作创建警报以监控系统,并让您的团队随时了解操作问题。 最后,制定一种在事件发生时解决事件的方法,以确保它们不会再次发生。

最后但同样重要的是,及时了解最新的技术和趋势。 您拥有的选择越多,知道的越多,您将拥有的解决方案和框架就越多。 指定一些时间来阅读文章、进行代码审查并与您的团队一起参与技术讨论。

你对技术问题了解得越多,你的团队就会越尊重你​​。 保持对新兴技术的熟悉——并鼓励你的团队也这样做——将帮助你营造一种充满好奇心的氛围,并挑战你的团队寻求新的和创新的方法来解决复杂的技术问题。