架构应该如何来理解?

简介: 架构应该如何来理解?


最近要多带一个架构团队做一个新版本,我写一些基本逻辑来给团队建第一层策略建模,以便我们后面的讨论有基础,由于这种问题是普适的,也不会涉及什么具体的保密问题,所以我公开来写。

架构是一个充满了自由度的工作,是一个最不适合用过去的成功指导下一波策略设计的领域,无论你过去的领域和这个领域有多相像,你过去的成功经验都只能拿来参考,不适合用来拷贝。

因为即使是完全相同的领域,时间已经不同了,行业生态,技术发展已经不同了,你面对的人不同了,业务的瓶颈已经不同了,生态的各个利益体的投资已经不同了,成熟的领域人员可能减少,当初的绩优股可能已经失败,你面对的是一个新的领域,我们做架构,永远不能被过去的“定义”,左右了我们的判断。所以,做新的架构设计,你可以参考过去的成功pattern,但你的分析,必须建立在现在的条件上,不能离开对现在问题的调查,直接打算使用过去的模式。

这是我对我们进行产品战略设计的第一个建议。

架构设计是一个非常微妙的设计领域,它是完全建立在形而上的逻辑上的,它是抽象的,非具象的。但这种抽象必须要以可以实施为底线,否则就沦为纸上谈兵了。所谓高以下为基,贵以贱为本。所以,我们不要出现“架构上我们应该如何如何,但我们现在人力不足啊”这样的思维角度,这是废话,架构就是建立在准备实施这个角度上的,你不能把架构设计和实施隔离,说一堆“我们要如何如何,只是某某条件不成熟。”这样的鬼话,如果某某条件不成熟,你就不该做出这个设计来浪费我们的时间。

架构设计是实施团队的一部分,没有独立于实施的架构设计。架构设计90%的工作是辅助实施团队实施架构战略和挑战架构战略,不是实施之外的独立设计。把人分离出来是为了保证投入,不是为了让这个团队成为实施团队的竞争者。

但反过来说,你不能说我们现在只有多少多少人,我们就做一个基于现在有多少人的方案,因为事情是变化的,在架构设计初期,给你很多的人,你也用不了,人力多了是个累赘,看在财报上每个月花出去的钱就让人害怕,但如果你的设计只是现在有多少人,那后面开始展开了,你根本就发展不了。没有准备,未来有可能给你补人你也接收不了。如果人力不是这样从小到多的一个变化过程,我们也不需要架构设计,架构设计必须可以响应这种人力,资源,市场等各方面的变化。

所以,我们从一开始就做好了做这种多步的策略的打算,考虑整体目标的时候,要用整个市场域的机会作为我们发展的上限,在实施的时候,要考虑好怎么一步步增强投资者和市场的信心,从而可以有序扩大整个业务,不要用“我的架构没有错,错的是市场,错的是人力资源没给够人,错的是……”来给自己做理由。架构设计包括对这些“别人的错”的预判。架构设计和实施是和整个产品的所有其他力量(开发,销售,维护,财务,法务等等)融合在一起的,没有独立于这些开发力量的架构设计。

这是第二个建议。

但对于这个建议,我有个直接的工作技巧可以分享。当我们确切落笔写一个架构设计的时候,要考虑:以客户为目标,以工程为准绳。

什么意思呢?就是说,你在架构设计的第一个部分,要明确说你打算卖一个什么样的东西到市场上去,你的客户打算买你的东西,这个决定的控制要素是什么?有这样一个标准在最前面,我们中间的所有变化,遇到的障碍,我们都知道往哪里绕。也知道我们绕完了,应该继续向什么方向走。

而在你的架构设计的最后一段,你要把你的所有设计落实为“版本”和“项目”。所有的人力管理,都是以项目为基础的,因为项目有确切的目标和人力资源投入,而不是“小李你去帮帮他们”这种尽力而为的东西,架构策略一旦展开,所有人都会面对无限的要求,没有确切的资源分割,凡是长远的东西都会被忽略和放弃。所以,要把架构策略得以实施的希望建立在人力资源管理上,不要建立在“期望”,“正义”,“道德”,“道理”这些依赖上。所谓子非不辨也,老子忙起来谁都不认也。

当然,我这里说的项目,是广义的项目,不一定是你流程中说的那个项目。

而项目,要输出确切的版本,你有硬件,有软件,有插件,这些都是有版本的,不要说什么做一个my-wonderful-app,里面支持这特性,那特性的。

