acm-header.
登入

ACM的通信

博客@cacm.

软件架构决策:文化考虑


开发软件架构计划的过程是多年来会产生影响的过程。它将非常密切地影响公司的开发商,其中许多人将努力实施这个想法,每个人都会有自己的意见,观点,喜欢和不喜欢。它将影响客户,影响市场的新功能,缺陷率和整体用户体验。此外,它将影响公司的总体前进进度,确定维持现有基础设施的便利,以及随着技术向前发展“跟上时代”的能力。难以找到已经过了10岁,甚至20年的Web应用程序的例子,这是曾经考虑过现代的时间,但现在是今天的遗产代码。建筑决策可以对公司及其文化产生影响,超越技术的健全性,当赌注如此之高时,重要的是考虑这些其他非技术方面是很重要的。

接受性

一个好的问题要询问任何新技术选择是:发展团队是否会接受它?为了回答这一点,重要的是考虑一些接受因素,包括当前技术堆栈的背景(如果您正在进行变化,它有意义吗?),难度(学习曲线的实际陡峭),以及外部吸引力(如何在简历中被察觉这个技能集)。这三种因素将在留住目前在公司工作的开发人员并在未来招聘新人的发展方案。

首先,在进行技术选择时,重要的是考虑在公司当前技术堆栈的背景下的选择。如果您选择远离已经使用的语言或框架,为什么选择改变这件事?有没有明确的原因,为什么它不再适用于你,即,它已经过时或不包括您的用例?或者你是改变改变的改变吗?随着技术堆栈的任何新介绍,您应该仔细考虑您在团队成员对您的团队成员的影响:是开发人员对学习开放的东西吗?对他们有趣吗?他们兴奋地回应它,还是一种恐惧的感觉?您还应该仔细考虑各周围的沟通策略,确保它是开放,包容性,有说服力和乐观的。有效的沟通可以在您的团队是否支持您最终制造的决定 - 或者他们是否觉得它们所疏远。

下一个因素,难度,相当简单:技术方便开发商学习,还是有陡峭的学习曲线?文档有多好,社区有多大的是可以帮助回答问题并解释奇怪的错误?对于对象关系映射(ORM)框架中的示例,请考虑像春天一样的东西;在网络上有无休止的资源和论坛,开发人员可以在他们被卡住的任何实例中转向。相比之下,专有内置的内置ORM框架可能几乎没有文档(如果有的话,只有内部),只有少数开发人员可以帮助调试问题并回答问题。这在最好的情况下,可能导致瓶颈,并且在最坏的情况下,如果这些关键的开发商离开公司,就会完全丧失知识。

第三个因素,外部吸引力,主要是雇用新的人才随着时间的推移。就业市场的开发人员通常不会对角色感兴趣,除非相应的技术与他们的兴趣和职业目标有益。因此,重要的是要在制作技术框架选择时考虑新雇用的角度。这也是主观因素,并且可以通过在工作描述和访谈过程中的积极通信来改善。除了新的雇员外,外部吸引力也很重要,因为他们也很重要,因为他们也关心他们的个人成长并希望与在工作市场中保持其竞争价值的技术。如果他们担心他们被支持进入技术角落,他们将不想留下并在公司工作。因此,如果您想在团队表现和人才方面跟上竞争对手,您也希望在技术相关方面与他们保持联系。

速度到市场

建筑决策中需要考虑的另一个重要因素是他们将使您能够为客户提供有形价值的速度。这个决定点可以成为理想主义与实用主义的艰难平衡,完美vs“足够好”。在频谱的一端,您可能会考虑完全搁置的框架(商业或开源)来解决您试图解决的问题,但也许它并不完全涵盖所有边缘案例。另一方面,您可以一直到定制/专有解决方案,您可以确保将更多的用例“完美”,但会提高时间和资金。

如果您在后端框架周围面临这种困境,那么对因素的重要性很重要额外的在它上面开发面向用户的功能需要的时间。围绕这询问的好问题是:有多少面向用户的功能取决于框架,他们对业务有多重要?还有其他事情在他们等待你的团队时可以专注于,或者他们尽快需要支持吗?在所有情况下,需要根据您的特定时间表和用例识别定制和现成软件之间的正确平衡,但如果业务的紧急性高,请记住铭记所证明的重要性至关重要为了维护客户关系而进步。

