资深架构师最后一块拼图:不再只是「自己厉害」,而是让「团队持续变厉害」。本章讲透技术评审、技术债管理、契约与协作、知识沉淀,以及架构师必需的软技能——影响力、沟通与向上管理。学完本章,你就拥有了把前九章所有能力「放大到团队」的机制。
这是最容易被误解的一步:架构师不是写代码更多的那个人。
| 维度 | 高级工程师 | 架构师 |
|---|---|---|
| 产出 | 自己交付高质量代码 | 让别人高质量交付(杠杆) |
| 范围 | 模块 / 功能 | 系统 / 跨团队 / 长期 |
| 时间视野 | 当下迭代 | 未来 6~18 个月 |
| 决策依据 | 技术可行性 | 技术 + 组织 + 商业成本 |
| 影响力方式 | 代码说话 | 文档、评审、辅导、机制 |
| 风险视角 | 代码 bug | 架构腐化、人才瓶颈、交付风险 |
Code Review 查的是「这段代码对不对」,设计评审查的是「这条路该不该走」。
| 类型 | 触发条件 | 形式 |
|---|---|---|
| 重大架构决策 | 新框架 / 新存储 / 新架构模式 / 跨团队方案 | 正式评审会 + ADR |
| 中等设计 | 新模块设计、复杂功能方案、接口设计 | 文档 + 异步评审(评论区) |
| 日常变更 | 普通功能、修 bug、小重构 | Code Review 就够了,不评审 |
# 设计评审:商家中心权限系统重构
## 1. 背景与目标(为什么现在做)
现有权限散落在各页面 if 判断里,新增角色要改十几处;本季度要
接入集团统一 SSO,借此机会收敛权限模型。
目标:新增一个角色类型时,改动点 <= 2 个文件。
## 2. 方案概述(高层)
统一 RBAC 模型(角色→权限点),前端按「权限点」而非「角色名」判断;
权限点列表由后端接口下发,前端缓存 5 分钟。
## 3. 关键设计决策(附备选与理由)
- 前端存「权限点集合」而非「角色名」:角色是后端概念,直接判断角色
会在前端复制后端逻辑(ADR-0021)
- 权限检查用 HOC 还是 Hook?→ 用自定义 Hook,避免包装层带来的调试困难
- 失败降级:接口失败时默认「全部拒绝」+ 错误提示,避免误放行(安全优先)
## 4. 影响面与兼容性
- 涉及页面:商家中心全部 23 个页面
- 存量判断需迁移清单:附录 A(逐页列出)
- 灰度策略:按商家 ID 灰度 10% → 50% → 100%
## 5. 风险与对策
- 接口下发权限点延迟 → 首屏加 loading 态,超时走缓存
- 角色名判断散落各处遗漏 → 上线前用 grep 全仓扫描残余判断
## 6. 验证方案
- 单元测试:权限判断纯函数全分支覆盖
- E2E:低权限账号访问高权限页面,断言跳转与提示
技术债不可怕,可怕的是「欠了不记账、从不还」。
为了「短期快」而牺牲「长期质量」的决定,就是欠债。负债本身不是问题——创业期用技术债换上线速度是合理的;问题是:无意识负债(不知道欠了)、不付利息(每次改动都更慢)、从不还本(债越滚越大直到系统烂尾)。
| 债的类型 | 例子 | 利息表现 |
|---|---|---|
| 代码债 | 复制粘贴的相似逻辑 | 改一处漏三处,bug 频发 |
| 设计债 | 组件绕过分层直接 fetch | 新需求无处安放,硬塞 |
| 测试债 | 核心逻辑零测试 | 每次重构心惊胆战 |
| 文档债 | 关键模块无任何文档 | 新同学上手 3 个月 |
| 依赖债 | 依赖长期不升级,EOL 版本 | 安全漏洞、无法升级其他库 |
| 基建债 | 构建 10 分钟、测试 20 分钟 | 交付节奏被拖死 |
利息 = 每周因它多花的分钟数,本金 = 一次性修复成本。利息高本金低的先还。# docs/tech-debt.md 示例
| 编号 | 现象 | 利息(每周) | 本金(修复) | 发现 | 负责人 | 状态 |
|------|------|-----------|-----------|------|--------|------|
| TD-12 | 订单页复用 3 份相似表格逻辑 | 2 小时(改表头要改 3 处) | 4 小时 | 2026-08 | 小李 | 待还 |
| TD-15 | lodash 版本过旧(CVE-2024-xxxx) | 0(但安全风险高) | 30 分钟 | 2026-08 | 小李 | 本周还 |
规范只有变成工具和流水线,才会被执行。
| 形态 | 例子 | 强制力 | 适用 |
|---|---|---|---|
| 工具强制 | ESLint error、TypeScript strict、CI 构建门禁 | 100%(拦在合并前) | 可机器判断的规则 |
| 评审把关 | Code Review 清单、架构红线 | 80%(靠人,可能漏) | 需要判断力的规则 |
| 文档约定 | 命名规范、git 提交规范 | 40%(靠自觉) | 难以自动化的软约定 |
系统越做越大,最大的风险从「代码」变成「团队之间的接口」。
// 实践:前端 mock 与真实请求同构 —— 契约变了 mock 会先失败 // 用 MSW 或 json-server 维护一份与 OpenAPI 同步的 mock 数据 // 契约变更 → 生成脚本重新生成 types → mock 同步更新 → 前后端 MR 一起合 import { paths } from '@company/api-spec' // 由 OpenAPI 自动生成的类型 type GetUserResp = paths['/api/user']['get']['responses']['200']
文档不是写给未来的,是写给 3 个月后的自己的。
| 文档类型 | 内容 | 维护时机 |
|---|---|---|
| 项目 README | 怎么跑、怎么测、目录结构、常用命令 | 新成员入职时更新 |
| 架构文档(一张图 + 文字) | 系统分层、依赖方向、关键流程、部署架构 | 架构变化时 |
| ADR | 技术决策及理由(上一章模板) | 每次架构决策时 |
| 运行手册(Runbook) | 线上问题怎么排查:日志在哪、告警怎么处理、应急开关 | 每次线上事故后补 |
| FAQ / 常见坑 | 「开发时最常踩的坑」 | 有人来问第二次时写 |
技术方案写得再对,推动不了落地 = 零。架构师一半的功夫在「人」上。
把本手册十个阶段串成一条完整的成长地图。
| 阶段 | 能力主题 | 你掌握的标志性能力 |
|---|---|---|
| 01 HTML/CSS | 视觉与布局 | 任何界面还原无障碍,Flex/Grid/BFC 信手拈来 |
| 02 JavaScript | 语言核心 | 闭包/原型/异步/事件循环全部讲清并手写实现 |
| 03 浏览器与网络 | 运行环境 | 输入 URL 到渲染全流程、缓存/CORS/安全全掌握 |
| 04 工程化 | 工具链 | 从源码到上线全链路,能搭完整工程 |
| 05 框架核心 | 框架原理 | React 渲染/diff/Hooks 原理,能解释为什么慢 |
| 06 状态管理 | 数据流 | 状态分类学决策树,选型有依据 |
| 07 性能优化 | 性能 | 能定位并优化线上性能问题,用数据验证 |
| 08 测试质量 | 质量保障 | 测试金字塔落地,重构有护航 |
| 09 架构设计 | 系统设计 | SOLID/分层/模式/选型,决策有 ADR |
| 10 治理协作 | 团队放大 | 评审/债务/契约/辅导,团队持续变强 |
治理不是「管」,是「让团队跑得更快还不翻车」。
这一章的实战不是写代码,是「在真实环境里推动一次改进」。
答完这 12 题,你就有资格自称「架构师视角」了。
工程师和架构师的衡量标准有什么本质区别?「你的产出是团队的产出」这句话怎么理解?
答案:高级工程师的衡量标准是「自己交付高质量代码」,架构师的衡量标准是「让别人高质量交付」。「你的产出是团队的产出」意味着架构师的价值不在于自己写了多少代码,而在于建立了机制、培养了团队,使团队在没有你逐行干预的情况下也能持续做出正确的技术决策。
架构师的四种错误定位(图纸管理员/超级工程师/独裁者/老好人)你最容易犯哪一种?怎么改?
答案:四种错误定位及改法:① 图纸管理员 — 只画架构不碰代码脱离现实,对策是每周至少半天深入代码;② 超级工程师 — 所有难活自己上团队没成长,对策是把「教会别人」当成任务验收标准;③ 独裁者 — 决策不解释不听取反对意见,对策是决策写 ADR、要能被人挑战;④ 老好人 — 怕冲突任业务节奏推着走,对策是对关键红线敢说「不」并给出替代方案。
什么决策需要设计评审?判断标准「改动成本 > 评审成本」如何应用?事事评审的坏处是什么?
答案:需要评审的情况:① 重大架构决策(新框架/新存储/跨团队方案)需正式评审会+ADR;② 中等设计(新模块/复杂功能/接口设计)需文档+异步评审;③ 日常变更(普通功能/修bug)Code Review就够了。判断标准:当「该决策的改动成本远大于评审成本」时评审,否则不评审。事事评审的坏处是形成官僚流程,团队会绕过评审机制,反而让真正重要的决策得不到充分审查。
设计评审文档应包含哪些章节?评审会的四条纪律是什么?
答案:文档章节:① 背景与目标;② 方案概述;③ 关键设计决策(附备选与理由);④ 影响面与兼容性;⑤ 风险与对策;⑥ 验证方案。评审会纪律:① 文档提前24小时发出,会议不读文档;② 评审只讨论文档里的决策点,不现场发散新问题(记TODO跟进);③ 决策要有明确输出:通过/有条件通过/打回重做;④ 结论写回文档并归档。
技术债的「利息」和「本金」怎么算?为什么说「先这样吧」是最贵的四个字?
答案:利息 = 每周因它多花的分钟数(是持续成本),本金 = 一次性修复成本(是偿还成本)。「先这样吧」的贵在于:① 它让债无意识地产生,连利息都不被感知;② 「先这样」永远没有「以后再还」,债只会越滚越大;③ 利息是复利 — 代码越烂越难改、越难改越烂,恶性循环直到系统不可维护。
规范的三种形态(工具/评审/文档)的强制力排序?「能自动化一律自动化」怎么落地?
答案:强制力排序:工具强制(100%,拦在合并前)> 评审把关(80%,靠人可能漏)> 文档约定(40%,靠自觉)。落地方式:① 发现「评审时反复提醒」的规则,优先考虑用工具实现;② 例1:总有人漏加测试 → 加 CI 覆盖率门禁;例2:总有人不写类型 → TypeScript 严格模式设 error;③ 把人的精力留给机器判断不了的事(如架构权衡、可读性判断)。
前后端契约管理的三个关键动作是什么?为什么「契约变更悄悄发生」是线上事故之源?
答案:三个关键动作:① 契约先行(先定义OpenAPI,前后端并行、mock先行);② 契约变更要走流程(MR+通知),不能悄悄改;③ 破坏性变更版本化(/v2)或兼容过渡(先加新字段,旧字段过渡期后删)。悄悄变更的危害:前端代码按旧契约运行 → 字段缺失或类型变化 → 运行时错误 → 线上事故。前后端部署异步,后端改了但前端还没适配的请求会集中爆发。
公共包治理的核心问题是什么?「隐式耦合」是怎么发生的、如何避免?
答案:核心问题是「边界不清」— 公共包的职责范围该多大、谁能改、改动怎么通知。隐式耦合发生方式:A团队给公共包加了「业务特有」的字段/方法 → B团队不知道依赖了这些逻辑 → 升级后被迫跟着变。避免方法:① 公共包只放通用能力,业务逻辑留在各自feature;② 公共包API变更必须多消费方评审;③ semver严格区分 minor/patch/major;④ 改前用依赖图工具计算影响面并逐个验证。
防文档腐烂的三招是什么?为什么「过期文档比没有文档更危险」?
答案:三招:① 文档放仓库docs目录,随代码评审一起变更;② 首页标注「最后更新时间」,超半年未维护标记「可能过期」;③ 最佳写作时机是刚踩完坑或刚回答完人的问题时(趁热5分钟,攒着永远不写)。过期文档更危险的原因:没有文档 → 新人会问人 → 得到正确答案;有过期文档 → 新人会按文档走 → 踩坑后才不信任文档 → 比没有文档时花更多时间修复误解。
说服别人的四步法是什么?为什么「先试点拿数据」比「论证」有效十倍?
答案:四步法:① 量化现状(如联调平均3天);② 讲业务收益翻译成业务语言;③ 先小后大选试点拿数据;④ 尊重既有投入,先肯定再指出新规模下的新风险。试点赢过论证的原因:论证是在「赌未来」,别人会抵抗(可能面子问题/舒适区/不理解);试点是在「证当下」,用真实数据说话,低风险、高说服力,同时试点本身也是在积累信心和内部支持者。
向上管理的四个要点是什么?「管理期望」为什么重要?
答案:四要点:① 和leader明确权责边界;② 主动汇报节奏(选型/试点/上线等关键节点);③ 风险提前暴露(尽早说做不到/替代方案);④ 管理期望设里程碑和让投入可量化。管理期望的重要性:架构改进是长期工程,业务方期望短期可见;若不主动管理,leader会因看不到成果而怀疑投入合理性,甚至砍掉项目。设定可度量的里程碑(如部署时长从40分钟降到8分钟),让投入「被看见」。
回顾全手册十个阶段:你现在处于哪个阶段?未来 3 个月的计划是什么?(这一题没有标准答案,但必须写下来)
答案:十个阶段回顾 — ①HTML/CSS视觉布局;②JavaScript语言核心;③浏览器与网络运行环境;④工程化工具链;⑤React框架原理;⑥状态管理数据流;⑦性能优化;⑧测试质量保障;⑨架构设计模式;⑩(本章)团队协作与架构治理。标准回答方向是:自我评估在哪个阶段最特别扎实、哪个阶段明显不足、计划如何利用3个月把短板补齐或把长处发挥到极致。