本文大纲

《我的敏捷软件项目管理实践》

软件项目常见问题

第一章 软件项目管理的挑战

一、产品相关问题

  1. 过度承诺
    商务或销售对客户需求全盘接受,忽视了团队的实际承载能力,只要能签单啥都敢答应。
  2. 缺乏专职产品经理
    团队人手不足人员一再压缩,比如由项目经理兼任,导致产品方向和用户体验未能得到充分重视。
  3. 需求偏差
    开发的功能与用户的实际需求不符,造成资源浪费和用户满意度下降。
  4. 需求变更频繁
    客户需求不断变化,缺乏有效的变更管理机制,容易导致项目范围蔓延。
  5. 交付延迟
    产品不能按时交付,影响市场竞争力和客户信任度。
  6. 质量控制不足
    产品质量难以保证,后期维护成本高昂,增加了企业的运营负担。
  7. 影响分析不足
    头脑灵活的老板和需求多变的客户常说:咱不有某某功能吗改一改复用就行了,哪用得了那么多的时间? 下周一上线!一看表周五下午16点了!

二、项目管理挑战

  1. 项目经理转型难题
    技术背景的项目经理可能缺乏必要的管理技能,99%的时间都投入到编码,管理上时间投入不足,影响团队协作和项目推进。
  2. 管理理论缺失
    缺乏系统化的项目管理理论知识,更多依赖个人经验和直觉进行决策,主导做软件设计时把握不好粒度,各个关键节点验收没有标准能跑就行。
  3. 任务分解粗糙
    需求分析和任务分配不够细致,没有到一块模块、二级模块,没有责任到人,看似大家管实际没人管。
  4. 估算不准确
    上一步任务分解不细估算的工时就不准,对项目工作量的评估过于乐观,未能充分考虑潜在风险和应对需求变更能力不足,导致计划与实际情况脱节。
  5. “完成”的标准低
    团队成没对“完成”没有标准,常把“我基本完成了”挂在嘴边。对于“开发完成了”大家理解不同,程序员认为是编码完成了可以提交测试了,而老板则认为“开发完成了”是可以给交付客户使用了。
  6. 项目周期失控
    项目周期过长,节奏难以把握,前期进展缓慢而后期赶工现象严重。

三、研发过程中的技术债务

  1. 编码规范缺失
    一般不缺乏编码规范,但大多执行不力,影响代码质量和可读性。
  2. 架构设计不合理
    系统结构混乱,互相调用依赖就像蜘蛛网一样,缺乏顶层视角的对资源分组排序的治理规划。
  3. 编程习惯不良
    滥用全局变量、注释匮乏,总希望别人写注释但自己不爱写,由于有“代码Review“不得不写点注释,但只写了4个字“获取列表”。
    命名随意等问题普遍存在,一会叫“产品”一会叫“商品”,按钮这里叫“保存”那里叫“确定”,缺乏统一性。
  4. 不重视核心数据模型
    数据库表结构随着业务与需求快速变化,不断的追加字段,缺少核心数据模型的定义,核心概念混乱。
  5. 安全性能意识淡薄
    忽视安全性和性能优化,可能导致严重的安全隐患和性能瓶颈。
  6. 盲目追随新技术潮流
    团队人手不足还要追求流行的技术栈,不知道越好的东西越贵的道理,反而增加了项目复杂度与成本。

四、测试环节薄弱

  1. 测试启动滞后
    测试活动往往在项目后期才开始,无法及时发现并解决问题。
  2. 测试时间被压缩
    研发进度延迟使得测试时间缩短,最终牺牲了软件产品的质量。
  3. bug跟踪体系不健全
    缺乏完善的缺陷管理系统,问题记录和跟踪方式随意,如通过口头、邮件或即时通讯工具。
  4. 压力测试和安全测试不足
    缺少对系统压力及安全性的充分验证,上线后可能出现重大故障。
  5. 版本控制混乱
    缺乏有效的版本管理和配置管理措施,导致代码库和开发环境混乱。

