;

PgMP专家:《项目集管理标准》的演变及第4版的主要变化  

发布时间: 作者:系统管理员 访问量:171

 前期版本核心思想的回顾

  第1版《项目集管理标准》在项目集管理领域提出了项目集治理、相关方管理和收益管理三大主题,伴随这些主题,提出了项目集管理生命周期的定义。项目集生命周期的概念被整合进第1版的起始章节,并在后续的章节中被进一步展开论述。对于项目集管理工作的定义和项目集经理的角色,第1版提出了决定性的“绩效域导向”方法。所谓绩效域导向,就是根据项目集经理的角色定义,认为项目集经理应当在哪些领域完成相关任务(应该做什么事情)的描述方式。

  第2版《项目集管理标准》保留了第1版中关于项目集管理三大主题的一些内容。尽管如此,很多修订内容聚焦于扩展项目集管理生命周期的存在范围。这种方法将项目集管理生命周期置于贯穿整个标准主线的位置。另外,第2版采用这种结构以全面反映PMI项目管理标准《PMBOK指南》的编排和格式,并描述了特定的项目集管理过程组和知识领域。

  第2版同时包含了附加的惯例来反映《PMBOK指南》的框架(包含输入、工具、技术和输出), 这被用来支持项目集管理生命周期和项目集经理的角色。基于这个框架,第2版向项目集经理揭示了一个清晰可见的、基于生命周期的“过程导向”。需要注意的是,尽管第2版所带来的格式和编排上的变化被预期将要从整体上提高《项目集管理标准》的实用性,然而很多PMI刊物收到的评论强烈建议回归到前期版本的绩效域导向模式。来自专业领域的各种文章和其他一些评论同样支持这一观点,并建议对第2版的编排进行修改。

  在与PMI取得共识的前提下,第3版《项目集管理标准》修订委员会被要求复审和考虑从第2版面世以来收到的各种评论和建议。除这些考虑因素之外,项目集管理角色定义研究也支持了项目集管理中绩效域的概念,同时预示了组织内部项目集管理角色的重要转变,添加了战略一致性和生命周期两个新的绩效域,作为原有绩效域(相关方管理、项目集治理和收益管理)的补充。

  有了这些关键发展作为基础,第3版修订委员会仔细地设计了第3版的框架,并按照五个绩效域来设计《项目集管理标准》的编排和布局。我们总结下来就是,第3版具有两个重大特点:①向第1版绩效域导向的回归。②将重点放在项目集经理角色定义中提出的对项目集管理绩效域。

  第4版和第3版《项目集管理标准》之间没有重大变化。引用PMI的结论就是,第4版修订委员会认为第3版和第4版之间的重大改变并不是必需的, 而更新侧重于解决第3版修订中收到的各种评论及主题专家(SME)通过内部评审和修订草稿过程中提交的意见。

  第4版的八大要点

  对比第4版和第3版《项目集管理标准》,笔者归纳总结出八大要点。

  相关定义变化

  第4版项目集的定义是:“以协调方式管理相互关联的项目、子项目集和项目集活动, 以获取分别管理它们不可获得的收益。”这个定义最明显的差异在于去掉了“一组”,其实从定义本身来看,第4版中关联的项目、子项目集和项目集活动本身也包含了多个(从数学的角度看,项目集内至少有两个或者两个以上)项目(或者子项目集或者项目集活动)。因此,这种定义并没有本质上的修改。

  同时,第4版的项目集管理定义是:“应用知识、技能和原则于项目集以实现项目集目标,并获得分别管理项目集组件不能获得的收益和控制。” 对比两个定义,最明显的差异是将第3版的“工具和技术”修改成了“原则”。这个定义将项目集管理的本质突出得十分“露骨”,即相对于单项目管理来说,项目集管理是在单项目管理之上的对项目集内关联项目更高层次的协调管理,它是一种“道”而非“术”。

  描述更加基于原则

  如果稍微夸张一点来说,第4版的每一句话都是原则性的理论、方法和经验的总结,因为这种描述方式也更加贴近PgMP认证考试基于场景式的题目。笔者接触到很多国内外的项目管理朋友,他们在通过PgMP认证考试后,有意或无意地都透露出这样的真实体会,那就是需要通过逐字逐句的方式来认真精读该书。

  扩展风险管理理论

  第4版在第3章战略一致性绩效域扩展了风险管理理论,这对《PMBOK指南》的风险理论知识要求可以说提升了一个层级(笔者认为,在第4版PgMP认证笔试中,有关风险理论的题目还会继续增强)。笔者也非常赞成这样的调整,因为从实际角度看,扩展风险管理的理论和概念对契合项目集的战略一致性非常必要。

  做不做一个项目集除了需要和组织的战略保持一致的基本要求之外,另一关键因素就是要看需要承担什么样的风险,换句话说,承担这样的风险是否值得。同时笔者也认为,实践中,PgMP证书持有者必须掌握和更新通用的风险管理理论,这也契合了认证的PgMP持有者是国际范围内资格认证的定位。

  收益管理变化最小

  第4版唯一调整的内容是体现收益管理绩效域的风险管理。但是,收益管理对于PMP学员来讲是一个比较新的领域。不过,笔者高兴地看到, 《PMBOK指南》第6版已经增加了相关概念的引入和介绍。

  争取相关方的章节布局更加合理

  一是将识别相关方、分析相关方、规划如何争取相关方分为三节来描述。二是通过详细描述相关方的分析和沟通而扩展了信息,这是因为争取相关方的方法与沟通的逻辑关系需要描述得更为贴切,同时也体现出对于理解与项目集有关的组织文化、政治因素的要求,这相应地对项目集交付的收益的冲击或影响至关重要。

  项目集治理更接地气

  项目集治理对于PgMP学员来讲是相对陌生的领域,难度也比较大。第4版在项目集治理绩效域增加了如何设计和裁剪项目集治理的内容,使得该绩效域更接地气,尤其是在项目集(项目)管理办公室和治理委员会两个角色之间,PMI做出了向现实妥协的部分让步。

  众所周知,2016年,PMI发布了新的实践指南——《项目组合、项目集和项目治理:实践指南》,对项目集治理的章节进行了仔细的审查,以体现两个出版物需要保持一致。《项目集管理标准》和《项目组合、项目集和项目治理:实践指南》现在的确体现了角色描述的一致性。

  但我们注意到,《项目组合、项目集和项目治理:实践指南》并没有完全整合全球范围内的项目治理领先实践,在项目集治理绩效域部分,PMI还可以增加更多全球已有最佳实践与最新理论。

  项目集生命周期管理变化最大

  第4版对项目集生命周期管理绩效域进行了重新编写,章节内容完全按照项目集的三个阶段来进行描述,不再按照类似于《PMBOK指南》的知识领域描述方式,使得项目集的生命周期管理也更契合实际。

  去掉冗余

  很多冗余的构件名称和内容在第4版被彻底移除了,如项目集计划(Program Plan)。

  结语

  第4版的修订出版是非常成功的,使得第3 版中绩效域或者章节之间的一致性得到了增强。但是,PMI在增强一致性和移出冗余构件的过程中也出现了些许“硬伤”。例如,在移出项目集指令(Program Mandate)这个构件时,简单地修改成另一构件,这就造成了第3章和第7章之间逻辑上值得商榷的问题。

  针对该问题,笔者曾经向第4版修订委员会的克里斯汀•维特罗(Kristin Vitello)反映了该问题,他也认为这里的修改是有问题的,但第4版已经“封版”,再次修改已经来不及。不过, 读者也不必担心,因为PMI可能在认证考试中修订相关的考试方法。

  总之, PMI是不断吸收新的理论、经验和知识的典范,《项目集管理标准》演进的过程也是项目管理从业者不断进步的过程。


