从写Hello World到带十人团队,我踩过的坑比你喝的水都多
上周五晚上十点半,我盯着屏幕上一个诡异的白屏 bug 发了整整四十分钟呆。咖啡已经凉透,隔壁工位的实习生早就溜了,而我这个“老” Android 转 Flutter 的跨平台选手,还在为一个 JavaScript 后端接口字段类型不一致的问题抓狂。那一刻我突然意识到:三年前那个连 Git 分支都搞不清的菜鸟,怎么就成了现在这个要给新人做 Code Review、和后端吵需求、还要安抚产品经理情绪的“Leader”?
说来惭愧,我并不是什么天才程序员。大学学的是电子信息,毕业进了家外包公司,每天复制粘贴 XML 布局,写 onClick 事件,活脱脱一个“安卓民工”。那时候觉得能跑就行,哪管什么架构、性能、可维护性?直到有一次线上崩溃率飙升到 15%,老板在晨会上点名:“小张,你这 App 是拿脚写的吗?”——我当场社死。
但也是那次事故,让我下定决心转型。恰逢公司要搞跨平台,我主动请缨学 Flutter。白天干活,晚上刷 LeetCode(毕竟最近在准备跳槽,简历不能太寒碜),早上八点雷打不动坐在工位上啃文档。半年下来,不仅把项目从原生 Android 迁到了 Flutter,还顺手用 Dart 封装了一套通用组件库。最离谱的是,因为后端 API 文档写得跟天书一样,我居然被逼着去学 JavaScript,就为了自己 mock 数据跑起来。
工具链?那是我的第二条命
很多人以为 Leader 就是开会画饼、分配任务。错!真正的技术 Leader,得是团队里最懂工具的人。因为你省下的每一分钟,都是团队的战斗力。
刚接手第一个小组时,我们还在手动打包、手动传测试包、手动回滚。每次发版都像打仗,群里消息刷得飞起:“iOS 包呢?”“Android 崩了!”“后端接口又改了没通知!”——我一度想原地辞职。
后来我干了三件事:
- 搭 CI/CD 流水线:用 GitHub Actions + Fastlane,提交代码自动跑单元测试、构建 APK/IPA、上传到蒲公英。再也不用求运维大哥。
- 统一开发环境:写了个
setup.sh脚本,一键安装 Flutter SDK、Dart、Node.js、模拟器镜像。新人入职第一天就能跑起项目。 - 自研调试面板:在 Flutter 里嵌了个 debug drawer,实时切换 API 环境、查看日志、模拟弱网。产品经理再也不用问“为什么我这边看不到数据”。
# 新人入职三件套
./setup.sh && flutter pub get && npm install
别小看这些“脏活”,它们让团队每天省下至少两小时扯皮时间。而且,当后端同学看到我们前端居然能自己 mock 接口、还能测边界 case,态度立马从“你们前端懂什么”变成“兄弟,这周能联调吗?”
和后端相爱相杀的日子
说到后端,真是又爱又恨。爱的是他们扛住了高并发、事务、安全这些硬骨头;恨的是他们总在周五下午五点发一封邮件:“接口有调整,详见 Confluence(链接打不开)”。
有一次双 11 大促前夜,后端临时把商品价格字段从 string 改成 number,理由是“更规范”。结果我们 App 全面解析失败,首页直接白屏。我当时真想冲进后端办公室把他们的键盘泡面里。
但骂解决不了问题。后来我拉着后端开了个会,定了三条规矩:
- 所有接口变更必须走 OpenAPI 3.0 规范,生成 TypeScript 类型定义
- 字段变更必须兼容旧版(比如同时返回
price_str和price) - 每次发版前,前后端一起跑契约测试(Contract Test)
我们甚至用 JavaScript 写了个轻量级 mock server,基于 Swagger 自动生成假数据。前端不用等后端联调,自己就能跑通全流程。后端反而觉得我们“太卷”,但他们嘴上抱怨,心里其实挺服气——毕竟谁不想早点下班呢?
| 对比项 | 以前 | 现在 |
|---|---|---|
| 接口联调耗时 | 3-5 天 | 0.5 天 |
| 因类型错误导致的 Crash | 每月 10+ 次 | 0 次 |
| 后端对接态度 | “你自己看文档” | “我帮你改” |
从写代码到带人:心态比技术更重要
技术可以学,但带团队,真的靠悟性。
我带的第一个实习生,写的代码缩进全是空格混制表符,Git 提交信息是“fix”、“update”、“ok”。我差点当场心梗。但转念一想:我当年不也这样?于是没骂他,而是给他看了我三年前的 commit 记录——“修复 bug v2 final really final”。
带人不是教语法,而是传递工程思维。我常跟新人说:
“你写的不是功能,是未来三个月要维护的债。今天偷的懒,明天都会变成线上告警。”
我也开始注重“软技能”:
- 每周 1v1:不聊技术,聊职业规划、困惑、甚至周末去哪玩
- 鼓励犯错:只要不是生产事故,大胆试。我甚至设了个“最佳踩坑奖”
- 保护团队:挡掉无意义的需求变更,争取合理的排期
最让我骄傲的不是项目上线,而是上个月,那个实习生主动重构了一个核心模块,还写了详细的文档。他在周报里写:“感谢 Leader 当年没把我开除。”
开发心得:稳定大于炫技
虽然我喜欢折腾新技术——Rust 写 CLI、Zig 编译器、甚至用 WebAssembly 跑图像处理——但在工作中,我永远选择最稳的方案。
为什么?因为我是 Leader,不是个人开发者。我的目标不是炫技,而是让产品稳定交付、让团队少加班、让老板少发火。
所以我们的技术栈很“无聊”:
- Flutter:稳定版本(目前 3.19),不追 beta
- 状态管理:Provider + Riverpod,不用 BloC(学习成本高)
- 后端通信:dio + retrofit 风格封装,拒绝裸写 fetch
- 错误监控:Sentry + 自定义埋点,Crash 率控制在 0.1% 以下
有人问我:“你不觉得无聊吗?”
我说:“当你的代码支撑着百万用户下单,你就不会觉得无聊了——你会觉得责任重大。”
给想成长的你几点真心话
如果你也在从执行者向 Leader 转型,送你几句掏心窝子的话:
- 别怕暴露无知:我第一次主持技术评审时,被问到 WebSocket 断线重连策略,当场卡壳。但我坦白说“我不确定,会后查清楚”,反而赢得尊重。
- 学会说“不”:产品经理说“这个需求很简单,加个按钮就行”——你要敢说“影响范围大,排期至少两周”。
- 保持编码手感:再忙,每周至少写 100 行代码。Leader 不编码,迟早脱离一线。
- 工作生活要平衡:我现在基本不加班。早上八点开工,效率拉满,六点准时走人。身体垮了,升职也没用。
最后,别信什么“35 岁危机”。只要你持续创造价值,年龄只是数字。我现在一边准备跳槽面试(刷题刷到头秃),一边带团队攻坚新项目,日子充实得不行。
凌晨一点,那个 JavaScript 接口问题终于解决了——后端把 price 字段从 string 改成 float,却忘了 JSON 序列化会丢失精度。我加了个 toFixed(2),搞定。
关电脑前,我给后端发了条消息:“下次改字段,提前喊我,我请你喝瑞幸。”
他秒回:“成交,顺便帮我看看这个新框架?”
你看,技术人的江湖,终究是靠互相“救火”维系的。而从菜鸟到 Leader,不过是从“等别人救我”变成了“我去救人”。
共勉。

评论 0