复盘我接过的 .NET 桌面端、微信小程序、手机 APP 外包项目,一个反直觉的结论:几乎没有项目是「代码写不出来」挂掉的,几乎全是沟通挂掉的。这篇把我的「沟通四件套」整理出来,附一个我天天在用的 20 行 C# 验收单生成器,桌面端 / 小程序 / APP 三个方向通用。
一、沟通是怎么搞挂项目的
1. 口头需求里的隐含规则。给工厂做 WinForms 报工系统,客户说「照现在的纸质台账做」。验收时才发现夜班跨天归属、废品折算这些规则全在老师傅脑子里。把这些隐含规则逐条确认落成书面验收单后,返工从一周压到两天。
2. 平台规则被当成你的 bug。预约小程序客户要「预约了就提醒用户」,上线后投诉收不到提醒——但微信订阅消息必须用户主动订阅,一次性模板授权一次只能发一条。规则没提前书面化,就会被记成交付缺陷。
3. 上架流程黑盒。Android APP 客户以为开发完就能下载,实际要软著/资质、App 备案、隐私政策、权限说明,备案审核就有数天。把时间线画出来,客户立刻变配合。
4. 第三方成本背锅。小程序认证 300/年、微信支付费率 0.6%、服务器备案、软著官费——不在报价单里写明「含什么、不含什么」,结算时全变成你的「乱收费」。
二、沟通四件套
| 组件 | 管什么 | 关键动作 |
|---|---|---|
| 需求确认单 | 做什么 | 每条带可判定验收标准 + 明确「不包含」 |
| 变更记录 | 改了什么 | 谁提的 / 何时 / 影响范围 / 是否计费 |
| 周进度同步 | 现在怎么样 | 每周截图 + 三句话,让客户看得见 |
| 期望管理 | 最后怎么算钱 | 报价单写清第三方成本与边界 |
三、20 行 C# 验收单生成器
using System.Text;
using System.Text.Json;
var path = args.Length > 0 ? args[0] : "requirements.json";
var items = JsonSerializer.Deserialize<List<Req>>(
File.ReadAllText(path),
new JsonSerializerOptions { PropertyNameCaseInsensitive = true })!;
var sb = new StringBuilder();
sb.AppendLine("# 需求确认单(验收以此为准)");
sb.AppendLine();
sb.AppendLine("| # | 模块 | 功能点 | 验收标准 | 不包含 |");
sb.AppendLine("|---|------|--------|----------|--------|");
int i = 0;
foreach (var r in items)
sb.AppendLine($"| {++i} | {r.Module} | {r.Feature} | {r.Accept} | {r.Exclude ?? "-"} |");
sb.AppendLine();
sb.AppendLine("> 双方确认后,本表作为验收与变更计费的唯一依据;表外新增按变更流程单独报价。");
File.WriteAllText("验收单.md", sb.ToString(), new UTF8Encoding(false));
Console.WriteLine($"已生成验收单,共 {i} 条。");
public record Req(string Module, string Feature, string Accept, string? Exclude);
需求清单用 JSON 描述,每条验收标准必须可判定:
[
{ "module": "报工", "feature": "员工提交当日产量",
"accept": "提交后列表实时刷新;断网本地暂存,恢复后自动补传且不重复",
"exclude": "多厂房汇总看板(二期再谈)" },
{ "module": "预约小程序", "feature": "预约成功订阅消息提醒",
"accept": "用户授权后,预约确认与开始前1小时各下发1条模板消息",
"exclude": "短信提醒(第三方短信费用另计)" }
]
dotnet run -- requirements.json 一跑,验收表直接出来,微信发给客户确认即可。90% 的验收扯皮,输在「当时没写下来」。
四、小结
沟通不是软技能,是工程能力:可模板化、可工具化、可复用。需求确认单管「做什么」,变更记录管「改了什么」,周进度管「现在怎么样」,期望管理管「最后怎么算钱」。
我常接的方向:.NET 桌面端(WPF/WinForms/串口上位机)、微信小程序(支付/订阅消息/核销)、手机 APP(MAUI/uni-app/Flutter),后端 .NET WebAPI。觉得有用的话点个关注,后续会持续写接单工程化与 .NET 实战系列;项目上的问题欢迎评论区交流或站内私信。