研发前花费大量精力做详细设计值得吗?

107 天前
 VeryZero
最近一直在思考这个问题,希望跟大家讨论一下。

起因是公司有个惯例,研发前需要做详细设计并且评审。设计包含 REST 接口和参数、模型和字段、行为模型调用层次、时序图、数据库表结构设计,大概就是类似 UML 那一套。部分设计还需要包含各种条件分支、异常处理的逻辑。达成目标就其他人拿到这个设计文档后不需要太多沟通就可以完成开发。

每次做新需求,这个阶段是最痛苦的,我个人非常抵触。我倒不是抵触研发前设计这个步骤,我是抵触性价比不高的过度设计。

我们做设计的目的是为了对齐前后端、各服务之间的想法,防止出现方向性错误。所以我认为 REST 接口和表结构是必须要提前设计的,一方面是因为有了 REST 接口前端才可以提前介入开发,有了表结构大概能知道设计者对需求理解有没有大的偏差,两个结合起来大概就能知道这个需求如何实现了,另一方面,因为这两块重构代价太高了。如果是简单需求变更,这两样个人认为足够了。针对复杂场景可以适当增加时序图,这样评审的时候可以集思广益,帮忙查漏补缺。我最抵触的是类图,这也是工作量最大的一块,我们的要求是如果 DTO 这种,要列出所有字段和类型,如果是 serivce 这种要列出方法级的调用链,比如最上层是 controller ,然后往下调用 service ,再往下 repository ,再往下 mapper 这种。其实就是把项目里的类名复制到画板里,用箭头连起来。这些花了大力气的类图评审的时候大概率就是讨论下字段命名是否规范、类型的定义是否正确、层间调用是否合理等代码层面有没有遵守规范,这种层面的设计和讨论,认为完全没有必要,特别是工期特别紧的时候。因为评审与否对代码质量影响不是决定性的,即使过了评审最终交付的代码也会跟设计有差异,不如把设计和评审的时间用于代码 review ,而且这部分代码都是内部逻辑,随时可以重构,代价也不高。

另外一方面,我们是自研产品,代码架构已经成型,新需求就是给产品添砖加瓦,而且做设计和写代码的大概率是同一个人。然后就会出现一些有意思的情况,有人会先写代码后做设计、也有人画图画了 2 天,代码半天写完了。设计变成了应付交差,为了设计而设计。

不知道你们是如何看待设计这件事的,欢迎参与讨论。

希望大家讨论时聚焦具体领域和场景,本次特指:后端开发,自研产品。其他领域的侧重点和情况可能不一样,观点不具有普适性。
7755 次点击
所在节点    程序员
59 条回复
cybort
107 天前
先写代码再写设计也有意义,方便后续复盘和检查。
shizhibuyu2023
107 天前
「把项目里的类名复制到画板里,用箭头连起来」。觉得「类图」工作量大就搞点提效的事呗,尝试写点脚本来搞呗,或者搞个工具画完类图直接导出代码(我估计有现成的)
从前端的角度来看非常值得,后端时间拉长,那前端延期的可能性就减小,也有更多时间摸鱼🤡
godpeo
107 天前
矫枉过正,有些东西是在开发的过程中 发现问题后 需要不停修改的
VeryZero
107 天前
@shizhibuyu2023
前端也要设计 😄
shizhibuyu2023
107 天前
@VeryZero #4 没事,那点设计基本等于摸鱼,真要搞也有很多自动化工具和 AI 工具可以借力,不用动多少脑子,边听小说边搞都能搞定😎
VeryZero
107 天前
@godpeo 这也是这么认为的,设计评审只是保证了大方向上没有偏差,不会出现开发完成后推倒重来的尴尬,但是具体代码实现上,只有真正开发了才能暴露出一些问题。

而规则制定者想让我们把在开发时才能遇到的问题在设计阶段就提前想到,这也是设计比较耗费精力的原因,很大一部分时间就是盯着天花板想有没有什么东西漏了。实际这些东西到了开发阶段都是水到渠成的事儿。
hefish
107 天前
还是看领头的人。 快速迭代出可用产品,根据市场情况继续迭代,挺好。 精细化设计,然后仔细开发,减少回退,也没错。 看人,看情况。
Hyschtaxjh
107 天前
听起来很日式
lidongyooo
107 天前
如果楼主不是管理层,设计就设计呗。能多点时间摸鱼,也能减少工作差错的可能性,何乐而不为。况且这种形式的工作做多了,何尝不是工作技能的提升。总有些时候是会要用到这些东西的。
dlmy
107 天前
为什么要在研发前花费大量精力做详细设计呢?

现实中一般都是先去做,手上有了东西才能出去吹:
1 、写概要设计,然后开始写代码,先做一个 MVP 版本(最小可行性产品版本)出来试试水
2 、根据市场反应,调整产品业务发展方向,研究变现通道
3 、包装产品,写详细设计,搞一些高大上的名词跟架构图上去
4 、后续基于 MVP 版本进行业务的快速迭代跟开发
crackidz
107 天前
写完就丢的代码可以不做设计

MVP 代码切忌过度设计

需求明确的瀑布开发需要详细设计

不可混在一起说,换句话说就是你需要根据情况取舍
zzzzzzggggggg
107 天前
值得
yufeng0681
107 天前
这种具体案例,在内部讨论简化,更有目标性。
我的观点:要做详细设计,但是不要变成为了做而做。
1 、复杂的算法要做详细设计,充分讨论
2 、业务逻辑可以按简化的规则落实写作
sb137885
107 天前
有必要
akira
107 天前
等你去到一家 需求就一句话,然后直接让你开工的 公司,你就知道这种有设计的是多么的舒服
laminux29
107 天前
1.一个大型项目,详细的设计文档、专家评审、财务规划、人力规划、时间安排、小规模试错、难点攻关等等,这些都是前期阶段重要的工作流程,也是保障项目成功率,保障项目质量的必要环节。

2.如果你工作的方式,是凭兴趣来,这么显然这家公司的工作方式,不适合你。如果你想玩那种完全随自己意愿的开发,建议你自己去做开源软件,这样就完全由你一个人把控了,想怎么搞就怎么搞。
xiaofan2
107 天前
这里的权衡点我觉得是看粒度 比如类图类似的在实际迭代过程中实际上会不断变化 而领域涉及、数据库库表设计、接口设计这种在实际过程中变动不会很大 这块值得详细设计
xiaofan2
107 天前
另外还有一点 设计出来的文档是否在后续迭代的过程中不断地迭代,这其实才是最难维护的点,需要开发额外的自动化机制来保证。至少在我经历的公司中,文档维护的很好的公司基本上没有....
charlie21
107 天前
只做一旦 bug 出现了有助于快速定位 bug 在哪里的事
nbhaohao
107 天前
值得, 想象一下新员工入职, 如果有设计文档, 那么给新员工入职介绍项目的时候, 也会很轻松, 反之只能让新人自己看代码, 而且随着项目时间推移, 没有人能够记住所有细节, 比如这块为什么这么设计.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1060625

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX