如何才能做好一个软件系统?

image.png

前言

  在2014年左右,当时我们创业成立了一家软件公司,主要服务于中小客户,帮助客户实现业务的互联网化,我作为公司的技术负责人,一直负责公司里的技术管理+技术框架,我们主要做的产品形态以手机APP为主,在2016年年初的时候,我们团队已经有30多人,主要都是些软件工程师。然后好景不长在2016年底公司因为项目交付出了问题,导致资金链断裂致使公司倒闭了。如何才能做好项目交付?就成了我一个非常想搞清楚的问题。

  后来,我们创业团队解散后,就各自在不同的赛道上继续创业了,当时我们团队在做汽配商场的产品软件,我们迭代产品搞了将近一年的时间,从18年10月份搞到19年底,我们技术上采用了前沿的技术,管理上也采用了敏捷项目管理模式,但最终的产品表现也很一般,抛开需求变更这些干扰只是从项目技术上来说,我也感觉没有那么让人满意,当时非常的迷茫,都不清楚该超什么地方努力才能做好项目?

  在2020年,疫情开始以后彻底打乱了我们的市场规划,当时汽配行业受疫情影响非常严重,我们坚持到五一然后也就放弃了。同年在10月份,我加入了一家新三板上市公司,担任技术负责人。公司主要服务于政府/事业单位的客户,公司的人员规模与体量都要大很多。公司也始终与其他的兄弟公司保持交流,也借鉴很多大型企业的管理理念与方式,而且在2022年公司还获得了CMMI5认证,但是公司的项目交付上却也非常吃力,到底如何才能做好一个软件系统呢?

实践

上面说道的三段不同的经历过程中,我都在思考这个问题,也为此做了不同的实践尝试:

  1. 通过企业考核制度确保质量
  2. 通过采用前沿的项目管理方式
  3. 利用领域驱动设计+单元测试确保质量

三种实践的结果

实践一
  由于当时我们没有完备的软件流程,且流程与流程之间的责任很多地方存在盲区,尽管我们设置了一套考核管理体系,但是由于大家对制度上不认同,反而让很多人产生了敌对心里,最终的结果是:考核失败、公司倒闭而结束。

实践二
  我们把敏捷项目管理方式纳入到了项目管理过程中,同时也采用了腾讯的TAPD管理平台作为管理工具,严格的执行敏捷模式,每1~2周进行一次版本迭代,采用springcloud技术开发,通过CI/CD实现自动化编译与部署,上线前也都做功能测试,但是最终我们的产品质量也就刚刚60分及格。
主要的有如下几个问题:
1、经常事与愿违
  在紧急上线的时候,无法完全走完预定流程。经常在上线的时候保持高度紧张,经常熬夜上线,但是百密一疏终有一漏,可能第二天一早就被客户的电话给叫醒。
2、测试覆盖不全面
  测试尽管也有测试用例,但测试的方式主要主要是靠人,由于测试的精力有限,再加上通常半夜上线,导致测试往往每次部署后,主要关注本次部署的功能,而开发过程中经常出现把当前问题解决了,却引发了新的问题的时候。我们当时也期望引进单元测试实现对代码质量的监控,但是由于当时采用的是面向数据驱动的方式开发,单元测试落地成本极高,所以也是尝试了一段时间就放弃了。
3、陷入bug的死循环
  由于没有良好的检测机制,无法做不到对功能的全面覆盖,不可避免的会导致系统上线后产生bug,而由于是在运行中的系统,带着bug上线致使团队不仅要面对新需求以及修复缺陷,还要投入很大经历在做数据恢复与数据的处理中。然而bug反反复复,然后就天天的写bug改bug了。

实践三
  2019年,在我看了一篇名为《复杂业务代码要怎么写》的文章后,被领域驱动设计所深深的吸引了,然后就一头扎进了领域驱动设计的学习中了,我最开始对这个技术感兴趣,就是感觉能够用它来解决软件开发的质量问题,在2020年我几乎把我80%的兴趣都投身了领域驱动设计,然后在我在加入这家公司时,我也基本掌握了领域驱动设计的思想了,也就颇不期待的将这套思想模式引入了公司的当前研发体系。我当时经常激情澎湃的给大家做分享讲解,每次大家也都听的热火朝天,但是结果却是道理都非常认同,状态非常nice,就是不清楚该怎么做。我为了落地这套理念,也投入到一线带队参与项目的开发,但由于我在公司里其他的事情比较多就在一个月后脱离出来了,结果这个项目最终的结果却是“四不像”,最终也以理念落地失败而告终,后由被强行改回了数据驱动开发的三层架构。

分析主要的原因如下:

  1. 企业过度重视交付,不够重视软件本身
      公司研发团队,一直都忙于项目交付,尽管很多个人对这套体系非常认同,但是迫于项目进度的压力,且自己短时间内也不知从何下手,就导致没法推动落地了。所以我一直认为,这次失败与公司层面不足够重视,没有投入太大精力去尝试有关。
  2. 大家过分的追求技术,不重视设计与思想
      从事技术的人做的时间久了,无论是个人,还是客户,都比较喜欢追求技术,喜欢研究学习更前沿的技术,例如:人工智能、区块链、云原生等等。而相比领域驱动设计,就显得有些冷门,即便学会了也不能让你瞬间可以上天入地。再加上追随的人越多互联网上的资源也越多,反之亦然,领域驱动设计在互联网上的资料就非常的有限,而且还存在很多误导。当大家习惯了沉浸在当前熟悉的领域中以后,就更加难以脱离,而且对其模式都比较的排斥,,再加上领域驱动设计是一种编程思想,不是技术框架,所以更在难短时间内掌握。
  3. 缺乏系统的学习体系,缺乏对软件的敬畏
      目前我了解到,还没有哪家学校或者培训机构会教大家该如何做好软件工程,领域驱动设计更也不在教学范围之内。唯一与领域驱动设计有关系的也就是面向对象了,领域驱动设计思想底层是就是面向对象,而很多人都认为面向对象只是面试时需要掌握的知识,基本是过了面试以后就都还给了老师。市场上缺乏对设计模式与思想的追捧,市场上更多的是对技术本身的追捧。

总结

  如何才能做好一个软件系统?开始我是被动面对这个问题的,在此之前我从没有思考过这个问题,当时感觉自己的技术还不错,还拥有开源项目,也做过那么多的项目,处理过各种技术问题,总觉得做好项目,有我这个技术大佬在就没有问题。
  后来我希望依靠管理的提升来解决这个问题,学习了《敏捷项目管理》、《OKR》、《一分钟经理人》,才有先进的技术与自动化的策略,但是最终却仅仅是及格的成绩。
  在学习完领域驱动设计,我明白了什么是面向对象开发,也懂得如何将业务转变成领域对象,而且可以非常容易的对对象做全方面的单元测试,以保证软件业务的质量。同时也学会了如何通过领域对象来应对需求的变化,面对需求变化的时候,做到游刃有余。
  我在公司里以EPG组长角色参与了CMMI5的认证,整个过程中我也都是带着问题去学习的,整个过程我的收获也颇多,不仅学会了如何通过数据量化分析的方式来支撑流程上的改动,也学会了如何通过数据分析发现出流程背后的问题,完成认证以后我在公司里也做了一个自我分享,整理了30多页对CMMI5的理解。整个CMMI5过程尽管是对软件管理能力成熟度做的评价,但是其本身并不局限在技术上,也不局限在某一个流程上,它是一套可以收敛的制度体系,只要按照其理念方式去不断的优化,最终就可以得到自己满意的模型。
  我从12年工作到现在为止10年的时间里我曾经学习过非常多的技术,学过深度学习、区块链、大数据,也学过分布式、容器化、云原生等各种前沿的技术,但是最让我感觉的收获最大的还是DDD和面向对象。软件可也分两个维度,一个是术,就是各种技术体系,一个是道,就是设计思想、设计模式、面向对象等。道虽然难以理解,却不怎么变化,术虽然非常亮眼,却不断变化。

情怀

  在18/19年,我当时在做分布式事务框架的时候,那时候很多出版社联系我,希望我可以出一本分布式事务的书。我没有去做,因为我感觉分布式事务就是一个技术框架,再就是不知道能给读者留给什么东西,我不希望为了出书而出书。
  而在今年我想好了写的内容的时候,却已经找不到合适的出版社了,因为我想写分享面向对象开发和领域驱动设计的相关内容,而这类的书却因为比较冷门不被追捧,不好卖,所以出版社不太同意合作。
  科学重于方法,不在于技术。个人感觉真正实现国产化软件崛起,要学习更先进的软件工程管理经验,要学习更先进的设计思想,而非技术本身。
  我希望可以靠自己的这份微薄之力,能够让更多的人了解真正的软件工程,我目前也通过B站、GitHub同时开源分享了关于领域驱动设计相关的知识技术,也希望大家多多关注,因为只有更多的关注才能让更多的人有机会关注到。

GitHub
B站

推荐

如何做好一个后端项目
复杂业务代码要怎么写
领域模型、贫血模型、充血模型概念总结
分离业务逻辑和技术细节
设计模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容