作者:张建鑫, 曾任IBM高级软件架构师, 滴滴高级技术专家, 现任新东方集团高级技术总监

1月31日,集团领导决定由产品技术中心的新东方APP团队牵头做周一到周五的集团公益课, 提供给全国中小学生使用,并且要求在2月10日上午9点前交付上线。

这句话,你品,你细品,它实际上就是要求我们从零到一地去实现和交付一个互联网轻课平台,并在短时间内里实现产品的冷启动和线上用户增长,这本质上就是一次小型互联网创业项目,而且由于极短的开发时间,刚性的上线日期,让这个项目一开始就是一场生死时速。这个平台要负责把两端的用户连接起来,一端是集团优能和泡泡两大项目中心的内容制作老师和教务管理者,另一端则是全国十二个不同年级,使用不同版本教材的中小学生。

集团内容制作方,要能够在这个平台的B端上管理和制作不同年级,科目,和教材的课程、练习和课表。

全国中小学生,要在这个平台的C端上看到适合自己所在年级,所用教材的视频课程,并且可以通过微信小程序做课后练习。

这件事情的参与团队除了从APP团队紧急抽调来的的10几名研发,还包括了中学项目中心的十几名产品技术,小学项目中心的几名研发,内容制作团队的数十名老师,参与的人非常多,而且横跨多个部门,这么多人参与,又必须在家远程办公,时间又如此紧迫的项目对团队的沟通协作,和项目管理造成了巨大的挑战,一开始项目失败的风险就已经很高了。

这件事情除了表面上看的到的需求以外,还隐含了大量的用户看不到的重要需求,例如线上的用户增长需求,用户的信息搜集和用户行为分析需求,用户人群画像和商机转化需求,学生上课提醒需求,课程视频防盗链需求,课程海报投放及活动运营需求。在正常情况下,每个需求都需要走标准流程,需要花费大量的时间进行 业务需求的分析讨论、团队成员的认知对齐、技术方案设计和评审、 代码设计和评审、团队联合调试和测试,质量检验和问题追踪等等工作。 但这次,以上所有的工作被压缩到了2月1日到2月9日的9天之内进行。尽管时间如此紧张,但为了项目最终可以按时上线,高质量稳定运行,团队一开始就决定,急事慢做,谋定后动,不着急开始写代码。从2月1日起,用了3天的时间, 拉各方密集远程开会,每天讨论到深夜去完善技术设计方案,跟公司各个合作方讨论对各种可能出现的情况, 为各种异常和突发情况准备预案,和降级处理方案。为可能出现的大流量,高并发做足技术准备, 同时也对齐了二十几位产品研发人员对于这个项目的,从整体上到细节上的认知和理解。

为了保障集团各个合作部门工作协同有序进行,项目被拆分成了两期交付,

2月5日晚, 上线用户注册,和用户信息搜集,与活动的海报投放分享工作, 市场部开始推广带有免费课二维码的文章。

2月9日晚,上线全部轻课平台功能。两大项目中心负责课程录制上传,在后台创建一周课表

2月10日上午9点, 广大中小学生进入系统,开始上第一节公益免费课。信管数仓团队负责数据分析。

2月28日, 集团信管CRM团队,客服,和各个分校负责启动部分商机转化工作

经过认真的讨论和细致的技术方案评审后,研发团队在2月3日傍晚启动了开发工作,2月5日傍晚,后端开发基本完成, 但前端开发遭遇了较大阻力,工作一直持续到2月6日零点左右,全部开发才完成提测,测试团队测试后发现较多bug,且修复进度缓慢。为了保障2月6日市场部活动预热推广的顺利进行,产品技术团队连续通宵加班,同时项目中心和产品在2月6日上午才最终敲定了第一周的公益课表,制作了免费课领取成功后的课程表海报,2月6日上午,经过集团各部门的协同作战,终于在2月6日上午11点半成功交付上线。 稍后,市场部于2月6日中午12点30分开始了文章推广和活动预热,但很快就发现推广文章里的二维码有问题,原计划文章里放置新东方网公众号的二维码,用户由公众号进入免费课, 但结果文章里错误放置了免费课领取成功页面的二维码。这样的结果会导致用户在扫描二维码后,直接就看到领取免费课成功的画面,而不会留下任何用户信息。 这时候我们迫不得已,远程把刚躺下的研发和测试再拽起来,紧急实现了一个技术兜底方案。让用户从扫码打开的领课成功页面跳转回到用户信息搜集页面。幸好修复及时,1点半左右上线了方案,此时文章转载量还没起来,很多用户还没来得及看到文章, 所幸没有让第一天的种子用户白白流失掉。2月6日,免费课访问用户8万3千人,注册用户5万2千人

