【架构笔记2】设计不足和过度设计

news2024/11/15 8:49:28

复杂系统问题设计中有两类现象需要引起关注:设计不足和过度设计,通常第一种比较常见,第二种则也是一种灾难。当然我认为他们都可以被优化,如果用正确的流程引导,在框架模板的限定下放飞,就像教养孩子有个观念叫温柔而有边界的爱,设计也需要赋能而有规范的指引,不只是一个设计文档怎么结构,还有设计流程倡导、设计思想渗透、不同级别设计区别对待。

1 设计不足

设计不足的问题,这个很好理解,对于需求没有充分消化,只是完成了明面上的功能,但是没有考虑必要性、特殊性、异常场景、安全场景、部署运维角度。通常实现功能是一方面,我们站在更高的维度,多角度思考才能考虑更多。当然这里也有一些需要明确的说明:

  • 流程和框架引导不是适用于所有设计,我们这里特指的复杂的需求,业务牵扯很广的特性。如果所有的设计都用同一套流程和框架指导,必然会带来小材大用的问题,当然我们更多的会在这一些大材小用中慢慢耗光对于这些模板和流程的耐心。因此因地制宜很关键,小设计用简化流程,大设计特殊设计,被特殊对待。
  • 无论任何大小设计,我们至少有两种思维,不一定要流程固化,但是要从认知维度考虑。首先是多维度思考意识,功能实现是实现维度考虑的问题,但是更多时候,我们还要从业务深度理解需求目的和最终是什么诉求,其次业务广度想一想,是不能业务涉及的服务数量、业务影响范围是否足够可控,是否除了功能实现,我们还要留出更多时间用于异常场景设计、安全性考虑。
    实现功能是基础,考虑清楚异常、安全、可扩展性问题、可测试性、可裁剪性才是差异。

2 过度设计

关于过度设计的问题,在平时设计中并不常见,但是过度设计的坏处却是同样具有威力的。

首先是时间的消耗,我们都说设计讨论需要收一收,但是这个收的尺度其实很难把握。我们有时候参加一些头脑风暴不自觉地就发散 了,就来到了新的领域,结果准备的话题没有聊清楚,又带了许多新的问题。因此设计探讨、头脑风暴的流程是需要被刻意规划的设计,有张有驰,明确重点,允许差异新思想,但是更注重的记录问题、把控进度,然后再到会发发起新的流程,解决新问题新观点,或许这边是设计探讨环节的一种流程规范和引导。

其次过度设计的问题是一开始想多了,结果到了未来发现做也多了。

这类问题在我个人前期的一些自动化测试系统中较为常见,因为这类开发最大的特点就是需求的不确定性较高,关心功能提出需求的人往往不是第一用户,第一用户又没有时间提出真实诉求,因为他们太忙。

这个特点其实大大提高了前期需求摸底的重要性,因为我们软件系统设计人员不是第一用户和产品,所以更应该在前期花更多时间了解使用人群,其实这类项目设计,工作量更多的应该放在前期场景分析,先梳理清楚真实需求,哪怕提前一个季度用小兵力摸底需求,为想发声但是没有时间精力发声的人,探究他们真正的需求,或许才能更早发现问题。

同时这类项目最大的问题,也在于这个落地执行的耦合度,需求规划期、项目设计期、实施期、测试因为没有公有云明确,因此这几个阶段通常被耦合在一起,甚至互相掣肘。最后的影响就是研发赶进度,而忽视规划和摸底需求,做出冗余设计或者没有明确重点的功能。

总而言之,相较于其他传统项目和feature,这类问题更应该被提前规划,否则就会做出错误的功能,我们需要花更多的时间,让设计解放出来,去盘点场景和需求,去除冗余模块和功能,而这种提前规划是需要被更早倡导的。当然除此之外便是精益开发,最小迭代。如果一件事他很明确,他是做的问题。如果一件事我们明知道很重要但是不明确,那么更应该重视他,小规模投入,摸底真实用户需求、提前做原型,然后在持续迭代和演进中让他生存下去。一开始期望高,投入高,设计高,但是没有让他在落地中去运转去自我迭代,这些在我看来都是过多设计。提高战略的重视度,制定长时间持续的计划,然后给出一个小目标,去迅速落地,把重心放在迭代,或许才是对过度设计的根治。

3 精益设计

这是又一次谈到精益,但是在经过半年迭代后,我对他的理解也发生稍许变化,之前我的关注的点在“快速开发”,如今变为朝着正确方向“持续迭代”。

