至暗时刻,风“云”突变(三):2015到2019,从5到70,从0到100万,技术推动业务的云实践,我创业的这4年

简介: 危机突来,我们怎样面对,应对?从2015年到2019年,业务DAU从0到100万,团队从5人到70人,讲述技术人的创业之路,解读如何从技术推动业务,分享作为CTO的心路历程,一同感受创业的五味杂陈。

突如其来的事故让人猝不及防,一天早上合伙人突然电话我,萌萌,线上出事故了,我们把客户的结算标记改成我们自己的了!我听完也异常震惊,立即电话后端、桌面端、前端的负责同学,让他们立即查证;我也即刻赶往公司,路上大致梳理了一下思路,这个事故大致持续的时间、波及的用户、对客户可能造成的损失;在到公司之前前端和后端同学给我了反馈,前端一段测试代码凌晨发到线上了,反馈之前已经回滚处理了。我一赶到公司,负责业务的合伙人就面色沉重的对我说,萌萌,这个问题严重了,对我们口碑造成了恶劣影响,现在线上已经各种负面消息了(原话记不清了,大意应该比这个更严重)。

我们立即召开了合伙人会议,同步相关信息。现状比我预想的要严重,严重的问题在于由于上个Q我们意外的成功以及对于原有生态略带侵略性的搅局,让我们的竞争对手对我们充满敌意,日常除了技术性的攻击还有不曾停歇的恶意宣传,让我们对于自己的品牌和声誉小心翼翼,如履薄冰,而这次事故,正好授人以柄。线上对于我们的工具产品偷用户订单,篡改用户信息、收益的宣传在圈内已经铺天盖地,我能体会业务合伙人当时的压力和心境。会议讨论了应急响应方案:
1、产品关键位置公告道歉,并提出赔偿方案;
2、整理事故期内所有用户的损失;
3、安排赔偿事宜;

会议上争论的主要是两点,该如何应对这次危机;因为事故由技术引发,如何处理,今后如何避免。由于外界由此引发的恶意攻击很多,对于现阶段的影响非常,我们把它定性为影响到公司生死的重大事故,如果要按事故层级来定义的话,我想当时我们是把它定为P0了,虽然后续我们也经历了不少事故,但这次事故对于公司发展阶段的意义深远,这也可以说我们第一次真正面对生存危机。对于如何应对,我们有不同的意见,对于公开道歉、赔偿方案大家并无异议,我的意见是这次事故即是危机也是我们成长的机会,是我们危机处理的考验,我希望除了道歉,赔偿,在各个渠道尽可能的和我们的客户沟通,降低用户流失的风险,也希望我们向大家反馈在我们的产品上线以来我们为了保障质量所做的各种努力,包括我们不断在遭受恶意的系统攻击,我们为大家提供的安全防护,在这点上我们的业务负责人认为事故就是事故,我们要做的是我们的处理和诚意的道歉,如何能争取到用户的认可,多说其他可能适得其反,大家看问题的视角不同,但最后大家达成一致,我们只道歉、赔偿。

我知道这样给整个技术团队带来的压力巨大,特别是事故导火索的前端同学,而这一切都是我要承担和应对的。讨论的第二个焦点其实就是我这边了,因为我刚刚接手技术团队,大家都看着我要怎样处理,未来怎样避免如此的危机。我说了我的意见,这次事故其实是整个开发流程不规范,我们前期业务不断迭代试错带来的坑,这样的事故不是一个工程师能承担的,这次事故我承担事故责任,自罚一个月的薪资;技术层面梳理前端开发流程,后端全面检查涉及用户核心标记,重构相关模块,明确我们的核心功能的测试开发模式。

会议结束后,我们召开了全员会,向大家同步了这次事故、影响以及我们合伙人团队的处理结果,我们尽量淡化了涉事同学的问题,以免将压力传导到一线的工程师层面。接下来我的事很多,当我重新梳理了前端的开发流程后,发现了不少问题:没有统一的测试环境,之前前端都是各测各的,而且基本是本地;上线比较随意,极少Double Check;为了快速完成功能,前端写了不少本地变量,这在探索性的业务阶段不能说不行,但是后果就是隐患太大,这次事故就是这个触发的;核心模块没有从后端获取,自己直接就写了。梳理下来,和前后端、桌面端的同学一起开了个会:
1、汇总因为这次事故波及到的用户信息;
2、汇总事故期间我们新增的订单数据,所有新增订单全部作为补偿订单的基础提供给业务方制定补偿方案;
3、搜索前端及桌面端所有涉及用户标记的模块,全部迁移到后端;
4、后端全面检查用户标记相关代码,抽象成独立模块;
5、前端、桌面端开发流程和后端统一持续集成发布;