你的软件上了市场,遇到一堆的客户,这些客户的要求都会不一样,你是用一个版本还是用多个版本去响应他们?产品是会有Bug的,是要有新特性开发的,修复Bug和增加新特性是会引入新的Bug的,所以,客户可能可以接纳升级你修复他的Bug的版本,可不一定肯接纳你发布的修复其他人问题的版本的。

这样,你在市场上就会有很多版本,这是天然的,版本一多,开发,测试,维护,管理的成本会大幅上升,这是一个重要的工程控制要素。你用my-wonderful-app这一个概念来考虑你的设计,你实施的时候就会怎么搞怎么不正常,因为你以为你开发的是my-wonderful-app,其实你开发的是my-wonderful-app-v1、my-wonderful_app-v2、my-wonderful-app-v2.1、my-wounderful-app-v2.1-without-tso-llvm_v7_specific-edition……你对人力和项目的预判都是错误的,当然执行不下去了。

所以,很多人其实不明白“开源交付”是个什么东西,开源交付其实是一种减少版本的方法,一个源代码树是可以编译出很多二进制版本的,我给你源代码,编译产生多个版本的的维护成本就是你的了,很多人以为交付源代码是对用户友好,是为行业做贡献——那得看客户是想当你的竞争对手,还是想解决他的问题了。(但即使你用“源代码交付”,如果是商业交付,你的测试还是需要落实到一组二进制版本上的,而且你必须很清楚,这些二进制版本都是会升级的,死版本支持的生态是死的生态)

但无论如何,架构设计一个基本的要求,高以下为基,不要离开你的工程成本想得天花乱坠,只要涉及工程,什么美好想法都得给我从天上掉下来。

第三个建议:调查和设计也是要结合起来的。架构设计初期,我们有无数的“未知”:竞争对手的战略是什么?客户的期望是什么?研究机构有什么新的突破?市场份额的预测是什么?国家政策的走向是什么?……

如果你要调查完这些东西才做决定,你就永远都不用做了。所以,进行架构设计,要勇敢进行“猜”,“预判”,哪怕错了,你也要“猜”,因为这是架构设计工作的基础。你的决策要同时决策:使用猜这个结论和再调查一下,哪个投资收益比更低?然后就要去实施。我在这个专栏中经常强调“守弱”,其本质就是这个:架构本身就是一种猜,我们在猜的基础上执行,如果你非要维护面子,在执行的时候收到当时猜错了的反馈,你死要面子不肯调整,那这个架构执行就失败了。

所以,做架构不能要面子,你眼中只能有产品的最后成功,到成功的时候,你坐在那里,旁边的人说什么,你都可以冷冷看着他,由他讲他的道理,你根本不用在乎。

这样就要提到第四个建议了:你不要指望实施团队会很喜欢你,你做的所有事情,都是为了未来让他们“绕路”走,你的结论他们不会喜欢的。你可以用你所有的个人魅力去尽量soften这种冲突,你可以下去和他们一起分担开发调试的压力,让他们没有那么恨你,但你要知道,如果实施团队很舒服,你的架构设计肯定变成在旁边说胡话了,根本没有设计效果。

所以,你决定来做架构了,就不要期望你有多nice。这是这个工作的特性,不能调和的。不要为了实施团队的一般抱怨就去改变你的设计去迎合,否则产品失败的时候,就没有人跟你抱怨了。吾之所以有大患者,为吾有身,及吾无身,何患之有?你应该多听实施团队的抱怨,但你要分清楚哪些是真正在反馈问题,哪些只是你战略实施的成本。

最后一个建议:架构团队来自不同的领域,不要用“领域代表”看待自己。不要说我只是做芯片设计,我只是做安全的,我只是做内核的,我只是做数据库的。架构团队存在的目的,就是为了设计那些多个模块互相甩锅的Gap,然后所有模块和协同起来,达到最优的效率。你尽然进来架构组了,你就不是某个模块的“甩锅代表”,你就是整个产品。

大部分投资者都是不懂技术的,就算他们来自技术背景,他们对你实施的这个技术也是外行,因为细节只是我们知道,否则他就不用你来做了,他自己做就好了。这些人决策的方式就是“多方确认”。

如果架构组自己都达不成共识,各说各话,那怎么说服投资人(其实包括准备用你的客户),所以,架构组每个人都应该对整个架构策略都很熟悉。我不要求做芯片的人就会写程序,但我需要做芯片的人知道软件部分的构架要求,在解决方案中所处的地位。你不要告诉我你只懂UEFI,不懂Kernel是怎么做的,我需要你知道ACPI表那些信息是给Kernel的哪个模块看的,你不是在做实施,等着别人给要求,你是那个负责知道少给一张EINJ表,Kernel会不会起不来的人。