五、沟通障碍

  1. 需求解释缺失
    产品经理在需求讲解时做不到按“总分总”有层次的带入式讲解,一开头就陷入到具体的细节讲解,没能拉“新人”一把。
    产品经理在项目启动后消失,无人负责需求的澄清和确认。
  2. 责任推诿
    团队成员之间出现问题时互相指责,强调他人责任而非共同解决问题。
  3. 知识传承困难
    单个成员掌握特定领域的知识,没有积累与沉积,没有企业知识库。
  4. 团队协作不佳
    成员间缺乏合作精神,不愿寻求帮助,增加了项目的不确定性。
  5. 内部沟通不畅
    团队成员各自为政,缺少有效的信息共享机制,影响整体工作效率。

六、战略与组织层面的问题

  1. 跟风现象严重
    盲目模仿竞争对手的做法,缺乏独立思考和发展路径。
  2. 缺乏专注力
    项目启动多,但缺乏深入执行,项目一旦上线事情基本就接近尾声了,低估了在运营、推广、培训上的投入。
  3. 创新能力不足
    产品和服务模式缺乏创新,难以在市场上脱颖而出。并且希望基层员工创新,不知道创新的成本是高昂的,不知道基层员工每天低头做具体的事已经被锁死。
  4. 管理层脱离实践
    组织内部等级森严,管理人员远离一线开发工作,决策与实际脱节。
  5. 人才流失严重
    招聘优秀人才困难,同时留不住现有人才,加剧了人才短缺的局面。

以上问题,正是本书要讨论并通过软件项目管理方法论来解决的问题。本书旨在为读者提供一套系统的、实践导向的项目管理解决方案,帮助你在实际工作中有效地应对这些挑战。

具体来说:

  • 强化产品经理角色:通过明确产品经理的角色和职责,确保产品开发始终围绕用户需求展开,避免项目经理兼任多职带来的风险。同时,建立有效的变更管理流程,防止需求无休止地变更。
  • 提升项目管理水平:针对技术背景的项目经理可能缺乏必要的管理技能的情况,本书将介绍如何系统性地学习和应用现代项目管理理论与工具,如何需求调研、如何产品设计、如何组织评审会、如何通过立项锁定资源、如何做软件设计、如何分解任务,如何处理需求变更等方面,使项目经理能够更好地规划、组织、领导和控制项目。
  • 优化研发流程:书中详细探讨了软件开发生命周期模型的重要性及如何制定适合自己团队的开发模型,并提供了具体的实施指南。此外,强调单元测试、如何代码Review 。同时,倡导良好的编程习惯,如编写清晰注释、合理命名变量等,以提高代码质量和可维护性。
  • 加强测试保障机制:为了克服测试环节薄弱的问题,本书将深入讲解如何编写测试用例,如何ShowCase,实现持续集成/持续部署(CI/CD)。通过引入专业的缺陷跟踪工具,如Jira或禅道,确保每个bug都能得到及时有效的处理。
  • 改善沟通协作环境:针对沟通障碍,本书提倡每日站会、迭代回顾会议等敏捷实践,促进团队成员之间的透明交流。同时,强调文档化沟通的重要性,减少对非正式渠道(如即时通讯工具)的依赖,确保信息传递准确无误。
  • 制定长远发展战略:在战略层面,本书鼓励企业培养创新文化,聚焦核心业务领域,避免盲目跟风。通过建立扁平化的组织结构,让管理层更加贴近一线工作,做出更符合实际情况的决策。此外,建立规范的研发流程工作边界清晰,帮助企业吸引并留住高素质的专业人才。

综上所述,本书不仅涵盖了软件项目管理的各个关键方面,还结合了大量的实际案例和最佳实践经验,旨在为读者提供一套切实可行的方法论,助力他们在复杂的软件开发环境中取得成功。无论是初入职场的新手,还是经验丰富的项目经理和技术领导者,都能从中获得有价值的启示和指导。