架构每日一学 2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)

本文首发于公众号:腐烂的橘子

在这里插入图片描述

为什么有的架构活动没有正确的目标?

在每个架构活动启动之前,必须有且仅有一个正确的目标,这是架构设计的起点[1]。何为正确?正确就是要与公司的战略目标相匹配。否则系统会变得复杂和无序。

架构活动为什么需要目标?

看看下面的情形你是否遇到过:

  1. 公司一口气干了很多项目,喊着口号,上班时长也变长,作为普通程序员,只能加班加点干,不知道这个项目最终能产生多少价值
  2. 有的同学很积极主动,会一些与公司主流技术栈不同的语言,还未全面评估就引入当前系统中,由于其他人不懂这个语言,所以大部分工作由他负责,等他离职了这个项目就被慢慢弃用了
  3. 项目初期,有人认为某个系统不应该“过度设计”,应该保持“极简”,随着业务不断发展,业务复杂度也极速变高,只能在原有简单的系统上不断堆叠,老的代码也不敢修改,最终整个系统臃肿不堪

注意第 3 点不是宣传“过度设计”,设计的复杂度要结合项目本身和业务来综合评估。以上 3 点都是缺乏统一的目标造成的结果,缺乏目标会导致“心力”的流失。“心力”是企业力极其有限及宝贵的资源,一旦架构尝试失败,心力耗尽的同学可能会选择离开,加速企业心力的流失,所以企业也是经不起“内耗”的。

除此之外,没有目标的架构活动会导致整个系统复杂度增加,这是一个“增熵”的过程,维护的成本,开发的成本都会增加,进而浪费企业的研发资源。

所以,制定一个目标,且与公司的战略目标匹配,这是架构活动中首先必须要遵守的法则。

为什么会目标缺失?

我们可以从技术和业务两个维度分别讲述。

技术:缺少全局视角

技术上缺少全局视角,主要有三个方面:

第一个方面,是开发者对于技术强烈的好奇心。由开发者发起的项目容易产生这个问题,如果开发者对技术的追求更多而对项目价值的思考少,就会产生这个问题。比如团队里的几位专家发起了一个平台的建设项目,这个平台引进了新技术模块,且架构方案也比较新,大家一起干完之后,使用方表示并不好用,于是慢慢就弃用了。这种“技术自嗨”只是让其他开发者觉得“这个系统很牛”,但对于使用方来讲,可能体验并不好,也并不是他们理想中需要的系统。

第二个方面就不太光彩了,是开发者个人利益。这个个人利益为了完成某个 OKR、KPI,或者自己不愿意动旧代码,就重新写一个新系统,但最终发现可能还需要用到老系统,所以两个系统同时运行,增加维护成本。开发者的个人喜好、技术能力、和同事的关系,都有可能决定是否引入一个新系统。

第三个方面的原因就是信息沟通不畅。比如公司有一个中间件的平台,已经承接了其他部门的很多业务,比较成熟了,但是自己部门由于没有做充分调研,大搞架构设计,费了九牛二虎之力搭建一个新的平台,重复造了很多轮子。还有一种可能就是前面谈到的,总觉得这个平台不适合我们的业务,有点过度设计了,认为我没有这么复杂的场景,于是也重新写一个新的 MVP 版本从 0 开始。

事实上往往你的场景简单,是因为你的业务还没做起来,等两到三年后业务够到业界水平了,你发现当初平台的那些模块一样也没落下,只能再用专业版本来代替。

业务:目标太多不明确

业务上导致架构活动没有正确的目标往往是目标太多且不明确。比如,业务方很多情况下不知道这个需求能产生多少价值,往往会制定多个策略,做 AB test,最后选择业务效果好的模式。多个策略就会产生多个需求,甚至有时这些需求在架构设计中完全是相反的。结果就是开发觉得开发了半天业务也没用到,耗费了心力;系统中增加了新的复杂度,导致整个系统无序。这时就需要做架构治理,让系统重新回到结构化的状态。

总结

在架构活动中,我们必须有且仅有一个符合公司战略目标的目标,这样能保证系统的结构化,不至于“烂尾”,系统的复杂度也会合理,也能避免开发者的“心力”的流失。在架构设计前我们可以经常这样问自己:这个架构规划为什么能给企业带来生存优势?它有什么价值?通过这样的反复提供,在我们面对众多项目时,根据给企业带来生存优势这个角度,我们也能判断出哪些项目是值得分配精力去做的,哪些是不重要的甚至应该被“砍掉”的。

参考

  1. https://time.geekbang.org/column/article/463876

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

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

相关文章

Nacos 配置中心实例分析实践

文章目录 Nacos 配置中心实例需求分析/图解在Nacos Server 加入配置创建Nacos 配置客户端模块e-commerce-nacos-config-client5000创建Module修改pom.xml创建application.yml创建bootstrap.yml主启动类业务类测试注意事项和细节 Nacos 配置中心实例 需求分析/图解 在Nacos Ser…

