软件随想录:程序员部落酋长Joel谈软件(local.joelonsoftware.com/wiki)-36

设定优先顺序

From The Joel on Software Translation Project

设定优先顺序

作者:周思博 (Joel Spolsky)
Wednesday, October 12, 2005
属于Joel on Software, http://www.joelonsoftware.com


我们之前刚出了一个大的 service pack,解掉一大堆没有人会发现的小 bug(也因而导致了几个没有人会发现的新的小 bug)。现在该是结束 FogBugz 4.0,开始为 FogBugz 5.0 加些新功能的时候了。

在开始动手前,我们想加的新功能多到可以让 1700 个程序设计师做个几十年都没问题。不幸的是,我们总共才三个程序设计师,而且我们希望在下个秋天就能出货。所以我们必须排定优先顺序。

在我开始说该用什么方法为新功能排定顺序前,我得先告诉你两个不该采用的方法。

sttropez1.jpg

方法一。若一项新功能的开发只为了已答应某个客户的话,哔!你的脑子里应该亮起红色警戒灯。如果功能总是针对特定客户的话,不是销售员乱枪打鸟,就是你正冒著让产品往顾问软件(consultingware)走的危险。顾问软件本身没什么问题;你可以很安逸地往那个方向走,只是它没办法像套装软件(shrinkwrap software)赚那么多钱罢了。

套装软件这种开发模式的特性是要嘛就全要,要嘛就全不要。你把软件写完,用塑胶膜包起来之后,客户要嘛就买,要嘛就不买。他们不会说你要加了某个功能他们才会买,也不会打电话和你讨论他们需要哪些功能。就像你不会打电话给微软说:「喂!我爱死你们泰文版 Excel 里那个可以用来拼数字的 BAHTTEXT 功能(译注:baht 是泰国的货币单位:泰铢),不过我只能用英文版的。如果你们能帮英文版加这个功能的话,我就买你们家的产品。」如果你真的打给微软的话,你大概会得到以下回覆:

「这里是微软,很高兴有机会为您服务。如果您有四位数促销码的话,请按 1。产品技术支持请按 2。大宗授权或相关资讯请按 3。拨分机号码请按 4。要重听请按星号。」

看到没?没有一个选项是「需要讨论在购买微软产品前所需新加的功能请按 5。」

定制开发的世界是晦暗不明的。通常客户会告诉你要开发哪些功能,然后你问:「你确定要这么做吗?」之后,客户会说没错。之后你回去开一份漂亮的规格书,回来和客户确认:「这就是你想要的东西吗?」。客户再告诉你没错后,你就要他们在合约上白纸黑字签名,不,是以项上人头担保规格无误。最后你会很迅速地、分毫不差地把他们签字所要的产品开发出来。客户看到成品后会惊骇不已,然后你就得把这星期仅剩的时间拿来研究你的错误与疏漏保险(E&O insurance)是否足够付你的诉讼费或和解费了。或者,如果你的运气真的那么好的话,客户会脸色苍白地笑一笑,然后把你的心血收到抽屉里,再也不用你的产品或回你电话了。

开发软件时,有时候你会骗自己是在开发套装软件,实际上却是在做定制开发的顾问软件。以下是顾问软件的开发流程:

sttropez2.jpg
  1. 为了一些微薄的薪水,你帮一家制鞋公司开发软件
  2. 这家制鞋公司现在需要一套擦鞋软件
  3. 所以你就用 VB 3.0 写了一套擦鞋软件。这个软件还用到了一些 JavaScript、Franz Lisp、以及一个在老麦金塔上执行并用 AppleScript 连上网络的的 FileMaker 数据库。
  4. 由于用过的人都说好,你开始梦想开一家自己的软件公司,就算当不成 Bill Gates 能作 Larry Ellison 也不错。
  5. 因此你向前公司买下鞋亮亮 1.0 并找创投筹些钱开了家「鞋亮亮有限责任公司」,开始卖擦鞋软件。
  6. 不幸的是这套软件没有一个 beta 测试人员可以让它动起来,因为它和 AppleScript 纠缠不清而且 IP 地址又写死在源代码里,所以一个客户安装一套就要花上一个月的时间。
  7. 再来你在招揽客户上也碰上了麻烦。由于软件用到古董麦金塔 IIci 的 System 7,你只能到 ebay 的电脑博物馆去搜刮。这些安装成本使产品贵到不行,投资你的创投也开始紧张起来。
  8. 创投开始把压力施加到销售人员上。
  9. 此时有个销售人员发现某个潜在客户并不需要擦鞋软件,但却有熨长裤的需求。
  10. 因为销售人员的工作就是销售东西,这位大哥就把熨长裤软件用美金十万卖给这位客户。
  11. 现在只为了这位客户,你得花上六个月开发「熨长裤模组」。
  12. 由于没有其他客户会用到这个模组,所以技术上来说,
  13. 你花了一年的时间从创投那里筹资,就只为了帮一家长裤公司开发程序并领一份微薄的薪水;回到步骤一。

