技术对于开发者来说是根本。无论是基础操作技能、问题分析能力,还是逻辑思维和对事物的认识,技术思维始终在影响着你。最直接的表现就是,在面对众多问题时,技术是否成为你手中最得心应手的工具。
稳定性
稳定性的培养首先来自意识的觉醒,然后才是能力的提升。当张雪峰作为饿了么的CTO加盟后,他经常强调的一点是开发人员必须对生产环境持有敬畏之心。
我记得有一次某地的客服中心,目睹了客服人员因为应对海量的用户投诉而情绪崩溃的场景。正是在那一刻,你会深刻并直观地理解到,你编写的每一行代码和在服务器上的每次部署,都会直接影响到真实世界中无数的人。这种认识会让你突然明白,你的工作远比你原先认为的更加重要和有意义。
所谓对生产环境的敬畏,意味着当你的作品可能给他人带来不良影响时,你会感到羞愧和内疚,从而产生敬畏之感。在应对紧急情况时,有一个基本的原则是:以尽可能减少业务影响为主,优先确保业务恢复,而不是过分关注手段和根本原因。

别把你的懊悔、决心、对稳定性的思考、各种奇妙的 idea 以及执行力体现在事故复盘会上,系统的安全生产和火灾一样,事前才有意义。
链路设计
多产品研发团队缺乏一个整体的视角,他们往往只关注自己负责的部分,而忽视了整个系统的连贯性和协同作用,这对于那些涉及广泛项目和长距离链路的系统尤其致命。
我建议,对于你负责的系统,必须深入了解其关键的上下游以及核心业务链路,这包括数据流、接口(包括调用方式、功能、逻辑)、各类异常处理以及特殊设计方案等方面。达到这个目的的一个简单而有效的方法是绘图。掌
握将整个系统概览图绘制出来的能力至关重要,这样可以根据需要放大到特定的业务场景,强调业务逻辑和上下游的交互细节,或是缩小到某个特定调用的处理逻辑和数据变化。常规的绘制图形,不必过分在乎格式和标准,重点是构建出一种符合自己理解的系统框架和思维模式,以便在需要时能够迅速地调用和应用。
技术债务
告诉自己现在为了满足某个需求而临时做出的妥协将来会补救(通过重构或重做)是一种自我欺骗。
技术债务与金融债务极为相似——它们都是不可避免的,并且会周期性地爆发问题。随着时间的推进及业务的扩展,你将会发现架构日益杂乱无章,不同系统之间的领域界限变得越来越不清晰,系统与需求与组织结构之间的对应关系变得更加复杂,同一个服务内的编码风格和风险控制标准开始出现分歧,重复发明轮子的情况屡见不鲜。
这些问题背后,常有如此的声音:“实在太忙了,没时间去整理”、“要解决那些问题需要上下游协作,耗时且劳力,很难推进”、“目前还没出现大问题,而且我们正在处理中,不要催促”。
实际上,许多技术人员内心有着对代码的洁癖,不处理问题并非他们主观上不愿意,而是受限于客观因素如精力、时间、投资回报率等,通常只有在问题真的爆发时,大家才会下定决心去解决这些累积已久的问题。
处理技术债务时,拥有一份检查清单并定期对所有系统进行复盘,同时结合自己及其他团队的历史事故进行全面的检查,是一种非常有效的策略。系统本质上是多种因素平衡的结果,包括时间、功能、风险以及未来的可能发展等。因此,面对技术债务时的挑战不在于如何将技术债务完全消除至零——这几乎是不可能的,而是要在有限的资源和时间内,准确评估哪些问题需要立即解决,哪些问题可以暂时搁置。这要求开发人员不仅要有深厚的技术功底,还需要具备优秀的判断力和决策能力,以便能够在维持系统稳定性和持续发展之间找到最佳的平衡点。
警惕大项目
管理大规模项目并非人人皆可,也非所有人能在交付压力、产品上线的质量、逻辑流程以及紧迫的时间框架内找到完美的平衡。这项任务极具挑战性,除了基础的技术能力外,还需依靠多种软技能,如有效沟通、协作、主动争取权利与承担责任、在产品和业务期望之间找到平衡点、以及在突发状况下迅速做出调整的能力。
大型项目对负责人的要求更为严苛,能够成功完成大型项目并避免留下严重问题的人寥寥无几。大型项目从准备到立项所需的时间常常远长于实际开发所需时间,项目的顺畅进行往往需要在各方面做出“妥协”,但要想达到成功,关键在于持之以恒的努力。项目失败往往是因为在实施过程中反复做出妥协,导致最终产品与初衷大相径庭。