口才训练:如何用声音和语言展现自我魅力

口才训练:如何用声音和语言展现自我魅力 这里有一篇1270字左右的文章,主要介绍如何用声音和语言来展现自我魅力: 口才训练是提升个人魅力的重要途径之一。魅力不仅取决于外表,更重要的是声音和语言的运用。良好的语言表达能力可以…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

C语言 联合和枚举

目录 1. 联合体1.1 联合体类型的声明1.2 联合体变量的创建1.3 联合体的特点1.4 联合体在内存中的存储1.5 联合体使用举例 2. 枚举类型2.1 枚举类型的声明2.2 枚举变量的创建和初始化2.3 枚举类型的大小2.4 枚举类型的优点 正文开始 上次我们通过《C语言 结构体详解》学习了结构…

华为OD机试 - 字符串消除 - 栈Stack(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…

论文辅助笔记:Tempo 之 model.py

0 导入库 import math from dataclasses import dataclass, asdictimport torch import torch.nn as nnfrom src.modules.transformer import Block from src.modules.prompt import Prompt from src.modules.utils import (FlattenHead,PoolingHead,RevIN, )1TEMPOConfig 1.…

【模型参数优化】随机搜索对随机森林分类模型进行参数寻优【附python实现代码】

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至&#…

苍穹外卖项目

Day01 收获 补习git Git学习之路-CSDN博客 nginx 作用:反向代理和负载均衡 swagger Swagger 与 Yapi Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。 项目接口文档网址: ​​​​​​​http://localhost:808…

上位机图像处理和嵌入式模块部署(树莓派4b部署java环境)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 通常我们都会认为java是部署在pc服务器上面的,或者是用java开发android应用程序。其实不然,java也可以部署在嵌入式开发板子…

这是一个简单的照明材料网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>爱德照明网站首页</title><style>/*外部样式*/charset "utf-8";*{margin: 0;padding: 0;box-sizing: border-box;}a{text-dec…

SVM直观理解

https://tangshusen.me/2018/10/27/SVM/ https://www.bilibili.com/video/BV16T4y1y7qj/?spm_id_from333.337.search-card.all.click&vd_source8272bd48fee17396a4a1746c256ab0ae SVM是什么? 先来看看维基百科上对SVM的定义: 支持向量机&#xff08;英语&#xff1a;su…

JVM笔记1--Java内存区域

1、运行时数据区域 从上图可以看出来&#xff0c;Java虚拟机运行时数据区域整体上可以分成5大块&#xff1a; 1.1、程序计数器 程序计数器是一块较小的内存空间。它可以看做当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里&#xff0c;字节码解释器工作时就是…

工厂流水线生产视频素材哪里有?工厂固定机位视频素材从哪找?

在当今这个视觉内容至关重要的数字时代&#xff0c;具备高质量视频素材的资源库是制胜关键。优质视频素材不仅能够显著提升品牌的视觉吸引力&#xff0c;还能帮助你在社交媒体上获得更多的关注和互动。下面介绍的视频素材网站&#xff0c;每一个都能为你的视频项目提供必要的视…

【Python】机器学习之Sklearn基础教程大纲

机器学习之Sklearn基础教程大纲 1. 引言 机器学习简介Scikit-learn&#xff08;Sklearn&#xff09;库介绍安装和配置Sklearn 2. 数据预处理 2.1 数据加载与查看 - 加载CSV、Excel等格式的数据- 查看数据的基本信息&#xff08;如形状、数据类型等&#xff09;2.2 数据清洗…

深入浅出 BERT

Transformer 用于学习句子中的长距离依赖关系&#xff0c;同时执行序列到序列的建模。 它通过解决可变长度输入、并行化、梯度消失或爆炸、数据规模巨大等问题&#xff0c;比其他模型表现更好。使用的注意力机制是神经架构的一部分&#xff0c;使其能够动态突出显示输入数据的…

Git系列:如何为不同的Git仓库设置不同的配置项?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

威尔科克森秩和检验 (Wilcoxon rank-sum test)-- 代码实现

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

阿里低代码引擎学习记录

官网 一、关于设计器 1、从设计器入手进行低代码开发 设计器就是我们用拖拉拽的方法&#xff0c;配合少量代码进行页面或者应用开发的在线工具。 阿里官方提供了以下八个不同类型的设计器Demo&#xff1a; 综合场景Demo&#xff08;各项能力相对完整&#xff0c;使用Fusion…

深度学习之基于Unet肺部CT图像分割项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 肺部CT图像分割在医学诊断中占据重要地位&#xff0c;它有助于医生快速、准确地识别和分析肺部病变。…

【数据库原理及应用】期末复习汇总高校期末真题试卷

试卷 一、填空题 1.________是位于用户与操作系统之间的一层数据管理软件。 2.数据库系统的三级模式结构是指________、________、________。 3.数据库系统的三种数据模型是________ 、________、________。 4.若关系中的某一属性组的值能唯一地标识一个元组&#xff0c;则…