这半年的一些事情

进了公司半年,老大离职后,我被指定接手开发团队,压力有点大。刚开始这个项目算是失败了,客户都不是很满意。我总结了一下问题,杂七杂八的,总结起来就是
 
  • 由于软件需要根据不同的客户来进行扩展子功能,没有设计好框架导致扩展性不够。
 
之前的开发团队是直接把所有的功能都塞进了一个软件里面。给不同的客户的软件只是把客户端上的界面也隐藏掉(通过宏定义或者配置文件)。
这个也不是只有在这个公司才遇见,在上家公司就有了。我感觉这个应该是大部分企业的通病,软件的核心功能是针对于该行业的所有用户的,但是却需要针对不同的用户进行定制开发修改
 
 
  • 开发人员水平不够。各种传参使用值传递,强转都是乱强转,崩溃都不知道崩溃在哪里。数组各种越界,指针各种野指针,在遍历list的时候,各种这种 std::list<int> copyed_list = src_list 这一种代码,qt的水平也是半桶水。一份代码写个四遍也很正常
 
 
我浏览了一下代码,软件是有进行简单的分层和功能抽象的,后面越来越失控,有几点原因
  • 开发人员的流动和功能的迭代,产品没有规划好
  • 赶时间和进度
  • 开发人员的随意,毕竟项目做了两年多也没成果,很多人已经不耐烦了,离职的离职,怠工的怠工,还有人都是在做自己的事情
  • 开发人员的水平所限,这个是中小公司的问题,毕竟预算就那些,也没什么名气,能招到人就不错了。
 
到我接手软件组的时候,整个系统基本上没有什么框架可言了,团队也已经比较散了。所以在开发的时候,不能仅仅从技术上考虑,还需要考虑到开发人员的心理状况以及开发水平。
 
开始的时候老板跟我说即使把整个软件推翻重写也没问题,该把人换掉就换掉。我想了下,还是想在原有的软件上开发下去。当时考虑的主要还是公司预算的问题。
  • 在我接手前,项目已经做了四年多了,换了好几任的技术主管,基础已经都有了
  • 已经错失了最佳的发展时机了,市场已经越来越小了。不能再慢了
  • 小公司,没有那么多预算,从成立软件部开始一直在亏钱,我还是挺希望部门能在我手上开始给公司盈利的。这个是很重要的一个原因
  • 我对自己比较有信心,因为这些问题我在第一家公司都有遇到过,都在着手想解决方案,想要试一下是否可行
 
软件开发方面:
  • 建立编程规范,比如将所有的强转改成dynamic_cast,将void* 改成variant,保证类型安全。数组改成vector等等,具体在另外一篇文章里面
  • 整理通用代码,优化工程结构
  • 着手设计插件框架
  • 自动化检查代码
  • 查找所有崩溃的问题。这一点真的很吐血,C++崩溃真的很难找,用了很多工具以及修改了很多代码来查找,牺牲了好几个假期来弄这些
  • 舍弃界面的细节,优先保证稳定和功能。这点争议很大,为此跟产品闹了几次矛盾。考虑到开发人员的心理,毕竟CPP程序员很不喜欢对这界面调一个像素两个像素,很多界面细节调整我都拒绝了
  • 开始独立部分服务,比如图像处理服务,视频处理服务,后期往微服务方面调整。独立的原则主要有两个
    • 是否吃性能
    • 服务的功能是否可以做成通用,单独成一个产品,后期是否需要添加太多的功能
  • 强制编写注释以及简单的文档
  • 使用持续集成以及自动发布
  • 代码审核以及自动化测试(后面放弃掉了)
 
人员管理方面:
  • 清退了做私活的人
  • 一些老员工很难处理,毕竟呆了三四年,我来了半年的人也不好管,有时候我说他们,他们都不理我。但是事情还是做的,所以这些人基本就是我下发任务后就不管了。有问题来问我,没问题我偶尔催催进度,也算是得过且过了。总算没拖后腿
  • 支持我的员工,就比较好办了,该怎么做就怎么做了,核心的功能也会给他们做
 
其他方面:
  • 关于进度,刚开始压力真的很大,产品天天催进度,我自己又不喜欢加班,后来还是在没有强制施行全员996的情况下完成了任务,还是挺开心的。当然这点跟上面那些支持我的员工关系很大,他们做不完要嘛自己加班,要嘛远程解决
  • 人员流失。有一个员工离职跟我讲我不重视和信任她。原因是我从不分配给她重要的事情,只是让她改BUG。我想想也对,因为她经常抱怨太麻烦,太累,所以我也不想把重要的事情给她,更多的是分配给比较积极的人。想想自己,有时候虽然会抱怨累,但是解决了还是很有成就感
  • 跟产品的冲突,有时候确实不理解产品的想法,很容易陷入细节里面,导致一直改来改去,后来很多东西都被我拒绝掉了,研发团队还是不能当做产品的下属,而是要有自己的意见,否则很容易让研发团队离心,毕竟现在研发还是比较好找工作的
 
 
经历过半年总算把公司产品弄上了正轨,感觉还是挺开心的
不过这半年真的发生了很多事情,会发现一个产品真的不止是技术问题,还有销售问题,还有产品问题,还有管理问题,以前想问题太单纯了。
 
 
人员方面,公司不是什么大公司,也并没有那么多预算,不可能什么事情都招水平高的人。我刚来的时候大部分人连引用都用不好。加上IT行业目前属于人员缺少的状态,很多人只是混混日子攒攒经验然后跳槽,所谓的招优秀的人在我们公司基本不可能,最终变成了招踏实肯干的人,水平倒是其次了
 
产品奉行简单粗暴,而不是精益求精。不止产品,包括代码。这个也是我后面放弃代码审核的原因,加入代码审核后,以目前团队的水平,一个问题来来回回可能要好几周才能解决,加上会把大家搞得很烦,毕竟目前士气低落,需要有业务和产品来提升目前的团队士气。最终代码审核只是写了一个简单的静态语法检查脚本来检查
 
还有很多想吐槽的,但是想想毕竟这个是目前符合我们公司状况的,很多东西只能舍弃掉,大概类似于分布式里面的CAP理论吧。听了太多网上大神的思想,原本也想建立一个能力高强,默契的团队,有自动化测试,代码审核,
完整的文档,引入wiki,markdown,git等新技术,但是最终只能选择目前这种情况,才能保证团队活下去,也是一种妥协吧
 
 
posted @ 2018-09-06 16:35  linyilong  阅读(269)  评论(2编辑  收藏  举报