架构师成长之路(践行七)——软件项目管理金三角模型

413 阅读6分钟

前言

架构师的成长,除了技术的修炼之外,还要兼顾到研发团队的实际能力、成本等日常的工作要素,这是最近一年体会最深的地方。这跟建筑设计师有很大的相似之处,建筑设计师的设计,首先是需要跟客户沟通客户的需求,了解其关注点,融入到自己的设计中,此外,还会考虑实际的耗材成本等其他因素,如果只是停留在追求艺术设计之上,其实用性可能会大打折扣。互联网行业也是一样,我眼中的架构师,应该是具备总舵能力的,能够带领研发团队一起设计搭建好软硬件兼有的航母,这样才能够走的更为长远,虽然自己目前只是一只菜鸟,但是,有了目标,就会去努力追求,付诸于实践行动。

在项目设计的过程中,我基本上是摸着石头过河的状态,有好多都是自己在实践中自己摸索,总结下来的经验自己看起来并没有太多的体系,这次有幸听到软件项目管理金三角模型,眼前突然一亮,牛人就是牛人,概括的很精辟,很是敬佩。

软件项目管理金三角模型的学习与实践

1、软件项目管理金三角模型

学过PMP相关知识的人,应该很了解软件项目管理中的十大要素,我也是业余时间看过一些,但是还没有完整的学完,印象最深的是项目的成本、质量、时间管控、项目边界等,刚开始学习的时候,知道这些体系理论是很重要的,但是并没有很大的切身体会,因此对于这些理论的理解也就停留在了知识理解层面,并没有深入骨髓去有意识的运行,这是我需要提升的地方;同时,自己发现原先的架构师的定位意识是有所偏差的,认为架构师只要将切合实际的架构设计好就行了,并不需要太多的关注团队的实际能力,实际开发成本等因素,这些应该是项目经理或者说产品经理要去关注的事情,其实不然,对于这些因素的提前介入,可以迅速知道自己设计方案的缺陷(不包括技术方面),而且,有时候两种技术方案都可行的情况下,如何抉择,这些因素都会影响最终的决策,因此,即使是架构师,也应该关注项目的整体流向,而不是只关注技术层面的事情,也许会片面,但是从我的角度看,架构师应该具备全面的职业素养,这是除了技术之外自己具备竞争力体现的一个关键点。

回到正题,软件项目管理金三角模型指的是软件成本、软件范围、软件时间三者之间的协作模型,他们各自是三角形的三个顶点,而三角形构成的面就是我们的核心关注点--软件质量。软件工程的目标就是要构建并维护高质量的软件,因此,这个金三角的关系是很容易理解的,可能大家会觉得这个是很简单的模型,但是真正实践起来并没有那么简单。

2、相关的实践感悟

(1)项目中遇到临时加入的需求

经常会遇到产品经理临时加入某个需求,对于这种情况,我一般是看需求的复杂度与实现工时,对于那些复杂耗时的需求,我会给出具体的工作评估并跟产品经理沟通,如果能接受延期,或者加人,那么是可以实现。用这个模型抽象出来,就是要保证软件质量这个面,三条边中,软件范围这条边有了延伸,那么相应的成本和时间这两条边就需要做相应的调整,不然,会指出来的软件质量就会有所变形,这样一想,其实有些理论在实践中已经运用了,只是自己并没有意识到这一点,或者说没有高人能够总结的那么精辟,但是有了体系之后,这在以后的工作中有了方法论,至少在石头中见到了金子,知道沿着这个方向去延伸运用了。

(2)项目要压缩时间

项目或者产品在研发的过程中,有时候会很怕市场部的反复,可能原先定了三个月的计划因为市场的变动,需要压缩到两个月,但是唯一不变的是变化,不需要去抱怨,如何高效的应对是我们应该修炼的能力,因为你改变不了世界,世界就会改变你,哈哈。现在想想,用这个金三角模型去分析的话,那就是时间这条边发生了变化,那么软件范围、软件成本这块都需要做相应的变动,才能保证软件质量处于比较稳定的状态。哇哦,是不是发现了新大陆呢?于是乎,经常是产品经理在市场销售与架构师(或者研发经理)之间进行周旋,最终敲定的基本上是减少不必要的功能研发,增加人员工时的投入,也挺有意思的。

(3)瀑布模型 or 敏捷开发下金三角的平衡

互联网软件行业,大家对瀑布模型、敏捷开发或多或少都会有所接触,尤其是在这十年互联网迅速崛起的时代中,敏捷开发更是得到了广泛的应用。这里不分析这两者,只是看看金三角模型在这两种模式下如何做平衡的。 瀑布模型下,有着严格的流程,从需求、设计、研发、测试、交付都有自己的角色职责,一般在开发环节是不接受需求的变更的,也就是金三角中软件的范围是固定的,时间和成本是可变的,因此,一旦在研发中发现不能如期保证质量,就会延期(时间)或者是加人(成本)。

敏捷开发下,我们应该都有版本迭代的意识,而且这是快速迭代的,一般是两周一个迭代,这还是不算快的敏捷迭代。因此,在这种开发模式下,金三角模式中不变的是时间+成本,唯一变化的是软件范围。这样一想,就能理解为什么敏捷教练会灌输的那些理论了。一般一个sprint开始都会做一个计划确认,团队成员也是固定的,然后在这个sprint结束时,会总结一下看看哪些任务没有完成,这些就会放到下一个sprint中,在不断迭代中螺旋式发展。

总结

在架构师成长之路上行走的我,有时候也会疲惫,但是当发现自己理论+实践不断丰富的时候,又会有种成就感,且并且珍惜吧。