由于原定的二期开发是在2月6日启动,而此时研发团队已经通宵奋战一夜,连续工作近30个小时,只能整体推迟到2月7日再启动二期开发。程序员是一帮特别可爱的人,努力而谦虚,喜欢自嘲自己是码农,搬砖的,但真正熟悉技术工作的人应该知道,程序员是真正的知识工作者,软件工程不是简单的搬砖工作,随时加个anybody就能起作用。 项目进行到此时,加人是于事无补的,只能继续依靠现有的这些开发人员进行二期开发工作。

因为工作实际已经落后于计划中的进度,二期的开发工作中,通宵加班已经无法避免。

2月7日修整后,研发启动了二期开发工作,由于要往回赶进度, 因此2月7日当天大家从早晨9点开工,一直干到晚上2月8日零点50分收工,中间也进行了大量的代码review和技术讨论,弥补了前期疏漏,消除了后期隐患, 但2月7日和8日两天,每天都会有一些新的需求提出和变更,熟悉软件工程的人,都知道在开发阶段进行需求变是让开发团队疲于奔命,痛苦不已的事儿,但这些变更都是必须的、十分必要的,都是为了保障学生的体验,保障集团的利益。 只是由于项目时间太紧张,导致大家前期讨论时没办法面面俱到而已,对此研发只能咬牙挺住,努力追回进度。

2月8日早晨9点,研发开工, 一直到2月8日傍晚,开发进度还是没有被追赶回来,大家决定继续通宵工作,到2月9日凌晨5点53分, 测试终于发出报告,主流程跑通,白天计划做整体测试,研发和优能泡泡小程序联调测试。安排大家赶紧休息几个小时。同时宣布2月9日冻结需求,不接受任何新需求和变更需求。

2月9日上午8点开始,换了一批测试老师进行整体测试,共报告了20几个Bug。2月9日11点多,远程把研发拽起床,开始修Bug,以及跟泡泡优能小程序联调。

2月10日凌晨4点57分, 测试发出报告,bug清零,整体测试通过。 此时还在坚持战斗不只是APP技术团队,还有优能小程序技术团队,泡泡天天练小程序技术团队。

在高级技术专家邢沛老师的指导下,泡泡小程序团队连续加班奋战,硬是在短短几天内把小程序的并发承载量从区区一百用户,提升到了支持并发万人的规模。 优能小程序团队也大量扩容,进行了并发承载能力的提升。

2月10日上午8点, 上课提醒程序定时启动,领课成功用户陆续收到了上课提醒。 9点正,服务器流量激增, 在9点零一分钟,服务器访问流量达到了32万RPM的历史峰值记录,此刻23万用户同时涌入了免费课。有惊无险, 监控显示性能良好,用户请求毫秒级应答,体验良好, 服务监控没有追踪到一条慢事务, 服务稳定性经受住了大流量,高并发的考验。

此时客诉群的问题多了起来。个别用户在一些机型上会遇到闪屏问题。 判断是前端的适配问题,虽然不是大规模故障, 但用户基数大,报告的人比较多,没办法, 再次远程拽研发起床修BUG。

2月10日晚23点50分, 公益课注册用户总人数39万人, 当天的访问用户32万人。

