软件工程之美
宝玉
Groupon资深工程师,微软最有价值专家
立即订阅
6706 人已学习
课程目录
已完结 54 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 你为什么应该学好软件工程?
免费
特别放送 | 从软件工程的角度解读任正非的新年公开信
学习攻略 | 怎样学好软件工程?
基础理论 (9讲)
01 | 到底应该怎样理解软件工程?
02 | 工程思维:把每件事都当作一个项目来推进
03 | 瀑布模型:像工厂流水线一样把软件开发分层化
04 | 瀑布模型之外,还有哪些开发模型?
05 | 敏捷开发到底是想解决什么问题?
06 | 大厂都在用哪些敏捷方法?(上)
07 | 大厂都在用哪些敏捷方法?(下)
08 | 怎样平衡软件质量与时间成本范围的关系?
“一问一答”第1期 | 30个软件开发常见问题解决策略
项目规划篇 (8讲)
09 | 为什么软件工程项目普遍不重视可行性分析?
10 | 如果你想技术转管理,先来试试管好一个项目
11 | 项目计划:代码未动,计划先行
12 | 流程和规范:红绿灯不是约束,而是用来提高效率
13 | 白天开会,加班写代码的节奏怎么破?
14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决
15 | 风险管理:不能盲目乐观,凡事都应该有B计划
16 | 怎样才能写好项目文档?
需求分析篇 (5讲)
17 | 需求分析到底要分析什么?怎么分析?
18 | 原型设计:如何用最小的代价完成产品特性?
19 | 作为程序员,你应该有产品意识
20 | 如何应对让人头疼的需求变更问题?
“一问一答”第2期 | 30个软件开发常见问题解决策略
系统设计篇 (4讲)
21 | 架构设计:普通程序员也能实现复杂系统?
22 | 如何为项目做好技术选型?
23 | 架构师:不想当架构师的程序员不是好程序员
24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?
开发编码篇 (7讲)
25 | 有哪些方法可以提高开发效率?
26 | 持续交付:如何做到随时发布新版本到生产环境?
27 | 软件工程师的核心竞争力是什么?(上)
28 | 软件工程师的核心竞争力是什么?(下)
29 | 自动化测试:如何把Bug杀死在摇篮里?
30 | 用好源代码管理工具,让你的协作更高效
“一问一答”第3期 | 18个软件开发常见问题解决策略
软件测试篇 (4讲)
31 | 软件测试要为产品质量负责吗?
32 | 软件测试:什么样的公司需要专职测试?
33 | 测试工具:为什么不应该通过QQ/微信/邮件报Bug?
34 | 账号密码泄漏成灾,应该怎样预防?
运行维护篇 (6讲)
35 | 版本发布:软件上线只是新的开始
36 | DevOps工程师到底要做什么事情?
37 | 遇到线上故障,你和高手的差距在哪里?
38 | 日志管理:如何借助工具快速发现和定位产品问题 ?
39 | 项目总结:做好项目复盘,把经验变成能力
“一问一答”第4期 | 14个软件开发常见问题解决策略
经典案例解析篇 (7讲)
40 | 最佳实践:小团队如何应用软件工程?
41 | 为什么程序员的业余项目大多都死了?
42 | 反面案例:盘点那些失败的软件项目
43 | 以VS Code为例,看大型开源项目是如何应用软件工程的?
44 | 微软、谷歌、阿里巴巴等大厂是怎样应用软件工程的?
45 | 从软件工程的角度看微服务、云计算、人工智能这些新技术
“一问一答”第5期(内含彩蛋) | 22个软件开发常见问题解决策略
结束语 (1讲)
结束语 | 万事皆项目,软件工程无处不在
软件工程之美
登录|注册

11 | 项目计划:代码未动,计划先行