在决定较慢理想主义的解决方案和更快的务实中,需要考虑一个其他相关方面是您的架构问题如何适合行业的整体背景。您是否在构建特定于贵公司的使命,这部小说可以推动您在竞争对手之前的东西?或者你在建立一些东西支持贵公司的平台,不同的行业将专注于的东西?一个很好的例子在医疗保健行业中:如果您正在为电子医疗记录应用构建文档存储解决方案,请尽可能利用现有技术可以更快地获得所需的支持,这可能是有意义的。以有效的方式存储文档不是完全特定于您的产品甚至是医疗保健的东西,而不是贵公司必然获得信贷的东西。另一方面,如果您正在构建摄取和标准化患者基因组数据的系统 - 对于医疗保健数据行业的某些东西 - 您应该能够从头开始建立更高的架构百分比,即使以成本为代价上市时间较慢。

长期维护

随着时间的推移,维护架构的成本是在制定设计决策时需要考虑的额外因素。这包括预期任何测试困难,员工消耗和未来技术产业的变化。所有类型的设计决策 - 从简单来看,内置于第三方 - 在这三个领域中的每一个都有它们的影响。

关于测试,众所周知,软件公司的输出直接取决于其QA团队的效率。无论您的软件开发人员如何建立产品,无法向客户发布,直到它彻底测试和认证。因此,即使您涵盖了关于接受性和速度的所有基地 - 您有一个伟大的建筑,快速搅拌结果,让开发人员快乐 - 如果软件很难测试,您就不会找到成功。

在员工磨损方面,如果您目前的任何员工离开公司,您将需要考虑技术选择的风险和成本。您的设计需要哪些具体的技能和域知识,如果您的一个员工离开,则会丢失多少价值?这里的风险量可能与您的技术的百分比成比例,这是自定义构建的:您的开发人员构建越多,您就越依赖于它们。失去主题专家的风险可以通过分享一群人的责任来减轻,而不是将他们委派给一个人,但任何新开发人员都雇用替代离去的人仍然需要换取技术堆栈的速度选择了。这重新强调了组织内外开发人员接受者的重要性,重新铺设问题:您能够雇用强大的候选人在设计上工作,他们有多快地克服学习曲线,你能够努力保留它们?

最后,在创建设计时,您将希望使其灵活,以便随着时间的推移进行技术行业的变化。在这里,与上述相反,风险的量与您的技术的百分比成比例地从架子中获得,包括商业许可和开源软件。它肯定太难预测技术趋势在5,10或20年的技术趋势以及许多似乎有前途的技术才能变得不可预测到短暂的时尚。如果您选择去那条路线,您无法期望提供第三方软件的完美选择。而是至少,至少,您可以提前思考关于您的软件设计是否会迫使您与非常具体的技术联系起来。

例如,考虑基于云的文件存储解决方案,例如AWS S3;您的设计是否有任何特定于AWS?或者你可以相对容易地切换到不同的云提供商?作为另一个具体示例,我曾经为一家公司工作过,其整个应用程序在Google Web Toolkit(GWT)上非常重依赖于UI显示和前端层之间的数据传输。整个架构如此直接取决于GWT基础设施,将后端分成独立服务被证明是一个多年来的多团队任务。您的设计越多,您的设计就越容易,您将能够避免陷入过时的平台,并且随着技术的变化,您将能够升级或逐步升级或枢转。

结论

商业世界中的软件架构无法在真空中创建,坚实的技术基础是不足以确保成功。在创建软件架构计划时,重要的是要记住技术的非技术和文化影响,包括接受性,速度到市场,以及长期维护。这些影响将在公司载入多年,影响开发人员,经理,产品所有者,用户,也许甚至高管。在某种程度上,他们代表了公司内的个人遗产。使这些类型的决策是一个令人难以置信的艰巨任务,但如果你要取得成功,必须牢记总体文化和背景。

Abigail Walker.是Ontada的应用软件工程师。


没有发现任何条目

Baidu
map