就是这样,所以我强力建议要坚守在套装软件这边。原因是套装软件每增加一个客户并没有额外的成本,所以本质上可以用同样一套产品卖给不同的客户以赚取更多的利益。再者,由于可以将开发成本转嫁到更多的客户身上,价格也可以进一步调降。降价会让大家突然发现你的产品更价美物廉,而吸引到更多客户。从此你就过著幸福快乐的日子。

因此,如果你发现加入某项新功能只因为已答应了某个客户的话,表示你正在漂向顾问软件及定制开发的小岛上。这也是一个不错可以作生意的世界,只是它的获利爆发性不如现成商业软件罢了。

别搞错了,我不是说你不该倾听客户的需求。我其实也认为微软该为我们这些还没加入全球经济圈去学习泰文,而且还在用其他货币签支票的人写个类似 BAHTTEXT 的功能。不过事实上,如果你想说服自己分配有限资源的最好方式,是让几个最大的客户去投票决定该加入哪些功能的话,你也可以这么做。但你很快就会发现有钱的大客户要的功能和普罗大众是有出入的,所以加入处理泰铢的功能并无法真正帮助你将 Excel 卖进亚利桑那州 Scottsdale 的保健 spa 去(译注:Scottsdale 是美国著名的观光胜地)。其实如果你真的这么干的话,结果只是让你的开发人员去帮销售人员赚进大笔的佣金罢了

你要想当 Bill Gates 的话,用这一招是办不到的。

现在我要开始讲第二个不该用来决定要加哪些功能的方法:不要只因为不得不做而做。不得不做这个标准不够高。请听我以下解释:

sttropez3.jpg

Fog Creek 第一年营运时,我在归档时发现蓝色资料夹用光了。

我现在的归档系统是这样的:蓝色资料夹放客户资料、淡绿色资料夹放员工资料、红色资料夹放收据,其他资料则放黄色资料夹。现在我要用蓝色资料夹但是却没有了。

所以我是这么想的:「搞什么!反正我总是得用到蓝色资料夹,不如现在去 Staples(译注:Staples 是卖办公室用具的公司)买几个回来。」

当然,这又浪费了我一些时间。

当我事后回想起来,我发现长久以来我一直在做一些无聊的狗屎(这是个技术用语),原因是反正都得做不如现在去做。

我用这个藉口去帮庭院除草、修补墙上的洞、整理 MSDN 光碟(依颜色、语言及编号)等等,族繁不及备载,而当时我真正应该做的事是去写程序或卖程序,这是创业者唯二真正需要做的事。

换句话说,我发现自己假装所有必须做的事都一样重要。既然这些事早晚都得做,做的顺序也就不重要了!就是这样!

但说实在的,我只是在拖拖拉拉罢了。

那我该怎么做?嗯,一开始可以先从根除资料夹得有特定颜色的迷思做起,反正这没什么差别, 你又不用帮自己的文件加上颜色码才能用。

喔,那那些 MSDN 光碟片呢?全部丟到同一个大盒子里就好了。

更重要的一点是,与其说「重要性」是黑白分明的,不如说它是一种类比的东西。不同事物有不同的重要性,如果想大小通吃的话,最后只会落得一事无成。

因此,无论何时你想完成一些事情,必须得了解当下最重要是该先做哪件事。不这么做的话,事情就无法在最短的时间內完成。

我逐渐戒掉自己拖延的倾向。戒除的方法是把较不重要的事放著不做。有个保险公司的好脾气女士缠了我两个月,要拿一些用来更新我们保单的资料,可是一直到她第十五次索取,并且严厉警告我们的保险在三天內失效,我才真的把资料拿给她。而我认为这是件好事。我已经成熟到认为,保持桌面整洁实际上很可能是你无效力的表征。

