为什么大家不愿意做重构项目

news/2024/7/19 18:20:19 标签: 敏捷开发, 云计算, 框架, Facebook, 数据结构
最新补充:
才两天,这么多浏览量了,挺意外的。

写本文的目的主要思考一下工作中切实遇到的问题。

公司是大型网站,这几年发展很快,而一些基本方面却变化不大,越来越不适应敏捷开发,项目扩展,快速满足需求的特点。
包括:project目录结构,开发框架,构建过程,设计文档规范等等。 因此自己思考为什么炫目的前沿技术项目起了很多, 而很少人愿意进行这些很有挑战,但很有价值的重构项目?

本帖子就是自己思考的一点心得和体会。核心还是对于“拥抱变化”的认识,变革的价值,变革和风险的权衡等问题上。


1. 问题
    我们的项目是大型网站,目前看还存在很多技术,过程问题,但变革和重构项目为什么很少人愿意做呢? 思考ing

2. 分析
    目前,前沿技术项目名称很炫,比如:云计算,分布式计算,分布式服务等,然而重构项目却比较朴实,技术领导给予的重视程度不够,KPI分量也比较轻,可能是大家做重构项目意愿较低的原因吧。
    重构意味着要打破陈规,对现有项目动大手术。 要排以前的很多地雷,存在很大风险,容易出现A类故障. 而对重构项目的价值评估体系不够,KPI考核缺乏故障忍耐及变革奖励机制,因此架构师做重构项目的意愿不太高。

3. 对策
   对重构项目可以按 必要性,紧迫性,风险性建立评估模型。 对高风险的重构项目,例如:数据模型变更,开发框架升级,核心产品架构重构等可以按等级给予豁免故障分,通过创新制度鼓励“拥抱变化”。 这一点需要向 Facebook 学习。
 
   即便一些项目不存在风险,例如:开发过程优化,提升效率的工具优化等,其带来的研发效率的提高,成本的下降是非常巨大的。但价值评估不够,KPI比重不够。
   因此在对前沿创新和研究项目给予同样重视的待遇下,对重构项目项目按必要性,紧迫性适当提高KPI分值,可以提高架构师启动重构项目的意愿。
 
4  重构项目评估模型
1) 必要性和经济效益:1-10
     分值越大,代表经济价值越大,如生产效率的提高带来的人工成本,运营成本,硬件成本的降低。
2) 紧迫性:1-10
      分值越大,代表越紧迫。这主要是衡量机会成本。例如:早6个月完成,就可以带来 6 个月成本的降低和价值。机会成本通常是IT公司比较会忽略的因素。
3) 风险豁免值:1-N ( N 为最大故障分 )
      主要用来评估风险值,进而评估重构项目的风险豁免值。 用来鼓励软件工程师启动重构项目的意愿。

引用
重构项目价值 V = (必要性 * 紧迫性)


  注:值范围: 1-100

引用
重构项目的 KPI =  重构项目价值 * (风险豁免值 - 故障分)


   当 故障分 < 风险豁免值 时,重构项目考核的 KPI 仍然可以保持正数,工程师的考核不会因为出现一定故障而导致绩效下降;
   当 故障分 > 风险豁免值 时, 说明故障超出了可预先商定的容忍范围,会适当影响工程师的绩效。这样可以约束工程师加强重构项目的质量和风险控制。

5. 总结
   工程师通常会比较专注做事,而不善于包装。因此,项目经理或技术领导应该辅导帮助,进行项目的价值评估,例如:采用一定模型,对项目的人工成本降低,开发,发布效率的提升等经济价值进行分析。

 

 

收藏自: http://www.iteye.com/topic/577894


http://www.niftyadmin.cn/n/872864.html

相关文章

5.10 属性声明:const

5.10 属性声明&#xff1a;const 属性声明&#xff1a;const 使用方法 优化函数&#xff0c;减少函数调用次数 //1int func(int a) \__attribute__((const));func (int a){.......}//2int __attribute__((const)) func(int a){......}开启优化 gcc -o 例子 #include<s…

k8s的架构是怎么变成现在这个样子

引子&#xff1a;笔者在学习K8S的时候&#xff0c;总是在问自己为啥它的架构就变成了现在这个样子的呢&#xff0c;这样的架构和调度设计有什么好处呢&#xff1f;在学习了之后&#xff0c;笔者便整理了这篇文章&#xff0c;一来&#xff0c;算是跟自己答疑解惑&#xff0c;二来…

5.11 属性声明:weak alias

5.11 属性声明&#xff1a;weak & alias 属性声明&#xff1a;weak 提前适配一些未实现的库函数 使用方法 void _attribute_((weak)) func(void); 三种场景 强符号强符号 强符号弱符号 弱符号弱符号 规则 一山不容二虎 强弱可以共处 体积大者胜出 属性声明&#x…

详解MANIFEST.MF文件(转)

打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录&#xff0c;这个目录下会有一些文件&#xff0c;其中必有一个MANIFEST.MF&#xff0c;这个文件描述了该Jar文件的很多信息&#xff0c;下面将详细介绍MANIFEST.MF文件的内容&#xff0c;先来看struts.jar中包含…

5.9 属性声明:format

5.9 属性声明&#xff1a;format format使用方法 _attribute_((format (archetype, string-index, first-to-check))) archetype 对应的函数 string-index 格式字符串在函数终端的位置 first-to-check 开始检查的参数的位置 void LOG(const char *fmt, ...) __attribute__((f…

微信开发绑定服务器地址,极其方便的实现微信公众平台服务端开发,2行代码完成服务器绑定,3行代码实现用户消息监听...

项目介绍极其方便的实现微信公众平台服务端开发&#xff0c;2行代码完成服务器绑定&#xff0c;3行代码实现用户消息监听简单封装了所有与微信服务器交互的消息:文本消息、图片消息、图文消息等等 提供了基于springmvc以及基于servlet框架的控制器&#xff0c;集成了微信服务器…

eclipse不能部署web工程解决方法(转)

eclipse不能部署web工程解决方法 从svn上下载新的代码到myeclipse上&#xff0c;但不能部署到myeclipse的tomcat上&#xff0c;提示webRoot错误&#xff0c;研究了半天发现eclipse创建web工程的时候默认创建的是webRoot文件夹&#xff0c;如果修改为其它文件夹如myWeb,创建者不…

5.12 属性声明:constructor destructor

5.12 属性声明&#xff1a;constructor & destructor constructor & destructor 使用方法 __attribute__((constructor)) int init_func(void); //运行main之前就会执行 __attribute__((destructor)) int exit_func(void);