推广起来说,作为一个产品的架构团队,你也不能只管“我的产品如何如何”,你必须从整个产业生态上开始设计。狼吃羊,羊吃草,你不能说你是狼,不管羊的死活。没有羊了,狼也死了。做架构设计的人,必须知道狼可以吃多少羊,吃到什么时候就要开始收手了。

所以,对于一个产品的架构师,必须知道整个生态链是怎么运作的,要为了整个生态的平衡,不怕把自己部分自己的业务让给其他产品,其他企业,也不怕自己背上别人不肯实施的业务,这样你才会有掌控生态的力量。

大概就是这样一些吧,再往下,就是具体业务怎么做的问题的。但当我们碰到困难的时候,不妨回头来看看我们的总体思路,也许觉得无路走的时候又发现有路了,觉得很顺利的时候,说不定就是危机的开始了。



相关文章
|
JavaScript 数据可视化 定位技术
手把手教你用Pyecharts绘制地图~
大家好,我是志斌~ 今天来给大家分享一下如何用Pyecharts绘制地图。
3470 0
|
算法 计算机视觉 网络架构
YOLOv7 | 模型结构与正负样本分配解析
YOLOv7 | 模型结构与正负样本分配解析
2426 0
YOLOv7 | 模型结构与正负样本分配解析
|
7月前
|
IDE 算法 开发工具
Makefile 工程 导入 VSCode EIDE 开发实战笔记
本教程详解如何将STM32CubeMX生成的Makefile工程(含FreeRTOS)导入VSCode+EIDE插件。涵盖环境配置、源码手动整合、头文件/宏定义/FPU/链接脚本等关键设置,并重点解决FPU指令不支持和链接脚本语法错误两大典型问题,助你快速实现高效开发。(239字)
1430 3
|
10月前
|
机器学习/深度学习 算法 算法框架/工具
基于yolov8的深度学习水果识别检测系统
在农业现代化与消费升级背景下,基于YOLOv8的水果智能检测系统应运而生。该系统利用计算机视觉技术,实现高效、精准的水果识别与分级,广泛应用于生产、流通与零售环节,显著提升分拣效率、降低人工成本,并推动农业智能化发展。
|
人工智能 供应链 数据可视化
数字孪生智慧园区管理平台,三维可视化系统,沃思智能
智慧园区加速发展,2025年全球市场规模将超3000亿美元。依托物联网、AI等技术,管理系统实现安防、能源、空间等全链条智能化,推动园区从“物业服务”向“数据运营”转型,助力产城融合与绿色发展。(238字)
1232 138
|
6月前
|
数据采集 缓存 安全
【HTTP】HTTP协议核心体系:请求方法与状态码全结构化解析(附《思维导图》)
本文系统解析HTTP/1.1请求方法与状态码:厘清安全/幂等本质,详解9种方法语义、约束与误区;全覆盖状态码全分类(1xx/2xx/3xx/4xx/5xx核心场景)的定义、场景及关键区分(如301/308、401/403、502/504);强调RESTful实践与高频红线,助力构建健壮、规范的Web服务。
|
6月前
|
人工智能 安全 机器人
OpenClaw养虾笔记-入门教程
OpenClaw让智能体更进了一步,相较于传统LLM的一问一答方式,其优点在于,能便捷的扩展海量工具,也支持集成用户自己开发的工具、脚本,还能自行拆解复杂任务成工作流,完成工作流的设计和开发。并能将拆解的工作流或者用户自己的工作流串接成完整的流水线,每个环节调用不同的skills,完成复杂任务。除了能24小时持续工作外,甚至还能进行自我迭代改进。新手最大的困惑是安装了,也不清楚下一步该怎么办,本文描述从0开始构建OpenClaw,让龙虾在工作和生活中发挥作用。
|
9月前
|
JSON 监控 API
1688价格API:批发价实时比对,省钱利器!
本文介绍如何利用1688价格API实现实时批发价比对,帮助商家自动化获取最优进货价。涵盖API原理、Python代码示例及省钱策略,助力降低采购成本,提升竞争力。(239字)
8082 1
纳维-斯托克斯方程存在性与光滑性的重构封闭证明 · 第八篇
本文在前七篇推导基础上,整合完整变量重构逻辑、危险项吸收机制、拓扑复杂度控制逻辑与Banach-Sobolev空间一致性收敛分析,形成对纳维-斯托克斯方程存在性与光滑性问题的全封闭证明尝试。
622 2
|
算法 数据可视化 搜索推荐
基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验
本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。
1091 0

热门文章

最新文章