《软件管理沉思录》 - 读书笔记
《软件管理沉思录》是一本介绍SEI项目管理、人际沟通和团队协作的要诀。不论读者是软件开发者抑或是管理者,都能够从这本书中挖掘到价值。
本书分为四个部分,分别介绍了项目管理,团队管理,与上级沟通和自我管理。
在关于项目管理的部分中,作者强调了软件质量的重要性。作者指出一条被广为认同的公理:一个软件系统是不可能没有缺陷的。一个小型的软件系统尚可能存在着不易察觉的缺陷,一个涉及到用户或者极为复杂的软件系统更是难以根除缺陷。所以提高软件质量,减少软件的不稳定性对于软件的开发维护人员是一个巨大的挑战。
针对这一问题,我们可以使用8个步骤规则,来控制软件质量:确立质量控制的策略、目标和计划;正确训练、指导和支持开发人员及其团队;确立和维护软件工程过程的统计控制;审查、检查并评估所有的产品制品;评估所有缺陷,加以更正并用以识别、纠正和预防其他类似问题;确立和维护配置管理和变更控制系统;持续改进开发过程。这八步措施被越来越多的证据证明是有效的,且能帮助节约时间和金钱。软件质量的控制从分析需求开始,只有得到了清晰的需求,才可能开发出高质量的程序。开发中的软件缺陷是影响软件质量的一个重要因素,它指的是程序中的错误,简单的错误可能导致毁灭性的缺陷。缺陷往往是潜藏在系统中的,当缺陷暴露出来,引发了问题,产生了影响就成了漏洞。
接下来讨论了高质量项目至关重要的一点——计划,其实制定合理有效的计划这一观念贯穿了本书始终,不论是开发人员个人在进行软件开发之前需要做详细的计划安排,团队合作之前也需要制定成员们都认可的计划,这是形成高效团队的条件之一。一份合格的产品计划应当包括三项内容:将要生产的产品规格和重要的性能指标;估算工作所需的时间;进度预测。对于重要的项目,管理者要做的第一件事就是组织一个计划和提案小组,并且制订出一个总体计划,计划的五条基本要求是:易于理解、清晰明白、详细具体、精确缜密、准确无误,如果你不能使计划准确无误,那就常做计划。
第二部分主要讲团队,团队是指有着共同不表的一群人。本书作者修改了戴尔的定义来描述TSP团队:一支团队至少要有两名成员;所有成员都是为了同一目标而工作;每位成员至少扮演一个特定的角色;完成任务要求团队成员之间相互依赖。在一支高效的团队中,团队成员联合后的集体才智使得团队获得更全面的知识。本书中列出了团队遇到的七个常见问题:无效的领导、缺乏妥协或合作、缺少参与、拖延和缺乏信心、低劣的质量、功能蔓延、无效的对等评估。因此最常见的导致项目团队合作失败的原因有:资源不足、领导问题、不可能的目标、士气问题。任何一个都会导致一支团队失效甚至失败,并且这些问题通常一起发生。一支高效的项目团队被称为凝胶型团队,当团队成员集中在一个清晰的目标上时,就会发现有中神奇的力量,每个成员的表现都似乎能超越自身的能力。这样的团队能为成员带来工作中的快乐,所有成员能对团队全身心投入。一个高效团队常常有四个条件:凝聚力、有挑战性的目标、目标追踪和反馈、共同的工作架构。一个团队是随着时间成长的,在团队形成凝聚力的过程中,各成员会逐渐接受一系列共同的团队目标并投入巨大的实现热情。在创建凝胶型团队的过程中,交流至关重要。对于团队来说,交流最重要的三要素是:透明、倾听和协商。随着团队成立,它就进入了一个自然的生命周期,逐步经历组建、动荡和规范等阶段。在这个过程中努力变成一支高效的团队。伯恩把群体分为三种类型:工作型群体专心于工作,过程型群体专注于内部的动力学,对抗型群体则与外部威胁作斗争。不同的团队可以采用不同的工作风格。康斯坦丁把团队行为界定了四种类型:开放型群体、随意型群体、封闭型群体和同步型群体。但是现实的团队风格往往是表现为混合的形式。自主指导型团队对于任何类型的工作都是有效的,但这种团队对于完成复杂、创新性的工作尤其重要。本书提出了5条自主指导型团队的典型特征:具有团队感和归属感;共同对团队目标做出承诺;对过程和计划的主人翁以适;具有制订计划的技巧和执行计划的纪律;追求卓越。
对于团队成员来说,一个优秀的成员应当会做任何需要做的事,并且应当作出负责人的承诺并努力实现。目标对于个人十分有用,它明确地提供了努力的目的,暗示了当前在过程中所处的位置。对于团队来说,需要一个所有成员都认可的共同目标,才能提高团队的凝聚力。项目团队提供的不仅仅是组织架构,还提供了一系列技巧和视角。团队只有恰当利用各个成员的知识和经验才能使每个成员都变成有力的资源。在团队交流中,不同的成员有不同的表现,组织者应当维持讨论的秩序和理性。要想让团队运行顺畅,每一位成员都应当奉献出他所知道的一切。在遇到麻烦的时候,团队的成员应当请求并接受帮助。本书中列举了团队创建的义务:接受并扮演一个团队中的角色、确定并努力实现团队目标、建立和维护团队。团队的创建和团队合作一样需要所有成员的主动参与。优秀的谈判者往往采用原则式谈判,可以避免立场的两极分化。本文在之前提到团队一定要做到共鸣型或主动型倾听。在原则式谈判中,基础是认识到立场只是满足利益的一种方式,应当将注意力集中在利益而不是立场上。经验表明,团队中如果有一个人不务正业的话,就会影响到其他所有人的表现,可以剔除不履行职责的团队成员来提升团队的整体表现。团队成员的一项重要责任是寻求帮助,很多软件工程师习惯各自解决难题,但其实及时寻求帮助能够很大程度上缩短解决问题需要的时间。同样团队成员除了自己的正式角色,还应当承担起团队公民的责任,帮助其他的团队成员解决问题。提供有效支持的关键是帮助团队伙伴相信他们自己的能力。
然后是关于领导力,领导力事关成败,团队的做事方式很大程度上取决于他们与领导者进行协调的方式。三条最重要的激励因素是恐惧、贪婪和承诺,对于开发人员等从事创造性工作的人而言,激励因素还涉及技术挑战。领导者可以利用这三个因素推动团队的工作,但是也应当适度,确保可以引发需要的反应。激励的程度取决于做出承诺的方式,承诺的三个要素是协商、约定和执行。可信的团队承诺有四条要求:自愿、可见、可信、得到承诺,这四个要求构成了作出承诺的基础。为了在长期富有挑战性的项目中信守承诺,需要在任务过程中以某种方式定期强化承诺。为了及时提供反馈,可以把总体承诺划分为若干标识进展的里程碑。领导力的挑战之一是帮助团队成员设置中间目标,短期的目标可以制造紧迫感。团队中往往会有不是非常积极参与的成员,为了让他们参与进来,可以采取的技巧有:提问、装聋作哑、频繁地检查约定、感受没有说出的疑虑或不同意见、不要让某个人完全控制讨论、管理专家、指导团队领导者、关注事实和数据、不允许有旁观者。当团队处于动荡阶段,辅导的关键是让团队成员发泄他们的怒气和愤懑,然后着手解决他们的焦虑。管理团队时个部门的管理者应当从一开始就参与其中,充分考虑他们的观点。另外,这样还可以使管理者从已提出的问题中发现一些重要的新议题。构建管理团队的最后一步使鼓励管理团队成员共同工作。当管理团队以一种公开、坦诚的方式在一起工作时,其结果一定时最佳的。理性管理的四个要素:确定目标、计划和审查、评估和追踪、预测和纠正。他们彼此相关,都是高效管理风格所必需的。
对于工程师如何与管理者相处,作者提到如果项目从一开始就遇到麻烦,工程师必须站稳立场,让管理者相信你知道项目会花费多长时间。当制定一份计划确定日期之后,就可以告诉管理者真正的交付期限,据理力争。我们的工作任务应当是让团队聚焦于优先级最高的事情。在面对管理者的压力时,我们应当制定一个可以让管理者相信整个团队正在努力实现的富有挑战性的计划。不过,制定一个合理详细的计划是掌控项目的第一步,接下来必须保持计划的更新。同时我们需要按照计划执行,让管理者了解情况。自主指导型团队面对管理层的控制时,应当制定详细的计划并与管理者商谈日程进度,而不仅仅是做那些要求做的事。默默为每一项变更制定调整计划可以有效应对管理者的控制。当一个项目注定失败时,如果不想放弃,我们应当试图解决问题。由于必须与管理者打交道,我们应当从他们的角度想想我们能做什么。在推行改进时我们需要管理者的支持才能让整个组织结构的人们改变工作方式。这时我们应当考虑三个问题:为什么想要改变、需要从哪些管理者那里取得支持、管理者为什么要支持?如果引起了高层管理者的关注,我们就需要给出战略性理由。这时我们要准备:阐明提议、理解当前的业务环境、找出关键点、作一次改进合理性检查、引入原型、前期引入成本、后期维护成本、过程改进的收益、有关收益的事实、计算节约的数额、衡量收益其他收益。突破管理者抵制的方式是证明当前面临的问题无法通过短期的权宜之计来解决,必须具备战略目光,可以采取的基本措施:让战略性改进活动具备战术吸引力,从小的、战术性努力开始,逐渐扩展成战略性改进方案。
在注意“管理”你的领导的同时,我们也需要学会管理自己,把握主动,这时需要分成两步:1. 真正掌控自己的工作;2. 说服管理者同意由你管理自己。本书中列举了改进工作的步骤:确定质量目标、衡量产品质量、理解过程、调整过程、应用调整后的结果、衡量结果、把结果与目标进行比较、循环并不断改进。我们也要学会利用支持人员,学会计划工作,并促使你的团队伙伴和项目负责人也开始作计划。按计划完成工作的一个隐含好处是执行计划事实上会改变你的行为。我们需要学会负责任、信守承诺、执着追求卓越。
最后,关于领导,作者讨论了作为领导,我们的行为方式会影响整个团队,因此我们需要为团队树立榜样。领导力低下的症状有:高层管理者在思考问题时以自我为中心,眼界短视狭隘;官僚惰性;管理者没有能力及时做出有效的决策;过犹不及。管理是利用资源达到某种结果,而领导则是激励人们实现某个目标。管理者和领导者之间最主要的区别是管理者命令员工服从指令,领导者则是带领他们完成任务。领导力是高度个人化的,它需要通过个人魅力来赢得。让员工对目标产生热情,并说服他们追随你一同取实现是一种内在激励或变革型领导。