软件王国建造记
上一座地牢,小哲学完了编程语言的十二层概念;这一程,周师傅带他走进一家软件公司,从一个「想法」出发,走完需求、设计、架构、开发、测试、上线、监控、运营的完整旅程——每到一个站点,认识一批岗位角色,学一嘴他们的专业术语。
一个想法的诞生
一切都从一个「问题」开始师傅!我有个大胆的想法——我要做一款「轻记账」App!现在记账软件都太复杂了,我就想要一个「按一下就记一笔」的。
好想法!那我先考考你:这个软件,从「你脑子里的想法」到「用户手机里的 App」,中间要经过哪些人、哪些流程?
呃……不就是写代码吗?写完上线不就完了?
哈哈,这是新手最常见的误解。一款软件从 0 到 1,是一条长长的接力赛:有人想清楚做什么,有人画清楚长什么样,有人定清楚怎么搭,有人把它写出来,有人负责挑毛病,有人负责送上线,有人盯着它别死机,有人研究用户为啥不用,还有人让它越活越好。
这一路上每个岗位都有黑话——专业术语。不懂黑话,开会就像听天书;懂了黑话,你才知道谁在干什么、该找谁、卡在哪了。
咱俩就从「轻记账」这个想法出发,一站一站走完整个旅程。这就是我们的路线图——
记住一句话:软件不是「写」出来的,是「一群人用术语对齐认知,接力传递」出来的。走,第一站——需求分析。
需求分析:产品经理的战场
BRD · MRD · PRD · MVP · 需求评审小哲冲进会议室就要开写代码,被产品经理一把拦住:「先告诉我——做给谁用?解决什么问题?凭什么用户会用?」
我(拍桌子):直接开干吧!先写个登录注册,再写记账页面!
这时候一个神秘人推门进来了——她是公司的产品经理(PM)。她问了你三个问题,你一个都答不上来:目标用户是谁?核心场景是什么?跟市面上的记账软件比,凭什么选你?
记住:需求分析的终点不是「代码」,是一份文档——告诉所有人「我们到底要做什么」。
需求侧术语
- BRD(商业需求文档):给老板看的——「这产品能赚多少钱、市场多大」。
- MRD(市场需求文档):给市场看的——「目标用户画像、竞品对比、差异化」。
- PRD(产品需求文档):给设计和开发看的——「功能明细、交互逻辑、边界条件」。三份文档层层翻译,把「想法」变成「可执行」。
- MVP(最小可行产品):先做最核心的一个功能上线验证,别一上来就全功能。
- 用户故事:一句式需求——「作为__,我想要__,以便__」。
- 需求池 / 优先级 P0-P2:所有需求排队,P0 必做、P1 重要、P2 看情况。
- 需求评审:PM 把 PRD 讲给设计、开发、测试听,大家现场挑毛病。
【用户故事】
作为「懒得记账的上班族」,我想要「3 秒记一笔账」,
以便「月末不用翻账单回忆钱花哪了」。
【MVP 范围】v1.0 只做三件事
1. 记录一笔收支(金额 + 分类 + 备注)
2. 看本月汇总(总收入 / 总支出 / 结余)
3. 数据本地保存,不做云同步(v2.0 再做)
【明确不做】登录注册、多人协作、报表图表、AI 分析……
【优先级】P0:记一笔、看汇总 | P1:编辑/删除 | P2:多账本
懂了!原来「写代码」之前还有这么多事。那需求定稿了,可以开始写代码了吧?
还早!下一站,有人要把这些需求画成图——设计同学登场了。
本站收获:需求分析解决「做什么、给谁做、为什么」。产出是 PRD,核心心态是 MVP——先验证,再做大。
产品设计:把想法画出来
线框图 · 高保真原型 · UI 稿 · 设计规范「记一笔」按钮放哪里?点完弹键盘还是弹页面?这些细节不画清楚,程序员就要靠猜——猜出来的界面,谁用谁知道。
来认识两位设计师。先是交互设计师(UX)——她不管颜色好不好看,只管「用户点哪、下一步去哪、会不会迷路」。她先画线框图:像草稿纸上的火柴人。
┌────────────────────────┐
│ 轻记账 +记账 │ ← 右上角大大的「+」
├────────────────────────┤
│ 本月结余 ¥1,284.50 │
│ 收入 ¥3,200 支出 ¥1,915 │
├────────────────────────┤
│ 🍜 早餐 -12.00 今天 │
│ 🚇 地铁 -4.00 今天 │
│ ☕ 咖啡 -28.00 昨天 │
│ …… │
├────────────────────────┤
│ 首页 明细 我的 │ ← 底部 Tab 导航
这线框图看着就很清楚!那 UI 设计师做什么?
她把火柴人化妆成正式海报——高保真 UI 稿:用什么绿、圆角多大、阴影多重,全定死。然后沉淀成设计规范(Design System):以后所有页面都照这个规矩来,团队才不会各画各的。
最后,开发之前还有一道关——设计走查 + 可用性测试:找个真人试用原型,发现「用户根本找不到加号」,赶紧改,比上线后再改便宜一百倍。
设计侧术语
- 线框图 / Wireframe:低保真草图,只管结构和位置。
- 高保真原型:带真实视觉和点击交互的 Demo(Figma / Axure 产出)。
- UI 稿 / 标注:给开发的「施工图」:尺寸、颜色、字体、间距。
- 设计规范 / Design System:统一的组件和样式库,避免「五彩斑斓的黑」。
- 走查:上线前设计师逐像素检查实现是否还原稿子。
- 可用性测试:让真实用户操作,看卡不卡壳——早发现,早修改。
本站收获:设计解决「长什么样、怎么点」。产出一张张图,让开发不用猜——猜,是 Bug 的温床。
技术架构:给软件打地基
技术选型 · 架构图 · 数据库设计 · API 设计图纸齐了。但盖楼不能直接砌墙——先打地基:用什么语言?数据库怎么设计?前端后端怎么通信?架构师上场。
架构师干三件事:技术选型(用 Java 还是 Go?MySQL 还是 PostgreSQL?)、系统设计(单体还是微服务?模块怎么划?)、接口定义(前端和后端怎么对话)。
POST /api/v1/records # 记一笔账
{
"type": "expense", // income | expense
"amount": 28,
"category": "餐饮",
"note": "和同事午饭"
}
→ 200 {
"id": "rec_20260909_001",
"message": "记好啦!"
}
GET /api/v1/records/summary?month=2026-09 # 本月汇总
→ 200 {
"income": 3200.00,
"expense": 1915.50,
"balance": 1284.50
}
CREATE TABLE records (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL, -- 谁记的账
type ENUM('income','expense') NOT NULL,
amount DECIMAL(10,2) NOT NULL, -- 金额用 DECIMAL,别用 FLOAT!
category VARCHAR(32) NOT NULL, -- 分类
note VARCHAR(200) DEFAULT '',
created_at DATETIME NOT NULL DEFAULT NOW(),
INDEX idx_user_month (user_id, created_at) -- 按用户+时间查得飞快
);
架构侧术语
- 技术选型:语言、框架、数据库、缓存的取舍——没有最好,只有最合适。
- 单体 / 微服务:单体 = 一个应用装所有功能(小项目够用);微服务 = 拆成很多小服务各自部署(大团队大流量才需要)。
- 数据库设计 / ER 图:把「现实世界」翻译成表和关系。
- API / 接口设计:前后端约定的对话协议(RESTful、接口文档 Swagger)。
- 技术评审:方案先过会,架构师和 TL 挑毛病——上线前发现问题最便宜。
- 缓存 / 消息队列:Redis 缓存热数据、MQ 削峰解耦——高并发时代的常规武器。
- 容量规划:预估用户量,决定买多少服务器。
地基打好了!这次真的可以写代码了吧??
可以了!下一站,你熟悉的战场——开发。不过这次你不再是单打独斗,而是一整个团队。
本站收获:架构解决「怎么搭」。地基决定楼能盖多高——选型、建表、定接口,每一步都要过评审。
开发攻坚:写代码的日子
敏捷 Scrum · Code Review · 联调 · 技术债小哲终于开始写代码了!但这次他发现在公司里「写代码」只占一半时间——另一半时间在开会、评审、联调、改 Bug。
师傅!我发现开发不是「闷头写代码」啊!每天早上 10 点要开站会,两周一个 Sprint,写完了还要别人 Code Review 我的代码……
这就对了。现代软件开发大多是敏捷(Agile):把大项目切成小段(Sprint,一般两周),每段交付一点能用的东西;每日站会三句话:昨天干了啥、今天干啥、有啥挡路的。
团队用看板(Kanban)管理任务:待办 → 开发中 → 测试中 → 已完成,一张白板看清全局。
你写的代码不能自己说了算——要过 Code Review(代码评审):同事帮你挑毛病。被挑毛病别难受,那是免费的防错保险。
$ git checkout -b feature/record-expense # 从主分支拉出功能分支
$ git add . && git commit -m "feat: 记一笔支出"
$ git push origin feature/record-expense
$ git checkout main
$ git merge feature/record-expense # 评审通过后合入主分支
# 规范的分支策略
# main = 生产环境,永远可发布
# develop = 开发主干
# feature/* = 功能分支
# hotfix/* = 线上紧急修复
开发侧术语
- 敏捷 / Scrum:Sprint 迭代、每日站会、看板、需求拆分、任务估时(故事点)。
- Code Review:代码评审——提交合入前,同事把关。
- 联调:前端和后端把接口接起来跑通——「我调你的接口,你调我的服务」。
- 单元测试:开发自己写的「函数级」自检。
- 技术债:为了赶进度埋下的坑——先上线再说,之后要还的,会连本带利。
- 重构:不改变功能,只改内部结构——还技术债的方式。
- 冒烟测试 / 提测:开发宣布「写完了,可以测了」,测试先快速验一遍主流程。
我提测了!感觉我写得挺好的,稳了!
「稳了」这两个字,是测试同学最爱的开场白——下一站,让她给你上一课。
本站收获:开发解决「把它写出来」。但交付的不只是代码,还有沟通:站会、评审、联调——写代码只占一半时间。
质量测试:找茬的艺术
测试用例 · 回归测试 · 自动化 · UAT · Bug 等级小哲说「稳了」的第二天,测试同学甩过来 47 个 Bug。其中有一个是:金额输入 0.1,显示出来变成了 0.099999999……
用例ID 场景 步骤 预期结果 实际结果
TC-01 记一笔正常支出 金额28→选餐饮→保存 列表出现-28.00 ✅ 通过
TC-02 金额为0 输入0→保存 提示"金额须大于0" ✅ 通过
TC-03 金额超长 输入99999999999999 提示"金额超出范围" ❌ 失败
TC-04 小数精度 输入0.1→保存 显示0.10 ❌ 失败(显示0.0999…)
TC-05 连续快速点保存 1秒内点5次 只新增1条 ❌ 失败(新增5条!)
【Bug 等级】
P0 阻断:不能登录,必须马上修
P1 严重:记错账了,数据不对
P2 一般:界面错位、提示不友好
P3 轻微:文案错别字,攒着修
测试侧术语
- 测试用例:一个场景一份「剧本」:步骤 + 预期 + 实际。
- 功能 / 回归 / 集成 / E2E:单功能测、改完再全量测、模块间联动测、用户完整路径端到端测。
- 自动化测试:脚本替人点按钮、跑接口,回归不靠人肉。
- Bug / 缺陷 / 提缺陷:记录问题:复现步骤、预期、实际、等级、截图。
- UAT 验收:上线前最后一道门,业务方点头才算数。
- 性能测试 / 压测:模拟 1 万人同时用,看系统扛不扛得住。
- 兼容性测试:安卓苹果、各种机型分辨率、老系统都得测。
记住测试界的铁律:测试不是要证明「程序没 Bug」,而是要证明「程序还有 Bug」。测不出来 ≠ 没有。而且 Bug 越早发现越便宜——需求阶段发现便宜 100 倍,上线后发现贵 100 倍。
47 个 Bug 我修了 46 个……那个金额精度问题,我换成 DECIMAL 类型终于对了!QA 放行了,快上线吧!!
别急,上线不是「点个按钮」就完事——有一群「发布工程师」会告诉你,什么叫惊魂夜。
本站收获:测试解决「别带病上线」。用例是剧本、回归是底线、自动化是效率、UAT 是通关文牒。
上线发布:DevOps 惊魂夜
CI/CD · Docker · K8s · 灰度发布 · 回滚周五晚上 10 点,发布窗口。小哲手心冒汗——按钮一按,代码就要面对全世界的用户了。
以前上线是「人肉操作」:开发打包 → 运维手动传服务器 → 手动重启,一紧张就传错文件。现在全靠 CI/CD 流水线(Pipeline):代码一提交,持续集成(CI)自动编译+跑测试,持续交付(CD)自动打包部署。
部署用什么装?Docker 容器——把应用连同环境打包成一个「集装箱」,在哪都能跑;Kubernetes(K8s)是港口的吊机调度员,管理几百个集装箱:扩缩容、故障自愈。
# .gitlab-ci.yml / GitHub Actions 一类的流水线配置
stages: [build, test, deploy]
build:
stage: build
script:
- docker build -t ledger-app:$CI_COMMIT_SHA . # 打包成镜像
test:
stage: test
script:
- pytest tests/ -v # 自动跑全部测试
deploy:
stage: deploy
script:
- kubectl set image deploy/ledger ledger-app=ledger-app:$CI_COMMIT_SHA
# K8s 滚动更新:老版本一批批替换成新版本,用户无感知
发布侧术语
- CI / CD:持续集成(自动编译+测试)/ 持续交付或部署(自动发布)。
- 环境:dev(开发)→ test(测试)→ staging(预发,跟生产几乎一样)→ prod(生产)。
- 灰度发布 / 金丝雀:先放 1% 用户试,没问题再 10%、50%、100%。
- 蓝绿部署:两套环境,切流量切过去,秒级切换秒级回退。
- 回滚:出问题一键退回上一个版本——发布工程师的保命技。
- 发布窗口:约定好的上线时间段(通常深夜),出事有人盯着。
灰度发布真的发出去了!!先放 1% 用户,10 分钟后数据一切正常,全量放行!我们上线啦!!!
恭喜!不过……你以为上线是终点?错了。上线的那一秒,才是真正的开始。下一站,值班室的电话已经响了。
本站收获:发布解决「安全送上线」。CI/CD 全自动、Docker/K8s 标准化、灰度分批放、随时能回滚——上线也可以不惊魂。
监控运维:上线只是开始
SRE · 告警 · SLA · 值班 · 事故复盘凌晨 3 点,小哲的手机疯狂震动:告警群刷屏「接口超时率飙升」「内存告警」。他终于明白什么叫「上线才是开始」。
【P1 告警】ledger-prod
指标: 接口 /api/v1/records 5xx 错误率 12.4% (阈值 1%)
时间: 2026-09-09 03:17
影响: 用户记账失败,预计影响 800 用户
值班: @小哲(新人,第一次被叫醒) @老周
【排查三板斧】
1. 看监控大盘:内存、CPU、数据库连接数
2. 看日志:搜 error / exception / 慢查询
3. 判断:代码问题 → 回滚;容量问题 → 扩容;数据问题 → 找 DBA
运维侧术语
- 监控 + 告警:大盘盯指标(CPU、内存、错误率、延迟),超阈值就告警。
- 日志:系统的「黑匣子」,排查问题的第一现场。
- SLA(服务等级协议):对用户承诺的可用性,比如「99.9% 可用」= 一年最多挂 8.76 小时。
- MTTR / MTBF:平均修复时间 / 平均无故障时间——救火救得快不快。
- 限流 / 熔断 / 降级:扛不住时「限流」挡住、下游挂了「熔断」别拖垮自己、「降级」关掉次要功能保主要功能——高并发保命三件套。
- 值班 On-call / 工单:轮班响应告警;用户/客服提的问题进工单系统。
- 事故复盘 Postmortem:出完事必须复盘:根因是什么?怎么防复发?不追责,只改进。
- P0 / P1 故障:P0 全网挂,P1 部分功能挂——等级决定响应速度。
查出来了……是我昨天上线时忘给新加的一个查询加索引,数据库被慢查询拖垮了。我加了索引,回滚后恢复。然后 SRE 姐姐让我写事故复盘……
写!而且要写得好——复盘不是写检讨,是把「这次踩的坑」变成「全公司的避坑指南」。一次事故,换来一次系统升级,这才是 SRE 的哲学。
天亮了,系统稳了。但接下来还有更「玄学」的一群人——他们要研究:用户为什么来了又走?
本站收获:运维解决「别死、死得快、死了能救」。监控是眼睛、日志是黑匣子、SLA 是承诺、复盘是进化。
数据与运营:让用户留下来
埋点 · 漏斗 · 留存 · DAU/MAU · A/B 测试 · 增长上线一周,下载量还行,但小哲发现:第二天还打开 App 的人,只剩 20%。用户来了就走——数据分析师和运营的战场到了。
-- 埋点:App 里每个关键动作上报一条日志
-- 事件:app_open(打开)、record_click(记一笔)、record_save(保存成功)
-- 漏斗:1000 人打开 → 450 人点记一笔 → 只有 120 人保存成功?
SELECT
COUNT(DISTINCT CASE WHEN ev='app_open' THEN uid END) AS 打开,
COUNT(DISTINCT CASE WHEN ev='record_click' THEN uid END) AS 点了记一笔,
COUNT(DISTINCT CASE WHEN ev='record_save' THEN uid END) AS 保存成功
FROM events WHERE dt = '2026-09-09';
-- 结果:1000 → 450 → 120:450 人点了记一笔却只有 120 人保存成功
-- 结论:保存环节有问题!一查——分类选择页面太复杂,用户被劝退了
数据/运营侧术语
- 埋点:在代码里埋上报点,记录用户行为——数据的源头。
- DAU / MAU:日活 / 月活——每天/每月有多少人在用。
- 留存率:第 2 天 / 第 7 天 / 第 30 天还回来多少人——产品的「复购率」。
- 漏斗分析:从「打开」到「付费」每一步流失多少,找到卡点。
- 转化率 / ARPU:浏览→注册→付费的转化;每用户平均收入。
- 用户画像:目标用户是谁——年龄、职业、场景、痛点的抽象画像。
- A/B 测试:一半用户看 A 版本、一半看 B 版本,用数据说话哪个好。
- 拉新 / 促活 / 留存:运营三板斧——把人拉来、让人回来、让人留下。
- KPI / 数据看板:团队共同盯的几个核心指标,做成实时大屏。
实验:记账按钮文案
A 组:「记一笔」 点击率 3.2%
B 组:「+ 记一下」 点击率 5.8% ← 胜出!
决定:全量切到 B,预计月记账笔数 +15%
实验纪律:
一次只改一个变量 | 样本量要够 | 跑够时间再下结论 | 别拍脑袋
天呐,原来「用户为什么不用」不是靠猜,是靠数据!简化分类选择后,保存率从 27% 涨到了 68%!留存也从 20% 升到 35% 了!
做得漂亮。数据不是冷冰冰的数字,是用户用脚投票的「民意」。不过——软件的生命才刚刚开始,最后一站,我们聊聊怎么让它一直活着。
本站收获:运营解决「让用户来、让用户留」。埋点是眼睛、漏斗是地图、留存是体检报告、A/B 是科学实验——一切用数据说话。
长期迭代:软件的生命力
Roadmap · 版本迭代 · 用户反馈 · NPS · OKR三个月后,轻记账从 v1.0 走到了 v3.2。小哲终于明白:软件不是「做完的」,是「养大的」——它像个孩子,要持续喂养。
软件上线那天,只是它的「出生」。之后它要经历无数次迭代:用户反馈 → 需求池 → 版本规划 → 开发 → 测试 → 发布 → 看数据 → 再反馈……一圈一圈,永不停歇。
这个循环由三样东西驱动:用户反馈(工单、评分、社群吐槽)、数据(哪没人用、哪卡住了)、商业目标(老板要赚钱)。
轻记账 Roadmap —— 2026 Q4
├─ v3.3(10月) 稳定性:修复 12 个遗留 Bug · 启动速度优化
├─ v4.0(11月) 云同步:多设备同步(用户呼声最高的需求!)
│ └ 需要新增:账号体系、后端存储、数据迁移
├─ v4.2(12月) AI 助手:拍照记账(接大模型 OCR)
└─ 长期 多账本 · 家庭共享 · 预算管理 · 导出报表
【版本迭代纪律】
每版只做 1-2 个大需求 + 一批小优化
线上问题永远优先于新功能
发版后看数据验证,不行就回滚/调整
迭代/管理侧术语
- Roadmap(路线图):产品未来 1-2 季度的方向规划。
- 版本迭代:v1.0 → v2.0 的每一次「进化」:修 Bug + 加功能 + 做优化。
- 用户反馈闭环:听 → 记 → 排期 → 实现 → 告诉用户「你的建议上线了」。
- NPS(净推荐值):「你愿意把产品推荐给朋友吗」0-10 打分,减出忠诚度指标。
- OKR(目标与关键结果):团队季度目标——目标要敢想,结果要可量化。
- 灰度观察期:新版本发布后盯 1-2 周数据,稳了才算真正发布完。
师傅,这一圈走下来,我突然觉得……「做软件」和「养软件」完全是两件事。以前我以为写完上线就结束了,现在才知道那是刚开始。
恭喜你,出师了。你终于明白了软件行业最重要的一句话——软件没有「做完」的那一天,只有「暂时够好」的那一天。
从想法到落地到运营,每一站都有它的角色、它的黑话、它的价值。把它们连起来看——你会发现,做软件其实是一群人用术语对齐认知,共同养大一个会呼吸的产品。
本站收获:迭代解决「让软件一直活着」。Roadmap 指方向、反馈是营养、数据是体检、NPS 是口碑——上线不是终点,是起点。
阶段 · 角色 · 术语 对照总表
开会听不懂黑话时,翻这一页九站旅程走完,把「阶段 → 谁负责 → 说什么黑话 → 交付什么」压缩成一张总表。遇到陌生术语,按阶段对号入座。
| 阶段 | 核心角色 | 高频术语 | 核心交付物 |
|---|---|---|---|
| 需求分析 | 产品经理 / 产品助理 / 业务方 | BRD、MRD、PRD、MVP、用户故事、需求池、优先级 P0-P2、需求评审 | PRD 文档 |
| 产品设计 | 交互设计师 UX / 视觉设计师 UI | 线框图、高保真原型、UI 稿、设计规范、走查、可用性测试 | 原型 + UI 稿 |
| 技术架构 | 架构师 / 技术负责人 TL / DBA | 技术选型、单体/微服务、ER 图、API 设计、技术评审、缓存、容量规划 | 架构图 + 接口文档 |
| 开发攻坚 | 前端 / 后端 / 全栈 / Scrum Master | 敏捷、Sprint、站会、看板、Code Review、联调、单元测试、技术债、重构 | 可运行的代码 |
| 质量测试 | 测试工程师 QA / 测试开发 SDET | 测试用例、回归测试、自动化、E2E、Bug 等级、提测、冒烟、UAT、压测 | 测试报告 + 放行 |
| 上线发布 | DevOps / 运维 / 发布经理 | CI/CD、Pipeline、Docker、K8s、灰度、蓝绿、回滚、发布窗口 | 生产环境新版本 |
| 监控运维 | SRE / 值班 / DBA | 监控、告警、日志、SLA、MTTR、限流、熔断、降级、故障等级、复盘 | 可用性与事故报告 |
| 数据运营 | 数据分析师 / 产品运营 / 增长 | 埋点、DAU/MAU、留存、漏斗、转化率、ARPU、用户画像、A/B 测试、拉新促活留存 | 数据看板 + 增长方案 |
| 长期迭代 | 产品委员会 / 客服 / 全员 | Roadmap、版本迭代、用户反馈闭环、NPS、OKR、灰度观察期 | 新版本 + 持续增长 |
是「一群人用术语对齐认知,接力养大」的。
懂术语,你才听得懂这场接力赛;
懂角色,你才知道该把接力棒交给谁。