View on GitHub

我的博客

杂七杂八啥都有

(翻译)软件工程师在加入新团队时应该问的 20 个问题

原文 20 Questions a Software Engineer Should Ask When Joining a New Team

不同的软件开发团队工作风格不同。即使是在同一家公司,团队之间也可能差异很大。作为一名软件工程师,开始和新的同事以及新的软件一起工作通常是非常令人兴奋的。就我个人而言,我最近开始和新的团队做(对我来说是)新的软件。由于这不是一件经常发生的事情,因此我借此机会好好思索了一下我应该在短期内学习的东西。

以下是我认为软件工程师在加入新的软件开发团队时需要考虑的问题。这些问题按照类别分组。

内容:

技术

1. 我该如何在本地构建这个软件?

这是您最先需要学习的。毕竟您是要开发和运行这个软件。构建是第一步!

2. 我该如何在本地测试这个软件?

CI 管道非常适合细化测试错误,但是为了缩短内部开发循环周期,您最好还是在您自己开发用的的机器上运行测试用以确保测试无误。管道不应该是您发现测试失败的首选。

3. 我该如何配置自己的开发环境?

虽然团队文档中可能有明确的配置要求,但您还是应该了解在您的开发机器上还需要哪些不同的工具(毕竟每个人的使用习惯都不完全相同),这样您才能真正成为团队的开发成员。

一次性配置好环境能解决 95% 遇到的问题,这可比在开发时遇到错误再逐步安装依赖要好的多。

4. 源代码在哪里?

您应该会在预先存在的代码库中工作,除非您加入的一个完全没开始写代码的全新团队。那么后续问题来了,和你工作有关的具体代码在哪里?如何把这些代码拉到你的本地机器上?

5. CI/CD 管道在哪里?它们如何工作的?

希望您加入的是一个能够确保交付的产品的质量的团队,在这种团队中最常用的工具就是 CI/CD 管道。找到它们在哪儿并且了解其工作原理(虽然可能只需要通过鼠标点点点来了解)。查看一些最近运行的实例来了解正在发生的步骤。

6. 产品的积压工作在哪儿?

(backlog 我不太了解这是啥,暂译成积压工作

您会在软件的当前状态下进行开发工作,但是了解一下软件将来会有的状态会更好。快速浏览一下当前的积压工作,了解产品将要推出的功能的优先级。

7. 预生产和生产的测试如果进行的?

是否有集成环境?团队是否进行 canary 构建和部署来进行测试?团队是否订阅混沌工程(chaos engineerging)?了解团队如何保证他们的生产软件符合并保持特定标准。

8. “随叫随到”(on-call)是怎样的形式?

这个软件需要随叫随到么?如果需要,怎么轮班?事务发生的频率如何?随叫随到是否在非工作时间有要求?如果我在 on-call 状态,怎么收到通知?通常您不会直接组建新的团队并进入轮班的队伍,因此经过一段时间后,您可能会在开始 on-call 接到电话之前得到部分解答。

9. 内部文档在哪里?

团队在哪里维护他们的内部文档?文档是如何拆分的?它是最新的版本么?

团队协作

10. 团队成员专注于什么?

通常软件团队中只有少量工程师。这虽然不是典型,但有时每个工程师都在做一件单独的事。子项目一般由一个或几个工程师共同完成。了解一下团队的其他程序员的偏好,这样您能收获部分领悟。随着时间推移,您能在站立会议中了解到相关。

11. 团队每周的节奏是怎样的?

有每日的站立会议么?是否有每周的签到?最好了解一下新团队的一个常规的周是怎样安排的。

12. 我该向谁问入门(初学者,beginner)问题?

通常当加入新团队时您会被分配到一个“入职伙伴”(onboarding buddy,国内好像叫 mentor)。这些人已经在团队中工作了一段时间并且了解了事务是如何运作的。这在您对新的软件一无所知(或几乎一无所知)的情况下非常有帮助,毕竟您的问题可能会比较傻(。这没啥问题,正常并且符合预期。即使您是高级工程师,也不要对这些入门问题感到羞耻。

13. 谁/什么东西推动新功能?

产品是否有产品经理?架构师和工程师一起工作么?了解新功能需求的想法的上游是一件好事。如果能有时间和这个人(即上游)一起了解产品的近期和未来的面貌就更好了。

14. 团队之间主要的沟通渠道是什么?

他们使用 Slack 么?还是 Teams?亦或是通过电子邮件进行大部分的异步通信?工程师通常整天都在进行关于问题和其他类型的讨论。作为团队的新成员,您肯定是希望加入这些沟通渠道的。

外部

15. 如何获得用户反馈?

这个是在 github 上开源的软件么?Github Issues 是我们获取反馈的方式么?是否有销售团队能够作为客户到产品团队的代理?是否有不同的支持团队能够收集常见用户的痛点?换句话说,了解我们如何获得用户反馈是好的有必要的,不管是通过其他平台、个人还是团队。毕竟我们是给用户写软件。

16. 我们的用户支持哪些协议?

(这一条我没搞明白

是否有我们必须遵守的 SLA?我们应该对用户的场景支持什么?

17. 公共/用户文档(手册)在哪里?

这点很重要。无论软件有多好,用户文档都应该是最准确的和最新的。您能在哪里浏览到这些文档?文档如何保持最新?谁要对这些负责?(希望答案是“每个人”)

产品关注

18. 软件有哪些高级痛点?

了解团队是否有正在处理的重大软件问题。是否是架构问题导致了其他问题?是否存在可以被利用的安全漏洞?是否有不断出现、需要解决的用户的问题?

19. 利益相关者关注什么?

软件中是否存在重要人物或其他团队想要的具体功能?利益相关者通常会对软件短期和长期的路线图产生重大影响。了解他们的关注点能够帮助预想到即将发生的事。

20. 软件的发布周期是怎样的?

了解向用户发布软件的频率和时期。团队是否每天发布多次?还是一年发布两次?了解该软件的发布时间表能够帮助您了解软件的开发节奏。

总结

对于大多数软件工程师来说,加入一个新的软件团队并致力于一项新技术是非常激动人心的!此时是一个学习和神秘(mystery,我没搞懂这是个意思)的时间。 希望这些问题能您在下次加入新团队时帮助加快入职流程!

TOP