winterggg / blog

0 stars 0 forks source link

如何做方案设计 - the missing readme #5

Open winterggg opened 5 months ago

winterggg commented 5 months ago

如何做方案设计

本文取材自《The missing readme》-- Chapter 10

软件设计不是一个线性的过程,更像是在独立工作和相互合作之间交替进行的螺旋式上升的过程,在每一步都要明确和完善设计。随着每一次迭代,设计文档变得更加清晰和详细,你对对解决方案的信心也在增加。

1 关于设计的思考

1/ 定义问题

首要任务是定义和理解你要解决的问题:

将你从各个地方收集到的答案整理成清晰的问题陈述。

2/ 着手调查

  1. 考虑相关的研究,看看别人是如何解决类似问题的,素材包括(技术博客、行业大会、学术论文...)
  2. 替代的解决方案
  3. 权衡个方案的利弊

3/ 进行实验

编写 demo 和运行测试验证想法。实验能增加对方案的信心、暴露出设计上的权衡,并澄清问题空间。你也会感受到你的代码将被如何使用。在你的团队中传阅你的原型以获得反馈。

4/ 给些时间

给自己安排大段的不被干扰的时间进行设计。

设计是一种每天24小时都在进行的工作,所以要有耐心。你的大脑总在酝酿着各种想法,创意想法会在一天内随机出现(甚至在你睡觉的时候)。

即慢思考,不要总是在头脑风暴 :)

2 编写设计文档

1/ 设计文档的目的 设计文档是一种工具,可以帮助你思考、获得反馈、让你的团队了解情况、培养新的工程师,并推动项目规划。

写作拥有一种暴露你不知道的东西的能力。迫使你自己写下你的设计,迫使你去探索问题空间,并使你的想法具体化。你将不得不面对其他的方法和理解上的差异。这是一个动荡的过程,但是经历了这个过程,你会对你的设计和它的权衡有更好的理解。通过写下你的设计,你会得到清晰的思路,也会使设计讨论更有成效。

感觉就相当于是费曼学习法的一种实践形式。人脑是很弱鸡的,对于一次性完全掌握并做出复杂设计这样的任务可能存在局限性,尤其是当我们仅停留在脑海中思考而不将其外化为具象形式时,往往难以发现思维中的盲点和漏洞。

而以文字向他人讲述你的设计,可能会遇到一些难以表达清楚的地方,这正是我们尚未充分理解的部分(在口头表达中感觉这部分很容易通过技巧和气势锁略过)。通过反复推敲、修正和完善,我们能逐步填补认知空白,加强对复杂设计的全面理解和掌控力。

另外如果表达能力弱的话,用设计文档来征求反馈可能更加高效(

2/ 保证文档是最新的

文档其实可以分为两部分:

提案中废弃的方案注意标注出来,但注意最好不要删除历史提案,因为如果未来的开发者(或者自己)无法看到那些导致设计决策的讨论,可能会重蹈覆辙。

可以对设计文稿进行版本控制。

感觉可以用 Markdown + Git 作为方案设计的 single source of truth :>

3. 协作设计

1/ 不要让人惊讶

及时向reviewer汇报设计的进展。

2/ 进行头脑风暴

将头脑风暴分成多个会议,由不同的参与者参加,集中讨论设计的不同方面。

头脑风暴会议的规模从2人到5人不等。当一个问题特别多元或有争议时,要选择更大、更有包容性的头脑风暴会议。对于更直接的讨论,应保持较少的被邀请者人数,使谈话更容易进行

安排一个记录员。