模块与依赖关系图
如实呈现应用各部分今天实际如何相互依赖,这往往和最初的设计意图相差不小。
大多数迪拜聘请应用架构师的企业,已经拥有那个应用了。它已经上线,有客户或员工在依赖它,并且在过去几年里,随着每一个新功能恰好把它推向了某个方向,不断生长。结果通常是能用,但已经很吃力:一个原本很小的模块,如今几乎牵动了半个代码库;一个数据模型用三种不同方式表示同一个概念;或者系统里有一部分,没人愿意去改动,因为已经没人完全理解它了。
应用架构师的工作,是让这套结构重新变得清晰易懂:按实际情况而不是某张图曾经声称的样子,把模块画出来,找出真正的耦合和重复出在哪里,并制定一份能改善结构、又不用停下功能开发数月的计划。这个范围比软件架构师更窄,后者通常从更早期就统领产品的整体方向;也比企业架构师窄得多,后者的工作横跨多个应用,而不是深入某一个。
这份工作必然贴近代码本身。一位无法深入阅读现有系统的应用架构师,无法就如何改善它给出可信的意见,这也是为什么这个角色更接近资深工程,而不是战略咨询。
这个角色的产出
迪拜企业一旦为一个真实存在的代码库决定聘请应用架构师,应该期待获得什么。
如实呈现应用各部分今天实际如何相互依赖,这往往和最初的设计意图相差不小。
一份按重要性排序的结构性问题清单,把真正要紧的问题和无关痛痒的外观问题分开,并给出大致成本。
找出同一个概念在应用各处表示不一致的地方,并制定一份在不破坏现有正常运行功能的前提下加以整合的计划。
一系列较小、低风险的改动,逐步推进结构改善,而不是一次高风险的整体重写方案。
为新功能应该落在现有结构的哪个位置,制定清晰规则,让应用在改进过程中不再继续跑偏。
留下的文档和沟通,让现有开发者、而不只是架构师本人,也能解释清楚这套结构。
该检查什么
在迪拜聘请应用架构师之前,该检查的是能否自如地在别人过去的决策中工作。
| 技能或习惯 | 合格表现是什么样 | 为什么重要 |
|---|---|---|
| 阅读一个混乱的现有代码库 | 能在几天而不是几周内,在一个庞大、缺少文档的应用里理清方向,把代码本身当作最终依据 | 这类工作大多始于一个从未被完整梳理过的系统 |
| 对重写保持克制 | 默认选择分阶段改进,并能用 AWS Well-Architected 框架 或同类框架,说明什么时候全部重写确实是正确选择 | 全部重写通常是风险更高的选项,一个太快就想重写的候选人是一个警讯 |
| 数据建模 | 能追踪同一个概念在多处的不同表示方式,并提出一条通往统一模型的现实路径 | 不一致的数据模型是一个成长中应用里,隐蔽 bug 最常见的成因之一 |
| 与现有开发者协作 | 把构建这个系统的团队当作知识来源,而不是需要绕开的障碍 | 一位让现有团队产生对立情绪的架构师,会失去让建议真正切合实际的背景信息 |
| 书面优先级排序 | 产出一份排好优先级的结构性问题清单,而不只是罗列所有不完美之处的长名单 | 企业一次只能资助几项改进,需要知道哪些最重要 |
合作方式
项目制适合大多数首次的需求:对现有应用做一次评估,最终交付一份书面结构图和一份分阶段计划,有明确的完成节点。顾问咨询适合更短、更聚焦的问题,例如就供应商或内部团队已经提出的重写方案给出第二意见。专属团队适合一个正在积极开发的大型应用,结构性改进需要在数月而不是数周内与功能开发并行推进。招聘支持适合希望长期把这项能力招入自己团队的企业,由我们负责寻访、初筛并执行技术评估。
评估候选人
无论以哪种方式在迪拜聘请应用架构师,都要给他们一个真实的代码库问题,而不是假设性的问题。
请候选人当场走一遍,说说他们会先调查什么。优秀的候选人会先提问,再提出修复方案。
有真正判断力的候选人,能说出一个案例:明显的答案(重写)并不是正确答案,以及他们当时推荐了什么。
请他们说明在过往项目中如何排出问题优先级,以及排在最前面的问题是否真的是代价最高的那些。
留意他们是把原开发团队描述成一种资源,还是描述成问题本身。后一种回答是警讯。
请他们展示以往项目留下的文档。如果只有架构师本人能看懂用,那这份交接并没有真正做到位。
认证
没有哪张证书能证明一个人善于读懂别人写的老代码,这也是为什么迪拜聘请应用架构师要看证据,而不是看徽章。
和这个分类里的不少头衔一样,应用架构师并不是任何厂商颁发的认证,所以应把这个头衔当作职位描述,而不是经过验证的资质。
与您应用运行所在的具体平台或语言相关、由相应厂商颁发的认证,是合理的辅助信号,应配合真实的代码审查一起看,而不是取而代之。
阿联酋考量
值得在迪拜聘请应用架构师之前提出,因为这两点在应用上线多年后都会浮现出来。
一个较老的应用往往把客户或员工数据存储在比任何人记忆中更多的地方。依据 2021 年第 45 号联邦法令,即阿联酋联邦数据保护法,应用架构师的结构性审查正是梳理这些数据究竟存放在哪里的自然切入点。
为一个原本不是为此而建的应用,加上从右到左布局或妥善的阿拉伯语文本处理,是真正的结构性工作,而不是样式改动,应用架构师应该老实地评估其工作量,而不是把它当作外观问题对待。
直接解答
实际操作中,这两个头衔有很大重叠,在不少团队里指的就是同一份工作。如果要做区分,应用架构师专注于一个已存在应用的内部结构,往往是一个遗留系统,而软件架构师更常用于从零开始构建的产品。
往往合适。应用架构师是最专注于理清一个已经存在、又长得有些混乱的代码库的角色,梳理它的模块,找出真正的耦合出在哪里,并规划出如何在不冒险全部重写的前提下把它理顺。
可以考虑,但对于真正全新的产品,我们的软件架构师页面可能更准确地描述了这个角色。一旦存在一个有真实历史和真实技术债务的代码库,应用架构师就是更贴合的选择。
可以,这是他们最有价值的工作之一。对现有应用的结构化评估通常会显示,全部重写比企业预想的风险更高、速度更慢,而分阶段重构往往能带来大部分同样的收益。
几乎总是并肩工作。这个角色依赖于理解应用今天实际的运行方式,而这种理解来自实际维护它的开发者,而不仅仅来自文档。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。