> For the complete documentation index, see [llms.txt](https://weekly-essay.mikey.wang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://weekly-essay.mikey.wang/zh/2021-nian/w22-yuan-xing-yu-ye-guang-dan.md).

# W22-原型与曳光弹

在《程序员修炼之道》里看到一对关于项目落地的概念，原型与曳光弹，对于正在做的重新架构有一些指导意义。

原型就像是投入生产线之前做的一个模具，就是一个小demo，生成的是一次性代码。当使用原型时，目标是探索最终系统的特定方面。属于可行性评估，方案验证的过程，最终会将验证时构造的整个原型丢掉，留下经验教训，用来指引正式的项目开发。比如怎样的构建部署方案可以支撑这次重新架构，如何通过依赖管理来更好的提升基建代码的复用率。

重新架构必定是一个持续几个月的大动作，在变化的环境中，会产生很多不可预知的相互作用力。比如会对团队内的工作流产生一定程度的变更，对业务上某些流量入口产生一些影响。曳光弹式的开发是一个可靠的应对之策。

什么是曳光弹？

> 曳光弹和普通弹药间隔着一起被压入弹夹。当曳光弹发射时，上面的磷就会被点燃，在枪和击中物之间留下一道烟火轨迹。如果曳光弹击中了目标，那么之后的常规子弹也会击中。士兵们使用这些曳光弹来调整他们的瞄准：这是一种务实的方法，可以在真实条件下提供实时反馈。

我理解曳光弹式和绞杀式、精益式的理念类似。曳光弹与普通子弹最大的不同就是实时反馈，曳光弹式开发就是在实施一些以前从未做过的东西的时候，不断的重复瞄准、发射、反馈、调整这个闭环，通过多个周期一点点向真实的目标移动。实际上，曳光弹和普通子弹应该是穿插着发射的，曳光弹用来确定轨迹，形成一个框架，做好留白，让协作者清楚如何通过普通子弹来填补留白。

面对陌生且极富变化的环境，将原型+曳光弹作为推进项目落地的组合拳是一个不错的选择。可以将原型制作看作是在发射一颗曳光弹之前进行的侦察和情报收集工作。通过曳光弹代码构建最终系统框架的组成部分，它虽然简单但是完整。最后用一个个普通子弹提供纵深，进而击穿目标。

<br>
