美文网首页
技术负债与破产

技术负债与破产

作者: 爪哇 | 来源:发表于2017-02-04 11:32 被阅读0次

    技术负债(Technical Debt),也叫设计负债(Code debt)代码负债(code debt) 是用来描述,在软件开发过程中,为了满足超量的开发需求,使用临时简便的解决方法,取代全面解决方案,所带来的问题

    与金融负债一样,技术负债也会产生和积累利息,导致后继的开发和变更更加困难。没有偿还的技术负载会增加“软件熵(Software entorpy)"

    技术负载的产生

    技术负债产生的原因包括以下方面(看看我们中几枪):

    1. 业务压力
      为了满足业务的快速要求,在必要的修改并没有完成时就匆匆发布,这些未完成的修改形成技术负债。
    2. 缺少过程和理解
      业务人员不清楚不理解技术负债的概念,在决策时不考虑其带来的影响。
    3. 模块之间解耦不够
      功能没有模块化,软件柔性不够,不足适应业务变化的要求。
    4. 缺少配套的测试
      导致鼓励快速而风险很大的“创可贴”式的BUG修复。
    5. 缺少文档
      只有代码没有必要的支撑文档。
    6. 缺少协作
      组织中的知识共享和业务效率低,或者初级开发者缺少必要的指导
    7. 并行开发
      同时在并行的多个分支最终需要进行合并,如果过多的修改在独立进行,可能会形成技术负债。
    8. 重构延迟
      在开发的过程中,某些部分的代码会变得难以控制,这时候就需要进行重构,以适应将来的需求变化。重构越是推迟,这些已有的代码被使用的越多,形成的技术负债就越多,直到重构完成。
    9. 不遵循标准
      忽略已有的业界标准、框架和技术。最终都会需要与现有的系统进行整合,越早做,影响越小。
    10. 缺少技能
      有时,开发者确实只是不知道如何编写优雅的代码。
    11. 缺失所有者(Lack of ownership)
      在软件外包时会发生,有时需要对外包出去的代码重构。
    12. 技术领导能力差
      糟糕的命令传达下去只会增加技术负载,而不是减少。
    13. 最后时刻的变更(Last minute specification changes)
      这些变更有可能影响到整个项目,但却没有时间或预算进行确认。

    技术负债的类型

    FolwerTechnicalDebtQuadrant 一文中,根据“鲁莽-谨慎”和“故意-无意”两个维度对技术负载进行了分类:

    1. 鲁莽而故意的技术负债
      团队没有时间做设计,仅给出一个匆忙做出的方案,缺乏对质量的预见;
    2. 谨慎而故意的技术负债
      尽管有很多已知的缺陷,但团队必须现在就交付,同时对造成的后果心中有数;
    3. 鲁莽而无意的技术负债
      团队压根就不知道基本的设计原则,更不用说故意引入了;
    4. 谨慎而无意的技术负债
      那些拥有优秀设计师的团队很容易遇到这种情况。他们交付的方案具有商业价值,但在完成方案后才明白什么才是最好的方案。

    技术负债的偿还

    技术负债必须及时偿还。一个有能力的技术团队应该承担更多的第二种(谨慎而故意)类型的技术负载,并且非常清楚自己的偿还能力。这些行动包括:

    1. 对技术架构重新的梳理
      对于没有及时进行模块划分的功能进行梳理,使之符合整体的设计原则;
    2. 对关键代码的重构
      对即将失去控制的模块代码重构,以适应未来需求的变化;
    3. 新技术的引入
      采用更加适合的技术取代临时的解决方案
    4. 补充文档
      对缺失的必要的支持文档进行补充完善
    5. 加强测试
      对于未能覆盖的功能补充测试
    6. 加强人员培训
      提升人员的开发能力,包括补充人员。注意,给一个交付压力巨大的团队增加新人,是在火上浇油,是在增加技术负债而不是减少技术负债。
    7. 提升技术管理能力
      对有问题的技术决策和管理流程进行优化,提升开发的纪律

    技术负债的后果

    技术负载并不是一件坏事,事实上,适度的技术负债是快速推动业务发展的保障。就如同金融行业鼓励大家使用信用卡一样,适度的技术负债是信誉和技术能力的体现。一个成熟的团队能够非常清楚自己的技术负债,并且具有很强的偿还能力,可以很快从巨大的交付压力中恢复。但一个新的团队,盲目的增加技术负债是非常危险的一件事情。缺少经验和能力,无法准确评估自己的债务和偿还能力,很容易导致失控。

    如同金融负债一样,技术负债会产生利息,并且这个利息会越滚越多,甚至最后都无法计算其带来的影响。将承担着技术负债的代码发布到生产系统,就是提升负债的利率。

    技术负债是造成发布延期,项目进度失控的一个重要原因。当发现延期越来越多,质量越来越不可控,就意味着技术负债已经带来很大影响。开发人员花的大量工作是在偿还技术负债带来的利息,而不是有效生产。

    一味要求技术团队赶进度,都是2,3天之后就要求功能上线,是在透支使用技术团队。长此以往,将会导致技术团队破产。轻则系统失控,任何一点小的功能都会导致无可预知的问题,质量无法保障,运营成本剧增。重则丧失品牌信誉,甚至导致法律纠纷,错失市场机会。

    相关文章

      网友评论

          本文标题:技术负债与破产

          本文链接:https://www.haomeiwen.com/subject/iapjittx.html