宝玉 2019-03-21
你好,我是宝玉,我今天想与你聊一聊“项目计划”的问题。
若干年前,我接手一个陷入困境的项目,当时的项目经理刚从技术高手转型项目管理,还是没有摆脱技术思维,项目没有什么计划。
他把关键模块分给了自己开发,同时还要兼顾项目管理,导致自己的工作遇到瓶颈,其他人的进度也受影响,大家加班加点也没什么进展,士气低落。
我接手后,第一件事是重新制定项目计划,在排任务时,避免了对某个人的过度依赖,设置了几个关键里程碑。我还特地把第一个里程碑设置的相对容易一点,只需要运行核心功能。
这样大家重整旗鼓,很快就完成了第一个里程碑。达到第一个里程碑的目标后,团队成员很受鼓舞,士气很快就上来了,后面按照新的计划,并没有太多加班加点,就完成了一个个的里程碑,最后顺利完成项目。
你看,如果没有计划,你的项目可能会陷入一种无序和混乱中。
计划,就像我们出行用的导航,你可以清楚地看到项目整体的安排,同时它还时刻提醒我们目标是什么,不要偏离方向。
执行计划的项目成员,就像使用导航的司机,可以知道什么时间做什么事情,保证任务得以执行。执行计划的过程,就像我们沿着导航前进,可以了解是不是项目过程中出现了偏差,及时的调整。

做技术的就不用关心计划吗?