上线后的第一周,以数据分析和优化系统的工作为主, 并启动了用户增长工作,接入各种用户增长渠道。 项目中心的老师精心制作课程内容,推出精品课程,做好运营活动,项目中心和产品技术一起努力,确保了用户增长平稳,不掉量。

3月3日,中午12点, 集团免费公益课注册用户累计突破100万人。这次活动的用户增长,没有花一分钱做广告投放, 没有接入任何付费渠道, 不到一个月注册破百万,非常难得。

困难多, 但办法总比困难多:时间紧,任务重,需要解决远程办公的困难,软件开发是多人协作进行的, 如果大家对一件事情的理解有任何不一致和偏差, 就会产生问题,增加时间成本,并导致项目延期。按正常工作节奏和进度安排的项目,是给大家充分思考、讨论,对齐的时间得,但是这个项目没有那么多时间,而且受到疫情影响,大家都只能远程办公沟通, 很多事情只能是口头进行。 最后迫不得已,只能采取日本人的管理办法。

远程开会时,同一件事情, 项目负责人讲一遍, 后端研发讲一遍, 前端研发讲一遍, 测试讲一遍。 任何人听着不对,就重讲一遍。同一件事情经常讲6遍后,大家才可以完全对齐,执行到位,充分讨论对齐,实际上避免了很多返工现象,消除了远程协同工作的影响,甚至提升了团队的工作效率。

公益课是一个多个部门协同进行的联合项目,APP团队共有10名研发测试和3名产品设计参加, 但很多别的部门也在协同支持, 集团技术副总裁李海涛老师和信管的高级技术总监们review了我们的技术方案, 并帮助小程序扩容和优化。 优能小程序技术团队,泡泡小程序技术团队负责了两个小程序的开发工作,也是免费课重要组成部分。 新东方网负责帮免费课导流,和通知上课提醒。

市场部负责了免费课的渠道拓展,活动预热,文章推广宣传

信管的数仓和CRM负责了免费课的数据分析,人群画像,和商机转化。

泡泡和优能项目中心的老师们负责了公益课程视频的制作上传,课表和练习的管理。

集团运维团队负责我们7*24小时随时发生的上线工作,和服务器扩容工作

在免费课打仗FT群里一共有60多名项目参与者。

集团高级副总裁吴强老师, 在项目上线当晚, 往60多人的免费课打仗FT群里扔了两个大红包,以资鼓励。

英语里,市场活动这个单词是Campaign, 同时这个单词还有战役的意思,我们公益免费课既是一个市场活动,又是一场多部门协同作战的战役。其艰苦卓绝激烈紧张的程度,和多兵种协同的程度,不亚于一场真正的战斗。

新东方集团K12公益免费课战役记的更多相关文章

  1. Vue-项目之免费课和购物车实现

    调整首页细节 固定头部 App.vue中代码 <style> body{ padding: 0; margin:0; margin-top: 80px; } </style> ...

  2. 新东方APP技术架构演进, 分布式系统架构经验分享

    今天的演讲题目是"新东方APP技术架构演进, C端技术经验分享" 作者:张建鑫, 曾任IBM高级软件架构师, 滴滴高级技术专家, 现任新东方集团高级技术总监 古代东西方的思想家都产 ...

  3. 新东方APP技术团队建设

    作者:张建鑫, 曾任IBM高级软件架构师, 滴滴高级技术专家, 现任新东方集团高级技术总监 2019年注定是不平凡的一年,在俞敏洪老师对科技条线的密切关注下, 吴强老师亲自操盘了对产品技术条线的改革, ...

  4. 龙光集团地产跃居“中国房地产500强TOP28”

    3月20日,由中国房地产业协会.上海易居房地产研究院中国房地产测评中心联合主办的2019中国房地产500强测评成果发布会在北京成功举办.本次测评成果显示,龙光集团地产凭借综合实力,不仅成功跻身“中国房 ...

  5. 技术之心 | 云信和TA们携手打响防疫战

      1月27日,教育部发布<关于2020年春季学期延期开学的通知>,各地高等院校.中小学.幼儿园纷纷推迟开学.疫情当前,学生们的鼠年寒假变得无比漫长. 网易云信众多教育客户以行动践行教育的 ...

  6. day 86 Vue学习之五DIY脚手架、webpack使用、vue-cli的使用、element-ui

      本节目录 一 vue获取原生DOM的方式 二 DIY脚手架 三 vue-cli脚手架的使用 四 webpack创建项目的玩法 五 element-ui的使用 六 xxx 七 xxx 八 xxx 一 ...

  7. 译:面试投行的20个Java问题

    原文链接:https://dzone.com/articles/var-work-in-progress 作者:Anghel Leonard 译者:沈歌 如果你需要准备面试,可以看一下这篇博客中20个 ...

  8. 少儿编程|Scratch编程教程系列合集,总有一款适合你

    如果觉得资源不错,友情转发,贵在分享!!! 少儿编程Scratch: 少儿编程Scratch第一讲:Scratch完美的初体验少儿编程Scratch第二讲:奇妙的接球小游戏少儿编程Scratch第三讲 ...

  9. drf三大认证解析

    目录 三大认证 认证模块: 权限模块 频率模块 RABC author组件 认证权限六表. Content_type 认证与权限工作原理+自定义认证类 自定义权限类 admin关联自定义用户表 前后台 ...

