各种软件开发团队做事情的方式是非常不同的。甚至在一个公司中,不同的团队可能会有很多变量。身为一名软件工程师,开始与新的人员和新的软件一起工作,这是一件令人兴奋的事情。就个人而言,我最近开始和一个新的(对我来说)软件一起工作。这不是常规或经常发生的事情,因此,我抓住这个机会,认真思考一下我近期需要学习的东西。
下面是我认为软件工程师在加入一个新的软件开发团队应该考虑问的问题,按类别分类。
技术
1. 如何在本地构建软件?
那是你首先要学习的东西之一。不管怎样,你要开发并运行这个软件。构建是第一步!
2. 如何在本地测试软件?
CI 管道对于解决测试错误非常有用,但是为了缩短内部开发循环周期,你希望能够在开发的时候在自己的机器上运行测试,以确保测试是正确的,同时检查回归的情况。管道不应该是你创建或导致测试失败的第一个迹象。
3. 如何设置开发环境?
希望在团队文档中有明确的要求,但是你应该了解开发机器上需要哪些不同的工具,这样你才能成为团队中的生产成员。一次性设置好环境来满足 95% 的需求,比你在开发过程中遇到的错误和逐渐产生的依赖性的挫折要好很多。
4. 源代码放在哪里?
除非你是在一个全新的团队中开始工作,并且软件还没有 编写出来,否则你将在一个已有的代码库中工作。这些代码存在于哪里?如何在本地机器上获得这些代码呢?
5. CI/CD 管道在哪里,如何运行的?
希望能加入一个确保交付产品质量的团队,最常用的工具就是 CI/CD 管道。找出它的位置,并简要地了解它是如何运行的(有可能只是通过点击来了解情况)。查看一下最近的一些运行情况,看看有哪些步骤正在进行。
6. 产品待办事项在哪里?
你将在目前的状态下使用该软件,但是最好知道软件未来的状态应该是什么。快速浏览一下待办事项,看看产品的一些即将到来的优先事项是什么。
7. 如何进行预生产和生产测试?
是否存在集成环境?这个团队是否进行金丝雀构建和部署测试?这个团队是否认同混沌工程?要确定这个团队如何确保其产品软件的生产符合特定的标准。
8. 随叫随到是什么样的?
这个软件是否存在随叫随到的情况?如有,轮流值班的情况是怎样的?事件发生的频率如何?对非工作时间有无随叫随到的要求?当我待命时,怎么通知我呢?通常情况下,当你开始一个新的团队的时候,你不会被推到轮值,因此随着时间的推移,你应该在开始接到电话之前就能得到这些答案。
9. 内部文档在哪里?
团队在哪里维护他们的内部文档?它是如何被分割的?是最新的吗?
合作
10. 团队中的那些人在关注什么?
一般来说,软件团队中有只有一些工程师。有时每个工程师都在做一件事,但这并不典型。子项目通常是由一个或几个工程师共同完成的。了解团队中不同程序员的工作重点是很好的,这样你才会有所了解。通常情况下,随着时间的推移,站会(Standup)会使你对这一点有个很好的认识。
11. 团队每周的节奏是怎样的?
是否有每日站会?每周签到一次?了解你的新团队的“典型”一周是什么样子的,是件好事。
12. 对于“初学者”的问题,我应该联系谁?
一般情况下,当你开始一个新的团队时,你应该被指派一个“入职伙伴”,这个人已经在团队中,而且知道事情如何运作。这种做法很有价值,特别是当你对新软件一无所知(或几乎不知道)时,你的问题可能非常普通。这很好,很正常,也很值得期待。对于初学者的问题,即使你是一名高级工程师,也不必感到羞耻。
13. 是谁/什么推动了新特性?
是否有产品经理?是否有一个架构师与工程师一起工作?最好了解特性要求的上游想法。甚至更好的是,安排一些时间与这个人(或几个人)接触,以了解产品的近期和长远前景。
14. 团队主要如何沟通?
他们使用 Slack 吗?团队?还是大部分的异步沟通是通过电子邮件?工程师们通常一整天都在谈论问题和其他类型的讨论。作为团队中的新成员,当然,你希望自己能融入这些沟通渠道。
外部
15. 我们如何获得客户反馈?
这是 GitHub 上的开源软件吗?GitHub 的议题(Issue)是我们获得反馈的方式吗?还是有一个销售团队作为我们从客户到产品团队的代理?是否有一个不同的支持团队,我们可以从中收集常见的客户痛点?换句话说,了解我们如何获得用户反馈非常有用:无论是通过其他平台、人员还是团队。毕竟,我们为用户编写软件。
16. 对我们的客户有哪些支持协议?
有我们必须遵守的服务级别协议吗?对于我们的用户场景,究竟支持什么?
17. 公共/客户文档在哪里?
这个问题很重要。如今,无论软件有多好,客户文档都要准确、最新。什么地方可以浏览这些文档?文档是如何保持最新的?谁来负责呢?(希望答案是“所有人”)
产品重点
18. 软件有哪些高级痛点?
如果能够了解软件和团队正在解决的一些大问题,那就好了。是否有一些架构问题导致了其他问题?是否存在可利用的安全漏洞?常见的客户问题是否持续出现并需要解决?
19. 利益相关者的关注点是什么?
软件中是否有关键人物或其他团队希望看到的某些特性?一般来说,这些利益相关者会对软件的短期和长期路线图产生重大影响。理解他们的关注点可以帮助你想象即将发生的事情。
20. 软件的发布周期是怎样的?
最好能了解软件发布给客户的频率和节奏。该团队是否每天连续部署多次?还是一年有两次发布?了解这种软件发布的时间表,可以让你对软件的节奏有一个很好的了解。
总结
对于大多数软件工程师来说,加入一个新的软件团队,从事一项新的技术工作,这是一个令人兴奋的时刻!这是一个充满学习和神秘感的时代。但愿这些问题能帮助你在下一次加入新团队的时候加速入职过程。
作者介绍:
Thomas Stringer,微软软件工程师,专注于 Linux、开源软件、DevOps、分布式计算、容器化和 Azure。曾在许多不同的语言和平台工作过,目前主要是 Python、Go 和 Shell 脚本。
原文链接:
评论