取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件工程之美》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(34)

  • Winder
    宝哥,能讲一下你在极客上开这个课题的计划吗?如何以面向工程的思想完成这个课题😁

    作者回复: 其实你知道吗?在这个项目中,我不是项目经理,我其实是程序员,项目经理是编辑,她定的计划,而且不同意我放出来😄

    而且她还活学活用,基于敏捷的写作模式,一个Sprint一个Sprint反复迭代,你看到的每一个发布版本可能已经迭代修改过好多版了!

    2019-03-21
    19
  • MiracleWong
    #
    根据自己的经验写一下:
    1. 很多的时候,我们不愿意指定计划的原因,简单的说是“懒”,深层次的是不愿意“思考”,因为这需要做很多准备工作,并消耗很脑细胞,是对自己认知上的一个考验。再往深处挖则是“不愿意承担责任”(工作中由其会遇到类似的同事,我拿多少钱就做多少工作,偶尔自己也会成为这种人),因为要介入制定计划、以及后续的调整,就觉得这不是应该是自己的工作量。
    2. 就是制定计划的颗粒度粗细的问题。自己经常会遇到类似的困扰,就是一次计划,分解的太过详细,导致行动的时候因为繁琐反而拖延或直接不做。(也明白这是一种心理上的自我欺骗,认为做了计划就等于行动了,类似于买个课程就等于学习了,收藏了就等于看了)这就会导致下一次的计划时遭到“反噬”——上一次那么详细也没什么用,还不是不做或者稍微写一下呢。等到自己没有什么目标或者虚耗摸鱼时,有记起“详细计划”的好,一次次的循环。
    3. 对于宝玉老师说的是否有指定计划的习惯,我经常是每个月的最后两天,指定下周的目标(类似工作计划)。将目标和自己的工作生活学习联系起来并进行分解,分散到每个月的四4周里。每周做个小结,月底再做月总结和下月目标。目前还是在尝试练习中,在逐步的形成自己做目标和总结的固定模板,省去部分重复性的工作。

    一点自己的经验,第一次写评论,希望得到宝玉老师的指正。

    作者回复: 谢谢分享和补充,讲的特别好,尤其是那句心理欺骗的,说到心坎里面了,我也常犯这样的错误!

    建议计划一开始不要太细,先粗一点,定好里程碑,然后进入下一个阶段前细化,细化时拉上参与计划的人一起。这部分建议你看一下我给一路向北的留言回复。

    另外个人计划我觉得你已经做的很好了👍

    我建议你也可以多考虑一些长远的规划,例如五年十年的,然后针对这些大目标设置几个大的里程碑,这样再定细节的计划会更有方向感。

    2019-03-22
    11
  • hua168
    很感谢老师,很负责,每个问题都认真回答,目前是我购买这么多专栏最负责的一位没有之一,敬业呀👍,遇到负责的大牛老师就相当遇到贵人了!

    作者回复: 不用客气,有些问题也只是一家之言,你自己的情况我其实了解不多,建议你还是自己多想想,多问问你的朋友和领导们,他们可能能给出更具体的意见。

    2019-03-21
    8
  • 舒偌一
    没计划,怎么知道变化。
    没计划,怎么知道进度要求。
    没计划,怎么知道范围要求。
    没计划,怎么知道质量要求。
    没计划,怎么知道资源要求。

    作者回复: 这一段总结的太好了👍

    2019-03-21
    5
  • tcny
    如果因为开发不紧不慢耽误了时间,如何处理呢。应该设置什么样的奖惩制度呢?

    作者回复: 这是个好问题!

    计划恰恰就是为了预防类似于开发不紧不慢耽误了时间的问题。

    具体例子,一个模块,正常估算(开发和PM都认可)需要5天,但是如果你的计划粒度是5天,那么你到最后一天才能知道是不是会延迟,这时候补救已经晚了。

    如果你能把粒度设置到半天一天,那么第二或第三天你大概就能知道进度是不是有问题,然后马上作出调整,要么加班,要么找人帮忙,要么换人,要么改计划。这样才可以做到防患未然!

    至于奖惩制度,只是手段,而不是目的!

    2019-03-22
    4
  • 纯洁的憎恶
    因为水平实在有限,且应变能力太差,我做事前一定要做周密的计划。这反而使得我在大多数重要事情上表现不算太糟。我理解计划的意义是把事情的完整过程详细推演几遍,做到进展阶段、关键难点、资源分配、潜在风险、先期准备了然于胸。即使计划赶不上变化,也能应对自如,不会惊慌失措。凡事欲则立不预则废。

    任务分解——WBS;
    估算时间——广泛参与消除偏差+留出余量;
    安排任务路径——甘特图捋关系+里程碑控制进度;
    跟踪调整——信息共享充分沟通掌握计划进展+出现变化及时调整;

    制定计划最好能让项目相关各方充分参与,这样计划更可行,偏差低,结果更可控、可预期。但我的经历却是需求、开发、运营、用户等角色几乎不参与制定计划,就连需求分析、功能设计、测试、验收也以工作忙为借口很少介入。项目管理人员主动拉他们,也遭到厌恶与不配合。在观念与体制不支持的环境里,如何能更好的调动各方充分参与、支持项目呢?

    作者回复: 你这种性质的单位我确实没经历过,缺少经验。

    不过我可以帮你从另一个角度分析下,就是如果我不愿意参与计划可能有这些方面原因:
    1. 跟我利益不相关,做了没好处,不做没损失
    2. 你已经做的够好够细了,没什么好发挥的
    3. 就算参与了提了想法和意见也没用,最后还是项目经理说的算,那我还掺和个啥劲

    所以你可以看看能不能让这事变成一个跟大家利益相关的事,跟绩效考评啥的扯上关系,必要的话拉上领导狐假虎威一番,然后拉他们参与时不用太细,让他们有机会参与制定,制定时能平衡好他们利益关系。

    尤其是里程碑的确定,我觉得应该是和大部分人利益相关的,至少这个点得让他们参与进去。

    一点浅见,供参考

    2019-03-21
    4
  • hua168
    我是做运维的,17年底开始计划学java开发,没有做过项目,以往习惯每年年底订明年目标计划。
    订好计划之后再分月-->周(上班及周末),周末看视频学习,周1-5有时间学练习视频讲的内容。

    因为自学有些不懂,当过一段时间突然有想感悟又跑到从头看,虽然慢,但觉得还是在前进着...

    订的长期计划就是几前年订目标10k/月,执行步骤:
    1. 网管:3k-3.5k,再订收入5k,发现网络工程师可以
    2. 网络工程师:培训CCNA,让人指导自学CCNP,面试达5k,因CCIE说网络没落转运维
    3. win运维:6k,主要是运维公司官网用的是asp.net,再订目标10k,听说linux运维可以,转学linux,辞职学3个月,每天10小时
    4. linux运维:达到目标10k,主要是运维公司官网


    5.目前:17年底开始学java开发,打算1-1.5年,边运维学python,打算升运维开发


    出现了中年危机,学习中带迷茫...好像自己什么都不精,中年失业还能找到工作吗?中年的出路在哪?

    作者回复: 能理解,迷茫在于对于方向的不明确,以及未来的不确定。

    建议在方向上先选准了,想想5年后做什么10年后做什么,而不仅仅是一年后做什么。

    如果是5年后还想继续运维,那么想做到什么高度?是不是要去大公司锻炼一下?

    如果5年后是想做管理,那么是不是得准备学习一些专业知识,是不是让自己尽早有机会管人?

    想清楚未来做什么,给自己设一些里程碑,一步一个脚印,应该就没那么迷茫了。

    一点建议,仅供参考:)

    2019-03-21
    4
  • 青石
    拿自己的职业规划来说,刚毕业时制定的拍脑门计划:IT行业拼到35岁,达不到预期转行(这辈子就这样,轻轻松松过小日子算了)。目前整体目标没变,年龄32岁,延迟到38-40岁之间。

    工作经历:运维工程师5年,技术负责人角色4年带了3个项目(从头至尾),部门经理+技术负责半年多。

    目前困惑:
    1. 算是步入管理岗,但对管理岗位总有些力不从心、迷茫,找不到切入点。之前工程师阶段有位老大哥,对我影响很深,现在多数做事风格也与他很像,也许因为不懂,所以照猫画虎。
    2. 招聘软件上很多岗位要求,管理岗和技术岗都算,对coding能力都有一定要求,导致有想学各种语言的冲动,总觉得自己欠缺的太多,不愿走出舒适区。
    3. 运维出身,很多方面都有涉及,但不成体系,比方说Linux操作系统原理、编码(Python)、架构、项目管理,哪些都懂一些,但知识零散。

    短期内制定的计划:
    1. 因为运维经历最长,从Linux(操作系统原理)和Python入手纵向发展,一直认为基础是上层建筑的基石。
    2. 保持横向发展,将原来的零散知识聚集起来,形成知识体系。
    3. 根据1、2步骤制定学习计划,每天不少于2小时。
    4. 现有管理机会,多学多用,不断试错,找出适合自己的岗位以及工作方式,重新定位自己。

    作者回复: 👍总结的非常深入

    1. 管理,还是有很多理论知识在里面的,建议可以系统学习一下软件工程和软件项目管理的知识

    2. 做技术管理,有一点coding能力还是好一点,一个便于沟通,另一个便于对方向的把握。也不需要特别深入,看几本相关语言的基础书;平时多Review同事代码;多看一些业界好的实践,看是否可以借鉴到工作中。

    3. 如果你现在做技术管理,如果不是偏运维的管理,倒建议你不如花点时间补一点编程和管理方面的理论知识。跟木桶原理一样,先弥补短板。

    4. 很多时候不需要太多试错,只要有理论知识指导实践,就不会偏差太多。

    2019-03-24
    3
  • 小伟
    计划确实很重要,即使变化了,但是有个基准,也能帮助在项目复盘的时候知道问题出在哪儿,下次可以做的更好。

    另外,项目排期一定要和其他人达成共识,并有专人去确认进度,有文档记录。

    目前项目中遇到了技术性问题,导致里程碑delay一个月,但是老大也不太着急,自己感觉阻塞在这儿了。。。。

    作者回复: 遇到阻塞了要让老板知道,让老板提供帮助,不要一个人耗着,不然难有进展。

    另外也可以尝试项目之外寻求帮助,例如搜索引擎、技术论坛、stackoverflow,还有像github上找找同类项目。

    2019-03-23
    3
  • 一路向北
    以前觉得计划很有用,然后在计划上花了很多时间,最后实际项目也没跟上计划。很大的一个原因是对项目的分解不够,粒度太粗,导致预估的时间和实际的时间差距太大。
    慢慢的就不做细的计划了,没有计划之后,发现做项目更加时间不可控。因为没有了小时间节点,没有deadline,就没有方向,没了压力。直到大的时间点到了之后,发现离目标差距太大。
    计划还是要有,而且还需要分解任务做的到位,各个节点清晰,可执行,可检验。并且计划需要得到团队成员的认可。
    计划是否也会有一个迭代的过程呢?

    作者回复: 谢谢分享
    计划一定是要有的,不然就完全不可控了
    计划一定是个迭代的过程,计划也是个粗到细的过程。
    一开始不建议特别细的计划,整体粗一点,定好大的时间节点,也就是里程碑,然后对于下一阶段的计划细化。
    细化过程中要拉上具体参与的人一起制定,这样结果才科学也不会导致抵触。
    里程碑定了后不要轻易变,不然就失去了DeadLine的意义,即使变也不能过于随意和频繁。

    2019-03-22
    3
  • Know-nothing的Duckling
    有个疑问,如果是采用敏捷方法的项目,项目计划是否应该就是迭代计划?在这种情况下WBS的结构其实就是一轮接着一轮的规划-分析-编码-测试-集成发布-与敏捷配套的一系列总结?每一轮迭代的成果就是项目的里程碑?

    作者回复: 敏捷的项目计划确实有些不一样,WBS分解后会变成backlog,backlog的项会被打分(参考扑克牌打分),根据分数大致可以算出来需要多少Sprint,因为敏捷开发磨合好后,每个Sprint能做的任务分数大致相当。算出来多少Sprint就能大概知道需要多少时间。

    通常里程碑不会那么密集的,一般会几个Sprint一个里程碑。

    2019-03-22
    3
  • alva_xu
    补充一下,对于项目计划,还需要考虑计划发布的有效性,也就是,计划要及时发布到相关干系人。

    作者回复: 谢谢补充🙏
    让所有干系人参与计划,知道计划情况是很重要的。
    另外一般不是直接参与项目但利益相关的,比如客户、管理层,他们更关注里程碑

    2019-03-21
    3
  • hua168
    大专学历,英语不怎么好,中年了去大厂难度大,所以打算在中小公司。

    打算做技术管理,咨询了老大和前老大,他们都说要求懂开发做过项目管理,所以才选学java,主要考虑:
    1. 成熟,教程多,传统
    2. 学会了更方便维护和排错,在DevOps,用jenkins实现CI/CD更方便
    3. 大数据还是以java为主

    java学了SpringBoot+dubbo、Spring Cloud,
    再学,运维开发为主的P,ython或Go+简单大数据。
    先接触项目,没机会的话打算自己给自己安排,
    然后学技术管理

    作者回复: 👍哪怕业余时间自己做点项目也算是项目经验的。

    项目管理懂点技术会更好,不需要太深的,主要还是需要项目经验和管理经验。

    2019-03-21
    3
  • bearlu
    其实我一直想自己私下做一个项目,但是不知道如何开始,今日听了老师的课受益匪浅,但是是不是第一步确定做个什么软件?

    作者回复: 对的,第一步先想好做什么。
    给你的建议是:
    1. 做个小的
    2. 做个实用的,最好自己能用或者身边人能用
    3. 迭代开发,第一版本只做核心功能

    👍支持,做做挺好的。

    2019-03-21
    3
  • 哥本
    宝玉老师:请教一个问题,在做Code Review时要求是什么?这方面在一直没有实施起来,因为花时间让员工在做Code Review ,但有些人根据就没有认真去看代码,这个评判标准是什么?用什么纬度来衡量结果?还请宝玉老师指点迷津。

    作者回复: Code Review后面章节会有谈到。
    简单来说,你首先要把Code Review变成开发流程的一部分(参考前面大厂如何敏捷开发那一篇),比如说新功能,必须要Code Review之后才能合并主分支。

    Review的时候,主要检查代码结构是不是符合架构,细节上有没有什么问题。其实不需要特别多的条条框框,网上也有很多实践可以参考,重点是先做起来,做的过程中逐步总结经验。

    2019-04-12
    2
  • 哥本
    宝玉老师 ,在做里程碑的时候需要花时间整合做集成测试吗?就比如向您说的,服务端开发完成后需要与pc客户端联调,那这就涉及到发布,环境搭建,部署。。。
    做WBS时要把这些时间也算进去吗?

    作者回复: 做里程碑要不要整合做集成测试,取决于里程碑的目标,比如说如果目标是具备测试条件可以联调,只要能调就可以;也可以定义目标是要测试验收通过,这就需要做集成测试的。

    这种需要人需要时间去做的事情,都应该放到计划里面。文章中的计划表没有放,是考虑不周。

    2019-04-10
    2
  • beiler
    我想问下您用的甘特图工具是啥?

    作者回复: 原始版本是MS Project,我现在主要用Mac,所以用Merlin Project打开导出了图片。

    2019-04-01
    2
  • 八哥
    Project制定计划,协作可以用Trello,bug管理用jira,文档共享用的是conf,代码托管用gitlab。工具和理念都有了,但是执行过程中就走偏了。所以软件工程强调团队,也强调个人。

    作者回复: 👍是的,工具只是帮助提高效率,关键还是看人!

    2019-03-24
    2
  • 历知辛
    宝玉你好,之前你提到"技术预研类型的项目"的特点,先对技术预研进行概述技术预研是指在产品应用前景尚不明确或技术难度较大的情况下,如果某项技术可以增强公司产品竞争力或对开发人员进行赋能,对这些前瞻性技术、关键技术或技术难点进行立项研究,着重深索和解决技术实现的可行性。其特点包括:
    1) .技术预研的目的是验证产品技术方案或产品技术,并做技术储备;
    2)着眼公司未来发展和未来市场;
    3) 产品可能还没有明确的需求;
    4).技术预研实现难度较大;
    5).主要关注核心功能的实现,一般不作商用要求。

    作者回复: 我对预研类型项目没什么经验,只能说试着帮忙分析一下,给些建议:

    1. 需要明确项目目标,这样才能有的放矢
    2. 参考金三角,如果你想要计划性,需要把时间这条边固定下来,然后再选一条边,比如说把时间和成本固定下来,然后看能出来什么成果;或者说把时间和范围确定下来,不计成本;
    3. 可以参考软件生命周期划分阶段,比如说:
      - 准备阶段:明确目标确定计划
      - 调研阶段:类似于需求分析阶段
      - 研发阶段:类似于编码阶段
      - 验收阶段:类似于测试阶段

    4. 有了目标,才好定制订计划;划分了阶段,才好确定里程碑。

    5. 同样,计划也是个从粗到细的逐步迭代完善的过程。

    2019-03-23
    2
  • alva_xu
    谈一下我对项目计划的体会
    计划就是为了把项目的各种资源(人力资源,软件资源,硬件资源等)有序组织起来,以便及时识别变化、应对变化。所以做计划的时候,一要考虑如何使计划更加准,二要考虑一旦有变化、计划如何能更加容易调准。方法可能就是
    1,尽量把任务拆解,和任务执行者一起确定故事点(scrum里的说法,这里借用一下)。这样的话即使计划变化,并不是每个任务都变化,计划调整就快。
    2,对任务进行合理排序,找出关键路径和关键节点,项目的风险就比较容易识别。计划调整就能更加及时有效。
    3,通过设立指标和看板,利用项目管理工具及各种形式的会议、报告,及时收集监控项目情况,适时发现问题,及时调整计划。

    作者回复: 👍很有价值的补充,谢谢

    2019-03-21
    2
收起评论
34
返回
顶部