精益创业这本身可能更多的站在公司的角度、站在互联网产品的角度,谈如何“最小可用品”、“客户反馈”、“快速迭代”,但是落地到研发设计阶段,他也有了新的变化。大方向没有问题,这个可以是原则,但是落地阶段,实际上变成了对于设计每个环节的贯彻,比如如何取舍需求、如何规划项目、如何设计流程和系统、研发如何定义模型、项目如何落地、测试如何展开、产品如何交付。

最小可用强调一个快,但是需要有人看到全局,找到痛点,走到前头,这里的难点却不是“快”,而是如何在一堆繁复需求中,看到什么才是最重要的,这需要了解全局,更需要做出取舍的格局。

客户反馈和快速迭代,才是我们最容易忽视的流程,如何建立快速反馈通道,如何保证快速迭代,这里是需要从机制和框架的流程去反思的,他不是一句话说我们要建立就够了,而是落地到实处,建立一个机制,引导一个风格,落地一个项目。

当然有时候改变整个系统很难,因为我们已经有了沉没陈本,有很多尾大不掉的包袱,可能无法全面展开,也要站到一个实验田,让他迅速完成自我迭代。就像1979一位伟人在中国南海画了一个“圈”,那以后四十年中国巨变,而变化最大、迭代持续、引领风尚的可能就是这个“圈”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git实战(1)

一, git log 查看提交日志情况 根据 commitId进行版本回退 git reset --hard commitId(commitId可以是一部分,不用完整的ID) 只输出一行信息: git log --pretty=oneline 快速回退: git reset --hard HEAD^ 回退到上一个版本 git reset --hard HEAD^^ 回退到上上个版本 如果…

力扣74. 搜索二维矩阵(二分查找)

Problem: 74. 搜索二维矩阵 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1:映射为一维数组二分查找 1.由于题目矩阵中的元素整体是升序的,我们可以将其放置在一个大小为 m n m \times n mn的一维数组array中进行二分查找 2.对应的映射关系是ar…

蓝桥杯备赛 day1 | 1. 门牌制作, 2. 迷宫, 3. 乘积尾零

最近正好在刷算法题&#xff0c;报了一个蓝桥杯体验一下&#xff0c;但是钱都交了&#xff0c;高低混个奖好吧&#xff0c;今天做的都是一些填空推理题&#xff0c;相当于用程序写下正解&#xff0c;代码是在Dev C上面写的 #include<iostream> #include<bits/stdc.h&g…

HikariCP与Spring Boot的完美集成,让您的应用更高效、更可靠!

随着Spring Boot的流行&#xff0c;越来越多的开发者选择使用它来构建高效、可扩展的应用程序。然而&#xff0c;在构建应用程序的过程中&#xff0c;数据库连接的管理也是一个非常重要的环节。在这篇文章中&#xff0c;我们将介绍如何将HikariCP这一高效的数据库连接池与Sprin…

性能对比:mysql 5.7-8.0-TiDB 7.5-OceanBase 4.2-MariaDB 10.11-机械硬盘-固态硬盘-

1.mysql 5.7-8.0 5.7比8.0优秀 结果&#xff1a;5.7比8.0优秀 10% 2.机械硬盘和固态硬盘 影响不大&#xff0c;主要是CPU 3. JAVA MYSQL 分开 4.『直属 MySQL 』vs 『Docker MySQL』 vs 『Podman MySQL』 直属最好 &#xff0c;其次是Podman&#xff0c;最后是DOCKER 5.MySQL …

Python光速入门 - Flask轻量级框架

FlASK是一个轻量级的WSGI Web应用程序框架&#xff0c;Flask的核心包括Werkzeug工具箱和Jinja2模板引擎&#xff0c;它没有默认使用的数据库或窗体验证工具&#xff0c;这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单&#xff0c…

Qt/事件分发器/事件过滤器

事件分发器 //事件分发器bool event(QEvent* e); //事件分发器&#xff1a;&#xff1a;用途 分发事件 bool MyLabel::event(QEvent* e) {if(e->type() QEvent::MouseButtonPress){//如果是鼠标摁下 拦截事件 不向下分发QMouseEvent* ev static_cast<QMouseEvent*>…

【JS 算法题: 将 json 转换为字符串】

题目简介 其实就是手撕 JSON.stringfy()。 算法实现 输入 原则上来说&#xff0c;输入的是一个 json 对象。但需要考虑到异常情况&#xff0c;即输入了其它类型的数据&#xff0c;比如&#xff1a;12, true, ‘abc’, [‘red’, ‘green’], null, undefined 等。 输出 …

AGM CPLD (AGRV2K )的时钟(外部时钟和片上内部振荡器)

