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

news2025/1/13 3:06:29

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

在这里插入图片描述

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

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

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

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

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

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

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

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

为什么会目标缺失?

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

技术:缺少全局视角

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

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

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

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

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

业务:目标太多不明确

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

总结

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

参考

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

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

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

相关文章

基于Spring Boot的医疗服务系统设计与实现

基于Spring Boot的医疗服务系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 医疗服务系统首页界面图,公告信息、医疗地图…

RHCE shell-第一次作业

要求: 1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检査- 次磁盘剩余空间。 2、判断web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式 判断该程序是否运…

基于FPGA的数字信号处理(8)--RTL运算的溢出与保护

前言 在做加、减、乘、除等运算时,经常会发生 溢出 的情况。比如1个4bits的计数器(每个时钟累加1),在4’b1111 1 后,原本其期望值应该是 151 即16,但是4bits的寄存器能表示的最大值只是4‘b1111即15&…

Server 2022 IIS10 PHP 7.2.33 升级至 PHP 8.3 (8.3.6)

下载最新版本 PHP 8.3 (8.3.6),因为是 FastCGI 执行方式,选择 Non Thread Safe(非线程安全)。 若有以下提示: The mysqli extension is missing. Please check your PHP configuration. 或者 PHP Fatal error: Uncaught Error: Class &qu…

PDF Shaper Ultimate 免安装中文破姐版 v14.1

软件介绍 PDF Shaper是一套完整的多功能PDF编辑工具,可实现最高的生产力和文档安全性。它允许你分割,合并,水印,署名,优化,转换,加密和解密您的PDF文件,也可插入和移动页&#xff0…

每日OJ题_DFS爆搜深搜回溯剪枝①_力扣784. 字母大小写全排列

目录 力扣784. 字母大小写全排列 解析代码1_path是全局变量 解析代码2_path是函数参数 力扣784. 字母大小写全排列 784. 字母大小写全排列 难度 中等 给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。 返回…

SpringSecurity6 学习

学习介绍 网上关于SpringSecurity的教程大部分都停留在6以前的版本 但是,SpringSecurity6.x版本后的内容进行大量的整改,网上的教程已经不能够满足 最新的版本使用。这里我查看了很多教程 发现一个宝藏课程,并且博主也出了一个关于SpringSec…

解决: 0x803f7001 在运行Microsoft Windows 非核心版本的计算机上,运行“ slui.exe 0x2a 0x803f7001 “以显示错误文本,激活win10步骤流程。

一. 解决 0x803F7001在运行Microsoft Windows非核心版本的计算机错误 首先,按下winR打开"运行",输入 regedit 后回车,打开注册表。   然后再注册表下输入地址HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProt…

ssh远程访问windows系统下的jupyterlab

网上配置这一堆那一堆,特别乱,找了好久整理后发在这里 由于既想打游戏又想做深度学习,不舍得显卡性能白白消耗,这里尝试使用笔记本连接主机 OpenSSH 最初是为 Linux 系统开发的,现在也支持包括 Windows 和 macOS 在内…

【第三版 系统集成项目管理工程师】第2章 信息技术发展(知识总结)

持续更新。。。。。。。。。。。。。。。 【第2章】 信息技术发展 考情分析2. 1信息技术及其发展2.1.1 计算机软硬件-P501.计算机硬件2.计算机软件-P51 2.1.2计算机网络1.通信基础-P522.网络基础-P534.网络标准协议-P543.网络设备-P535.软件定义网络-P576.第五代移动通信技术-P…

【论文阅读】Tutorial on Diffusion Models for Imaging and Vision

1.The Basics: Variational Auto-Encoder 1.1 VAE Setting 自动编码器有一个输入变量x和一个潜在变量z Example. 获得图像的潜在表现并不是一件陌生的事情。回到jpeg压缩,使用离散余弦变换(dct)基φn对图像的底层图像/块进行编码。如果你给…

【Redis面试题】Redis常见的一些高频面试题

分享几个Redis入门级常见面试过程中遇到的题目! 你项目中哪里使用到了redis?可以讲一讲嘛 这个题目无论是大公司还是小公司都经常考,建议大家根据自己的项目做总结 redis的几种基础数据结构 redis为什么那么快? 1.基于内存实现:我们都知道内存读写是…

50个前端实战项目之04:隐藏的搜索小组件

大家好,我是宝哥。 今天讲50个前端实战项目之04:隐藏的搜索小组件。 源码下载地址 https://github.com/bradtraversy/50projects50days/tree/master/hidden-search 前端实战项目系列正在更新:04/50 01:可展开卡片02:进…

Springboot+Vue项目-基于Java+MySQL的图书商城管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

中国各省地图(高清晰一亿像素)

hello,我是小索奇 不知道大家有没有使用地图的习惯,反正小索奇去一个地方,就会使用地图,也会经常看世界地图,因为地理学得不好,有时候也记不住部分省份在哪里。所以会经常使用到地图 但去百度搜索里面寻找…

windows驱动开发-PNP管理器

PNP技术是由Microsoft提出的,英文Plug and play的缩写,中译即插即用,意思是系统自动侦测周边设备和板卡并自动安装设备驱动程序,做到插上就能用,无须人工干预,是Windows自带的一项技术。所谓即插即用是指将…

阿里云API网关 产品的使用笔记

阿里云的产品虽多,还是一如既往的一用一个看不懂,该模块的文档依旧保持“稳定”发挥,磕了半天才全部跑通。 用阿里云API网关的原因是,在Agent中写插件调用API的时候,需要使用Https协议,又嫌搞备案、证书等事…

关于YOLO8学习(三)训练自定义的数据集

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 简介 本文将会讲解: (1)如何通过PyCharm,进行训练数据,实现人脸检测 开发环境 win10、python 3.11、cmake、pytorch2.0.1+cu117、pycharm、ultralytics==8.0.134 要特…

解决layui的bug 在layui tree 组件中 禁用选中父节点后自动选中子节点功能

最近做权限管理后台,用了layui tree 组件,发现选中了父节点后,自动选中了子节点。不满足现实业务需求。所以微调了下源代码。 在用树形组件中,在用文档中 tree.setChecked(demoId, [2, 3]); //批量勾选 id 为 2、3 的节点 用这句…

Python 贪吃蛇

文章目录 效果图:项目目录结构main.pygame/apple.pygame/base.pygame/snake.pyconstant.py 效果图: 项目目录结构 main.py from snake.game.apple import Apple # 导入苹果类 from snake.game.base import * # 导入游戏基类 from snake.game.snake im…