Make the Invisible More Visible
很多不可见的部分多应作为坚持软件原则被盛赞。我们有很多专业术语来隐喻比可见性,这里说两个——机器透明度和信息隐藏。用道格拉斯·亚当斯(Douglas Adams)的话说,软件及其开发过程几乎是不可见的:
- 源码不是天然存在的,没有天然的行为,也不可能遵循物理规律。如果你通过编辑器打开它,它就可见,关了后就不可见。想象一下,就像一棵树花了很长时间才倒下,以至于你根本没听见,甚至怀疑它是否存在过。
- 一个运行着的APP有样子也有行为,但却不会展示其构建的源码。google主页很简单,但它的背后真的很复杂。
- 如果你完成了90%的工作,却在无限地调试最后10%,其实相当于你并没有做完那90%,同意吗?修复bug并没有在推进项目。调试很浪费时间,没必要花过多时间。最好是让浪费变得可见,你才能看到问题出在哪里,然后开始考虑创建它们的必要性。
- 如果你的项目已步入正轨,但一周后又发现它需要推迟六个月,那么你的问题来了——最大的问题并不是项目被推迟六个月,而是有某种神秘而强大的力量,之前就对你隐瞒了项目要被拖六个月的事实!进度可见性的缺失,等同于进度的缺失。
不可见会演变成危机。当你有一些具体的事物联想时,你会想得更清楚。当你看得见事物及其不断变化的过程时,你能更好地管理它们。
- 编写单元测试可以提供代码单元测试难易度的凭证。这有助于暴露代码层面所展示出的开发质量的优势(或缺陷),例如高内聚低耦合。
- 运行单元测试可以提供代码行为的相关凭证。这有助于暴露应用程序在运行时展现的优势(或缺陷),例如可靠性和稳定性。
- 使用公告栏或卡片可以是进度变得可见和具体。任务能够以未开始、执行中、已完成被看到,不必引入隐晦的项目管理工具,不必为了虚构一份报告去盯着程序员要。
- 增量开发增加了开发结果的曝光度,从而提高了开发进度(或滞后进度)的可见性。完成可发布的软件就能暴露事实,光靠估算是不可取的。
大量定期可见的凭证是软件开发的最好方式。可见性给予你底气确信——这个进展是真的,而非骗人的,是经得起推敲的,而非瞎编的,是可复现的,不是歪打正着的。