这是多么使人羞愧的想法啊!(How's thatfor a mortifying thought!)

sttropez4.jpg

所以呢。不要去做那些业务不小心答应某个客户而衍生的功能,也不要因为「反正到最后总得完成」而先去做那些不重要或好玩的功能。

总而言之,回到FogBugz 5.0功能选择的主题。下面是我们定出初步优先顺序的方法。

首先我拿出一迭5x8的卡片,在每张卡片写上一个功能,然后召集整个团队。就我的经验来说,这个方法最多可以用于约二十人的团队,另外不同观点愈多愈好:程序员、设计师、面对客户沟通的人、业务、管理者、文件撰写人员和测试人员,甚至连客户也可以。

我要求每个人把自己想的功能列表带来开会。会议的第一阶段是非常快速地浏览每个人的功能,确保大家对每个功能本身有非常非常粗略的共同理解,另外也确定每个功能都有一张对应的卡片。

这个阶段的想法并不是要去争论各个功能的好坏,或是去进行功能的设计,甚至也不是要讨论功能,只是要对功能本身有个含糊粗略的想法。FogBugz 5.0的部份功能如下:

  • 个人化的首页
  • 无痛软件日程
  • 追踪可报帐时数
  • 复制一个问题(fork a bug)
  • (46个其他功能...)

非常含糊的东西。记住我们此刻并不要知道各个功能如何实现或牵涉什么,因为唯一的目标是要得到粗略的优先顺序,以作为开始开发的基础。这个过程会让我们得到一份约有50个大功能的列表。

第二阶段要对大家对每个功能逐一投票。只是很快速的「赞成」或「不赞成」,不要讨论,什么都不要做,只要对每个功能很快地表示赞不赞成。这个过程显示约有14个功能没什么人支持。我把只得到一或两票的功能拿掉,剩下36个可能的功能。

sttropez5.jpg

接下来我们为各个功能设定一个1到10的成本,1表示快速赶出来的功能,而10则是个庞大的怪物功能。在这个阶段必须要记住,目标并是排定这些功能的时程,只不过是要把大中小的功能分开。我只是针对各个功能逐一询问开发者,要他们说出「小」、「中」或是「大」。即使不知道某个功能要做多久,还是能轻易看出复制一个问题是个「小」功能,而大而含糊的「个人化首页」是个大功能。我们基于这种对成本的共同估计和我自己的判断估算出各个功能的价格。

pri1.png

再一次强调,这方法的确很散乱而不精确,不过这无关紧要。你现在并不是要排日程,只不过是在理出优先顺序。唯一需要大致正确的事情就是粗略知道,在大约相同的时间能完二个中等功能或一个大功能还是十个小功能。不需要很精确。

下一步是把这30个建议的功能和它们的「成本」列成一份菜单。把菜单发给团队里的每个人,并且给每个人50元来点菜。他们可以随意选择,不过只能花50元。如果想的话,可以只买半个功能,也可以买双倍功能。真的很喜欢「追踪可报帐时数」功能的人可以在这个项目花10元或15元;没有很喜欢的人可以只花1元,看看是否有别人投入足够的资金。

接下来把每个人花在各个功能上的钱加总起来:

pri2.png

最后我把所所花的钱除以成本:

pri3.png

然后照这个数字排序找出最受欢迎的功能:

pri4.png

完成了!一份列出所以可能想做功能的列表,而且是依照大家对最重要功能的最佳想法大致排列好。

现在你就可以开始仔细推敲了。举例来说,你可以把本来应该放在一起的功能集合起来,比如进行软件排程会让可报帐时数更容易完成,所以或许我们应该两个都做或是两个都不做。另外有时候顺著这个排好优先顺序的列表看下来,就会发现有些东西显然弄错了。有的话就修正吧!没什么东西是绝对不能动的。你在进行开发时甚至还可以改变优先顺序。

不过最令我惊讶的是,我们产出的最后列表对FogBugz 5.0来说确实是个非常好的优先次序,而且也的确反映了我们对各功能相对优先顺序的集体共识。

我们拿著这份优先顺序列表,大致上依序逐项进行到三月为止。我们计画届时不再增加新功能,然后开始整合与测试阶段。我们将会在各个(不是显而易见的)功能正要实现之前,替该功能撰写规格。

(唠叨的BDUF/Agile选美竞赛记分员现在大概完全迷糊了。「那表示BDUF拿到一票?还是投给Agile呢?他究竟什么呢?他不能就这么一次选好一边站吗?!」)

整个规划过程用了三个小时。

如果你运气够好,有本事能比我们更频繁地发行软件新版(参考Picking a Ship Date),还是得依序遂项进行列表的功能,不过你可以更频繁地停下来做发行动作。频繁地发行的好处,是可以依据客户实际的回馈经常地重新安排功能列表的优先顺序,不过并不是每个产品都有这种福气。

Mike Conte在规划Excel 5时教导我这个系统,当时虽然在会议室里有二三十个人,也只用了两三个个小时就完成了。而酷的是,我们没时间做的功能中约有一半都是真正愚蠢的功能,Excel也因为没有这些功能而变得更好。

这方法并不完美,不过我会告诉你,这比到Staple买蓝色资料夹要好多了。

sttropez6.jpg

这些网页的內容为表达个人意见。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值