AGM CPLD &#xff08;AGRV2K &#xff09;的时钟(外部时钟和片上内部振荡器) 外部晶振 与 内部振荡器&#xff1a; mcu 和 cpld 联合编程时&#xff0c; 整颗芯片需要一颗外部晶振。 &#xff08;芯片有内部振荡器&#xff0c; 但误差较大&#xff0c; 校准后 5%以内误差&…

LSTM 长短期记忆递归神经网络

1、神经网络简介 1.1 神经网络起源 人工神经网络&#xff08;Aritificial Neural Networks, ANN&#xff09;是一种仿生的网络结构&#xff0c;起源于对人类大脑的研究。人工神经网络&#xff08;Aritificial Neural Networks&#xff09;也常被简称为神经网络&#xff08;Ne…

Vue3_2024_3天【Vue3组合式API~响应式及toRefs】

第一&#xff1a;vue3 中可以两个script标签 第一个&#xff1a;声明组件名 第二个&#xff1a;setup语法糖&#xff08;默认 lang语言是js语言&#xff0c;修改语言须保持一致&#xff09; 若想去掉一个script标签&#xff08;声明组件名称&#xff09;&#xff0c;则可使用插…

八. 实战:CUDA-BEVFusion部署分析-学习CUDA-BEVFusion推理框架设计模式

目录 前言0. 简述1. 回顾一下RAII是什么2. 实现类&#xff0c;接口类与命名空间3. CUDA-BEVFusion设计框架(namespace)4. CUDA-BEVFusion设计框架(接口类)5. CUDA-BEVFusion设计框架(实现类)6. CUDA-BEVFusion设计框架(各个类负责的内容)7. CUDA-BEVFusion中的接口函数和实现类…

failed to connect to ‘127.0.0.1:58526‘: Connection refused

WSA使用体验 链接&#xff1a; 知乎-穿越时间一步到位&#xff0c;教你完美安装Windows 11 Android 安卓子系统 CPU不满足要求 明明是12700H&#xff0c;满足要求&#xff0c;但是应用商店说不满足&#xff0c;在设置&#xff08;注意不是控制面板的区域&#xff09;把地区改…

ChatGPT 4.0使用之论文阅读

文章目录 阅读环境准备打开AskYourPDF进入主站 粗读论文直接通过右侧边框进行提问选中文章内容翻译或概括插图的理解 总结 拥有了GPT4.0之后&#xff0c;最重要的就是学会如何充分发挥它的强大功能&#xff0c;不然一个月20美元的费用花费的可太心疼了&#xff08;家境贫寒&…

HTML~

HTML HTML是一门语言&#xff0c;所有的网页都是用HTML这门语言编写出来的HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&#xff0c;还可以定义图片、音频、视频等内容 标记语言:由标签构成的语言 …

谨用ArrayList中的subList方法

谨用ArrayList中的subList方法 规范一&#xff1a; ArrayList 的 subList 结果不可强转成 ArrayList&#xff0c;否则会抛出 ClassCastException 异常&#xff1a; public static void test7() {List<Integer> list new ArrayList<>();list.add(1);list.add(2);…

云服务器无法Ping通解决

问题: 使用公网IP地址PING云服务器,无法PING通 但是可SSH到服务器,表示通信链路是正常的,可能是端口或路径规则未开放导致 登陆云服务器后台,进行安全组规则查看,发现ICMP没有放行 添加允许ICMP连接规则 成功PING通云服务器

Linux文本处理三剑客:awk(结构化命令)

在Linux操作系统中&#xff0c;grep、sed、awk被称为文本操作“三剑客”&#xff0c;上几期中&#xff0c;我们详细介绍grep、sed、awk的基本使用方法&#xff0c;希望能够帮助到有需要的朋友。 目录 1、前言 2、条件控制语句 语法结构&#xff1a;IF 语法结构&#xff1a…

蓝桥杯练习题——前缀和

1.壁画 思路 1.求最坏情况下&#xff0c;画的墙总和是多少 2.画的墙在中间连续一段&#xff0c;画了的墙长度是 n / 2 向上取整 3.取最大的 n / 2 向上取整区间和 #include<iostream> using namespace std; const int N 5e6 10; char s[N]; int a[N]; int t, n;int m…

【RHEL】三分钟启动完整版vim——vim9 huge编译安装

详细安装步骤 一键安装传送门 Vim提供了许多快捷键和命令来加快文本编辑的速度和效率。它具有强大的搜索和替换功能&#xff0c;支持多种文件格式&#xff0c;可以通过插件扩展功能&#xff0c;并提供了强大的自动补全功能。   然而在大多数Linux操作系统中利用系统软件源安装…