Secret Santa

又是一年年末。

如果说和以往有什么不同的话,那应该就是现在我们仍然生活在被 COVID-19 肆虐的世界里吧。

因为这个原因,我已经有九个多月没有回过办公室了。这也就意味着,除了住的比较近的一些同事,其余的同事已经有九个多月没见了。我们甚至有一些在封锁期间入职后来又因为不同原因离职的同事——这是一种很奇怪的体验,我们可能在线上聊过工作,但从未在生活中谋面。

因为从未谋面的新人很多,为了让这些新人更快地融入,我和我的另外一位同事在十月私下策划了一个组内活动,叫做 “Secret Santa”.

什么是 Secret Santa? 我其实在两年前写的《又是一年圣诞》里提到过:所有想参与的人都会把自己的名字写在一张纸上折起来然后每一个人抽签,抽到谁就给谁准备一份圣诞礼物。我就职三年多,每一年都没有缺席 Secret Santa. 今年的情况很特殊,我在九月的时候就在想:“如果我们无法回到办公室,会不会这个传统就会在今年断掉呢?”

想着想着,我就去找之前几年的活动组织者,讨论今年我们如何能让这个传统延续下去。最后,我和他打算用一个月的闲暇时间去制作一个在线版本的 Secret Santa, 功能包括用户管理、自动抽签、查看抽签结果等,定在 11 月初上线。

我们定下来的流程大概是这样的:这个项目我们会保密到 11 月初,定下 11 月 15 日 0:00 UTC 作为倒计时结束的时间。在向全组公布之后,大家有大概两周时间去考虑是否参加。倒计时结束之后,后端会启动一个抽签算法,算出每个人抽到了谁。同时,还会禁止新用户注册和地址更改。在倒计时结束之后登录,就可以看到自己抽到了谁,以及他的地址。这样,就可以在购物网站上向这个人发一份价格约 €20 的圣诞礼物。因为现在很多人在家工作,网购对物流的压力也比以前大很多,加上黑色星期五和圣诞两个购物季,我们将活动提前到 11 月 15 日而不是以往的 12 月中旬,给大家充足的时间躲开年末的物流拥塞。

技术方面,因为页面比较简单,原本打算前端使用纯手写的静态 HTML 页面;后来,和我的同事讨论之后采用了 React 作为前端的方案。一是可以之后部署为静态页面,二是我们考虑使用的部署工具 Amplify 不支持纯手写的静态 HTML 页面。Amplify 是一个自动化部署的工具,可以根据需要,快速部署一整套 AWS (Amazon Web Services) 服务组成的套件。例如,如果需求是一套 API 系统,Amplify 则会自动创建 API Gateway 和 Lambda 的资源;如果这一套 API 系统同时含有数据库的需求,Amplify 在先前的基础上还可以部署 DynamoDB 数据库。不同组件之间的权限管理都是由 Amplify 自动管理的,Amplify 会根据使用逻辑给出最小权限,防止权限被滥用。

而网站的后端则是由多个 AWS 的服务组成的:Cognito 负责用户管理,API Gateway 以及 Lambda 组合起来则是负责 API 以及后处理,CloudWatch 负责在倒计时结束之后触发另外一个 Lambda 函数,运行抽签的算法;DynamoDB 则用来存储抽签的结果。在 Cognito 的触发器上,我们还限制了注册使用的 E-mail 地址——毕竟这只是我们组私下的活动, 如果被其他人注册干扰了活动就不好了。

11 月初,当我们一揭晓今年的 Secret Santa 活动,就引来了大家的注意。倒计时结束之时,我们全组 64 人,一共有 41 人注册参加。除了组员的参与热情很高之外,这个活动还引起了领导层的注意。我们的经理问我们,如果要将这个项目部署给其他组,难度会有多大。那之后的几天,我们就在研究是否可以重新部署。最后,我们写下了重新部署的步骤,并且向其他组发出了邀请。

在研究重新部署的步骤之时,我们发现了一些需要改进的地方。因为这个小项目本来是我和我同事俩人制作的“玩具”,我们没有考虑用户数和重新部署的需求。在重新部署的时候,有一些需要手动更改代码的部分——例如,前端 HTML 页面上手动给定的倒计时结束时间是和后端的抽签算法触发时间是分离的——这让我们觉得这个项目做的不够“优雅”。此外,在维护我们本组的 Secret Santa 时,我们发现我们没有考虑到一些功能性的需求。比如说填写愿望单、快递单号、电话号码的功能我们都没有做。如果 2021 年我们还有机会组织一次 Secret Santa,我们就得解决这些问题。

在其他部门收到我们发出的邀请之后,有四个组联系了我们,希望我们给他们每个组部署一份。最后,有超过 120 人参加了我们设计的在线版 Secret Santa.

这对我无疑是一种鼓舞。说起 2020 年,你能想到的除了 COVID-19 还有什么?我希望对于那些新人,这次活动能让他们感受到来自一个可能素未谋面的同事的温暖;让他们记得 2020 年仍然有一些美好尚存。这些新入职的同事,有一些是第一次来到爱尔兰,在这里没有什么朋友。那么这一次活动对他们就是一个开始,是一个结交新朋友的契机。看到他们一个个发出来的礼物照片,看到他们享受参加这个活动的过程,我心里觉得很温暖。

我想起了我在这里度过的第一个圣诞节,那还是 2013 年,当时我还住在大学的学生公寓。我记得那时大多数学生都在圣诞假期回家了,公寓里也没剩几个留守的学生。学校在先前发送过邮件询问有多少人会在圣诞节期间留校,我当时还不明白原因。后来才知道,学生会为我们留守的学生准备了一些小礼物,在节前按照先前登记的人数挨个送。这对当时的我来说是个惊喜,希望这一次收到礼物的同事里,有和当时的我一样心境的人。

我还记得,那年的圣诞夜还下了一场小雪。虽然最后没有积雪,但也让当时的我感受到了圣诞节的气氛。那时,iTunes Store 还有圣诞节的活动,我免费领取了《小鬼当家 (Home Alone)》的电影,在那几天假期里不知道看了多少回;就是因为这部电影,我对圣诞节下雪有着不可理喻的幻想。按照这几天的天气预报,似乎不会像那年一样在圣诞节下雪,但惊喜有的时候可能会像那年一样无声无息地降临。

圣诞节快乐。