作者:张建鑫, 曾任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. P6982 [NEERC2015]Jump

    P6982 [NEERC2015]Jump 题意 给你一个未知的 01 串,每次可以输出询问一个 01 串,如果该串中正确的个数刚好等于 \(n\) 或者 \(n/2\) ,将会返回相应的答案,否则会 ...

  2. odoo12学习之javascript-----2

    用例子:Creating a new field widget 这可能是一个非常常见的用例:我们希望以非常具体(可能依赖于业务)的方式在表单视图中显示一些信息. 例如,假设我们要根据某些业务条件更改文 ...

  3. 旧VC项目dpiAware支持

    起因 工作原因,需要维护一款VS2008 SP1开发的MFC项目, 发现WIN10高分辨率下显示模糊,不考虑升级VC版本情况下尝试解决 尝试 新版本VC中Manifest Tool>Input ...

  4. SQL语句(二)数据排序和单行函数

    目录 一.排序查询 1. 基本排序 2. 多条件排序 二.单行函数 调用方法 字符函数 ①LENGTH函数 ②CONCAT函数 ③upper 和 lower ④substr ⑤instr ⑥trim ...

  5. 我一个五年Android开发,居然被一个技术不如我的面试官嫌弃了......

    背景 首先介绍一下自己的情况.目前所在的是一家小的创业公司,待了5年多,薪资一般吧.由于这几年公司也在转型.工作经历大概可以分为 3 个阶段. 第一阶段是从进公司开始做 android app 开发, ...

  6. 实战爬取Plati官网游戏实时最低价格-Python

    需要修改url中的id_r="这个",这个id需要从Battlefield V (plati.ru)中获取,其实也是这个链接中的#s24235. 配合了e-mail推送,其实这个e ...

  7. 定制bash命令提示符

    使用shell时经常要知道当前路径,如果将它写在提示符里很节省很多敲pwd的动作,方法是在启动文件(.bash_profile, .bashrc)里加上: export PS1="[\u@\ ...

  8. 记客户端出现Connect reset问题排查。

    客户访问我们地址出现Connect reset. 网上查询说是服务端关闭,客户端还在读,就会出现Connect reset. 我们就排查为什么服务端会关闭. 网络的同事说收到了客户端的信息,但是被服务 ...

  9. 清理docker常用命令

    0.查看docker占用空间docker system df1.一键删除所有已经停止的容器 docker container prune 2.删除所有容器(包含停止的 正在运行的) docker rm ...

  10. STM32—SPI详解

    目录 一.什么是SPI 二.SPI协议 物理层 协议层 1.通讯时序图 2.起始和停止信号 3.数据有效性 4.通讯模式 三.STM32中的SPI 简介 功能框图 1.通讯引脚 2.时钟控制逻辑 3. ...