最新发布

    FreeMarker template error (DEBUG mode; use RETHROW in production!): For "#list" list source: Expected a sequence or collection, but this has evaluated to an extended_hash+string (com.jmis.contentmng.pojo.Content wrapped into f.e.b.StringModel): ==> [in template "jmis/pm/article/detail.html" at line 185, column 13] ---- FTL stack trace ("~" means nesting-related): - Failed at: #list content as chann [in template "jmis/pm/article/detail.html" at line 185, column 6] - Reached through: @cm_content_list count="5" titleLen="... [in template "jmis/pm/article/detail.html" at line 179, column 8] ---- Java stack trace (for programmers): ---- freemarker.core.NonSequenceOrCollectionException: [... Exception message was already printed; see it above ...] at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:285) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:200) at freemarker.core.Environment.visitIteratorBlock(Environment.java:595) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:81) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:67) at freemarker.core.Environment.visit(Environment.java:326) at freemarker.core.Environment.visit(Environment.java:368) at freemarker.core.Environment$NestedElementTemplateDirectiveBody.render(Environment.java:2727) at com.jmis.contentmng.action.directive.abs.TemplateDirectiveUtil.ProcessTemplate(TemplateDirectiveUtil.java:316) at com.jmis.contentmng.action.directive.ContentListDirective.execute(ContentListDirective.java:254) at freemarker.core.Environment.visit(Environment.java:426) at freemarker.core.UnifiedCall.accept(UnifiedCall.java:101) at freemarker.core.Environment.visit(Environment.java:326) at freemarker.core.Environment.visit(Environment.java:332) at freemarker.core.Environment.process(Environment.java:305) at freemarker.template.Template.process(Template.java:384) at com.jmis.contentmng.common.web.springmvc.SimpleFreeMarkerView.renderMergedTemplateModel(SimpleFreeMarkerView.java:153) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:209) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:244) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.frame.core.cache.PageEhCacheFilter.doFilter(PageEhCacheFilter.java:102) at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.frame.core.web.filter.XssFilter.doFilter(XssFilter.java:20) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)