因为这件事,我在团队内全面推动阿里云云效的应用,尽管当时云效主要面向Java等强类型语言的持续集成,不过在我们和云效团队的配合下,把我们的系统整体上迁移到云效了。当时我们的同学也有不少抵触的,但是我还是强行推进了。我们也发现了一些问题,当时云效整体部署的情况还没有现在这么完善,我记得打包后的代码要上传到北京的部署中心,然后再从北京节点下载到杭州的部署节点,这点让我们非常尴尬,而且当时两个节点之间的上传下载速度还不理想,我没有去了解细节了,导致我们的发布时间要比原来的简单部署慢了近10分钟,后来和云效的同学现场沟通曲折解决了(我印象中是中间上传下载的过程我们短路处理了,不过包还是要上传到北京的中心节点)。

这次危机对我们合伙人对我都是一次考验,虽然有很多细节还值得探讨,但是我们依然艰难的度过了,对外我们向我们的用户、客户表明了我们的诚意以及改进,而内部我收获了团队的团结,我也收获了一个不错的前端负责人,这是后话。

Q3对我们来说,几乎就是忙于应对:微信封杀,友商攻击,事故应对;最终这个Q的目标我们没能完成,甚至我们都没有在团队内宣布结果,低调处理了。而这一切,视乎还并没有结束,更大的危机还在等待着我们……(未完待续)

相关实践学习
流水线运行出错排查难?AI帮您智能排查
本实验将带您体验云效流水线Flow的智能排查能力,只需短短1-2分钟,即可体验AI智能排查建议。
ALPD云架构师系列 - 云原生DevOps36计
如何把握和运用云原生技术,撬动新技术红利,实现持续、安全、高效和高质量的应用交付,并提升业务的连续性和稳定性,这是云原生时代持续交付共同面对的机会和挑战。本课程由阿里云开发者学堂和阿里云云效共同出品,是ALPD方法学云架构师系列的核心课程之一,适合架构师、企业工程效能负责人、对DevOps感兴趣的研发、测试、运维。 课程目标 前沿技术:了解云原生下DevOps的正确姿势,享受云原生带来的技术红利 系统知识:全局视角看软件研发生命周期,系统学习DevOps实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
存储 自然语言处理 程序员
探究C/C++编码世界:从字符编码到中文处理之艺(一)
探究C/C++编码世界:从字符编码到中文处理之艺
509 1
|
机器学习/深度学习 网络架构 计算机视觉
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
YOLOv5改进有效涨点系列->适合多种检测场景的BiFormer注意力机制(Bi-level Routing Attention)
651 0
|
Java
Java中的控制流语句:if、switch、for、foreach、while、do-while
Java中的控制流语句包括条件判断语句 `if`和 `switch`,以及循环语句 `for`、增强型 `for`(`foreach`)、`while`和 `do-while`。这些语句提供了灵活的方式来控制程序的执行流程,确保代码逻辑清晰且易于维护。掌握这些基本语法,对于编写高效和可读的Java程序至关重要。
567 15
|
人工智能 安全 机器人
科技云报到:洞见2025年科技潮流,技术大融合开启“智算时代”
科技云报到:洞见2025年科技潮流,技术大融合开启“智算时代”
367 12
|
安全 Java 数据库
ifPresent()`方法的用途、使用场景
ifPresent()`方法的用途、使用场景
1363 4
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
安全 前端开发 测试技术
【灵码助力安全2】——利用通义灵码辅助复现未公开漏洞的实践
本文介绍了利用通义灵码辅助复现未公开漏洞的过程,包括XSS和文件包含两种典型漏洞类型。通过具体案例,展示了如何结合CVE描述和源码,使用灵码定位漏洞位置、分析漏洞原因,并验证漏洞的存在。文章强调了灵码在提高漏洞复现效率、减少手动排查时间方面的优势,同时也指出了其在复杂场景下仍需人工判断的局限性。未来,期待灵码能在自动化安全测试、动态分析及威胁建模等领域发挥更大作用,全面提升软件安全性。
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
327 5
|
人工智能 Java
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
912 0
|
监控 安全 网络协议
深入理解HTTPS及其默认端口
【8月更文挑战第24天】
7005 0

热门文章

最新文章