admin管理员组文章数量:1794759
软件开发管理最重要的是什么?
这篇文章的目的是整理一下对软件工程这个领域的思考,作一个snapshot。
先说结论,最重要是管理好技术债(Technical debt)。
技术债其实是一个中性词,意思就是为了快速支持产品业务,增加未来软件开发成本的事。可以类比经济债,详细定义参见wikipedia。但是很多人误认为是负面词,主要是软件工程很多理念是避免技术债,大多数软件检查工具也是这样定义的: ”偿还技术债务还需要XXX小时“,没有把技术放在更大一个整体里面去考虑。自己很长时间也是这样认为的,这个非常有误导性。
在一个静态,需求规划好的软件开发过程下,当然是尽量避免技术债,技术债带来了管理和实现的复杂度。但是这个世界却是动态发展数字媒体应用技术的,并且越来越快的,需求变更导致后续一系列动作都会变形,所以避免技术债这个前提假设在客观世界是脆弱的,导致技术债的一个主要原因是产品业务压力。那些严格网游服务器避免债务的人容易在速度追求中失败,RethinkDB就是一个很典型的例子。
为什么是技术债?公司环境下技术的核心目标是服务好业务,失去业务的健康发展,技术就会成为无源之本,毕竟没钱招更多牛人,持续探索更大的问题。那技术怎样快速的服务业务?当然是希望任何时候都可以快速的支撑,业务明天想要复制一个微信,后天想要打造一个抖音,技术最好能快速实现出来。做技术的当然要吐槽这种既想要,又想要,还资源少的不靠谱的需求。
业务这种大跃进想法虽然不靠谱,但暴露了业务一个核心诉求,那就是希望技术可以快速加杠杆日出日落方向,就像资本加持的杠杆一样,让业务快速的起飞,比如滴滴的烧钱游戏。既然业务这种最朴素的诉求是色温值有源头的,如果转换为另外一个问题,那技术如何加杠杆呢?加杠杆这个在金融领域很熟悉的套路嘛,不就是举债。但是技术不像钱那么规模化,是需要时间的;还需要可持续维护的,即便今天搞了一堆乱代码满足了业务,那之后怎么维护?那接下来我们就聊聊如何举债。
如何举债?1. 解决管理技术债最难的地方
最难的都是共识,至少最高福建省会老板要能够懂并且支持,权责不一致就理学类会造成吃力不讨好,因为最终处理债务的同学是技术同学。技术团队内部要能够全面认识到技术债的优缺点,不然在业务支撑与技术追求中造成摇摆,丧失团队凝聚力。
2. 什么时候举债,什么时候还债?
既然目的是加杠杆,所以必须有那个1成立,也就是当业务0到1比较清晰之后加杠杆才是合适的,不然举债的同学拿到的收益很小,并且因为投入资源的压力导致业务变形,这个时候加杠杆是有负效应的。并韩国郑多燕紫色摩天轮且技术负责洪博培人要学会主动举债,主动找到哪些加杠杆之后产生大效果的产出,有时候举债可以实现“大力出奇迹”。至于什么时候还,大的战略上和公司的整体战略一直,比如“增肥去瘦/修炼内功”的时候就可以大规模还债。平时就是分阶段分目标的还,和持续开发持续集成一样,尽量把大的债务拆成小的还掉。
3. 最核心的原则是”破窗理论“
软件开发的流程,大概就是需求分析->设计->编码->构建->测试->部署,其实还是中华联合一个蛮复杂的流程,并且软件开发是围绕陈佳怡无穷多个抽跆拳道品势象概念进行的,很容易出现概念如何查本机ip不一致的情况。软件工程理论发展这么多年,就是为了保证大型复杂软件可持续的开发交付。如果不遵循破窗理论,很容易债务越滚越高,最终就是无法持续,推倒重来,这个也是为什么技术负责人往往避免技术债,毕竟这个锅肯定是他的。
在这个核心理论下,怎么保持窗户不破坏呢?首要就是要保证端到端的流程控制,并且保证步骤不少。比如流程覆盖从需求到最终的部署监控,任务急的时候要保证步骤不要少,可以降低每个步骤的质量,比如不要漏掉测试,你可以测的很少,但是不要没有。比如编码要有code review,可以标准很松但是不能没有。因为举债一般是降低质量或者加人,保证关键步骤不少,可以让你知道把人添加到哪个流程,找出哪个是关键路径。
其次就是及时封好每个“破窗户”。第一步就是要给每个“破窗户”命广西杀人案名,有一句话是“if you红楼梦人物关系表 can not measure it, you can not improve it”。同样地,如果你不能命名一个“破窗户”,那你是无法偿还技术债的。打破葛优瘫窗户的时候就限定好“盒子"的大小,修复的时间点,优先级,修复的组织。如果不限制这个盒子的规模,那就失去了抓手,最终流于形式。修复的组织层级也要定的高一次,防止人员变化导致无法落实。
在有了“破窗户”之后,还让开发指标继续保持的一个关键方法是利用好“白名单”和“黑名单”机制。保证“白名单”范围内的指标是对的,质量是没有降低的。选择工具的时候也尽量选择支持者2种机制的工具。
4. 以怎样的形式还?换到什么程度?
最好的方式是以业务的角度来还,这样能够看出来债务的收益,不然老板会觉得是成本。对内还有一个方法就是通过新技术重构,没有人愿意修理别人的“代码屎山”,并且往往原先不work,都是因为本身一些理念就是有问题的,之后时候通过新技术来偿还,才能从更优的路径解决问题,这样也才能保证团队的活力和成长。如果业务在快速发展,那就保持一点点的债务总是合理的,因为最后的债务代价特别大,还不如通过不断累积的小债务最终通过新技术预研来解决瑞士手表品牌大全问题。
技术债和20年前有什么变化?技术负责人听到要快速复制一个类抖音这样不靠谱需求,一般在内心里面是骂娘的,因为技术很难快速规模化,并且软件变得越来越复杂。但是世界毕竟是发展的更加快速,这里面一定是有新的杠杆。
这20年最大的变化就推进英文是云计算。云计算的普惠化,让算力成为了一个技术杠杆。也就是说技术债要把云计算的算力纳入软件开发的整体流程,以往因为涉及到硬件的购买都是冗长的,因此软件开发之中并没有把算力纳入进来,更多的还是思考软件开发过程。因为各种原因没有上或者不能上云的,都应该把云计算作为纳入管理之中,也许它会让你的制衣软件整个系统管理更加复杂,但是它是你代码实现不行,人员不够的时候最快的杠杆。
很多做严谨数学的人鄙视深度学习,认为这种完全靠算力的方式是粗陋低效的,没有深入本质,某种程度上当然是对的,但是从某个方面来说,这也是充分利用算力这个杠杆的例子。通过先浪费算力,消除了部分算法和业务的不确定性。产品业务的模式跑通之后,老板满意了;大家再慢下来偿还技术债,搞技术的同学也满意了。大家赢两次。
展望其实技术债描述不够准确,可以用一个新的词"技术杠杆(Technical Leverage)"来描述,它包含软件工程流程和算力两个部分。这个世界会发展越来越快,如何找到更大的技术杠杆因素,以及如何把握这个度,是每个技术人一直的修行,也是软件开发管理最核心的问题。
一个小引申: 对于硬件行业行不行全国大学生数学竞赛呢?我的观点是也行,但是远不如软件行业。这个涉及到软件开发的本质,钥匙在《人员神话》这本书里面。
版权声明:本文标题:软件开发管理最重要的是什么? 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686669423a91918.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论