随机推荐

  1. odoo14里面的log模块

    日志记录是分析 Odoo 服务器运行服务时发生的操作的最重要工具之一.此外,在大多数情况下,通过分析服务器日志,我们可以清楚地了解错误或存在的任何错误. 最初,如果我们想使用日志记录选项,我们需要从 ...

  2. odoo12动作里添加向导

    在odoo12的 动作里添加向导例子1:只会在tree视图里显示,不会在form里显示 <act_window id="action_change_stage_ttest" ...

  3. 虚拟机安装的kali操作系统实现共享文件夹

    虚拟机共享文件夹设置. 1.[虚拟机]-->[设置] 2.先在本地新建一个共享文件夹,然后将此文件夹的路径添加到虚拟机 3.进入kali操作系统,运行命令sudo vmhgfs-fuse .ho ...

  4. jquey 定位到有某个类

    $active = $('.g-pop-box .box-option a[class="on"]')

  5. Spring Cloud分区发布实践(4) FeignClient

    上面看到直接通过网关访问微服务是可以实现按区域调用的, 那么微服务之间调用是否也能按区域划分哪? 下面我们使用FeignClient来调用微服务, 就可以配合LoadBalancer实现按区域调用. ...

  6. 洛谷P1879题解

    题面 显然是个状压DP. 看数据范围,不难发现算法复杂度应该是 \(O(n\times 2^n \times 2^n)\) . 显然第一个 \(n\) 是遍历每一行的土地. 后面两个 \(2^n\) ...

  7. [Ynoi2011]初始化 题解

    第一道Ynoi,纪念一下. 众所周知,Ynoi会进行惨无人道的卡常操作,所以我们可以使用暴力去做Ynoi. 于是乎,我们考虑分块+暴力. 对于操作2,不难发现是道裸的分块,可以抄P3372的代码. 对 ...

  8. MSF+Nmap TCP空闲扫描

    MSF+Nmap TCP空闲扫描 前言 TCP空闲扫描是一种高级的扫描技术,可以冒充内网中另一台IP地址来对内网中的目标进行隐秘的扫描. 正文 在进行扫描之前,我们需要了解一个概念,即递增IP帧标识, ...

  9. “入职一年,那个被高薪挖来的Android开发被劝退了。”

    其实,在很多小伙伴的想法中,是希望通过跳槽实现薪酬涨幅,可是跳槽不是冲动后决定,应该谨慎啊~ 01 我的学弟,最近向我吐槽,2020 年上半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满 ...

  10. 算法竞赛中的常用JAVA API :HashSet 和 TreeSet(转载)

    算法竞赛中的常用JAVA API :HashSet 和 TreeSet set set容器的特点是不包含重复元素,也就是说自动去重. HashSet HashSet基于哈希表实现,无序. add(E ...