项目技术复盘

news2024/11/24 3:13:05

背景

        该项目接手时已是8月中下旬,并且客户要求九月中旬输出第一版本。这么紧急的节奏,不知道商务是如何答应的。临危受命,让我承担开发经理岗位,主导该项目。

开发团队

岗位

人员

base

架构师兼高级软件工程师

季工

上海

高级软件工程师

李工

上海

中级软件工程师

刘工

上海

开发经理兼高级软件工程师

本人(谢艺华)

合肥

问题

如何打入陌生团队

        正如项目背景介绍的,该项目是临危受命,并且项目工期十分赶。我刚开始十分怀疑主管是让我来背锅的,但是无可奈何,只能硬着头皮上了。 我遇到的第一个难题就是:对开发组成员并不认识,甚至都没有交流过,后续如何开展工作。 经过向领导打听,了解到他们三个之前是在泛亚项目中一起共事,并且技术都相当不错。如何快速融入这个陌生的小团队中,方便以后开展工作呢?我是从以下几个方面做的,并且最终的效果自我感觉也还行。

  1. 面对面交流,是了解一个人最快速的方式

        因为他们三个都是base上海,并且我们从来都没有交流过。为了团队成员之间加快了解,我建议他们三个先出差合肥,大家进行集中办公,快速输出第一版本。很可惜,刘工因为某些原因,没有一起来合肥办公。

        经过几天的相处,我大致了解了季工和李工的特点:

        季工:工龄12年左右,技术能力强,做事周全。工作中会主动考虑一些全局的东西,如何方便他人开发,提供别人的效率。平时喜欢打lol。

        李工:工龄6年左右,技术能力较强,属于同年龄中的佼佼者,因此有一些傲气。当然自身的实力,也是他傲气的资本。对技术喜欢深究,专研。

  1. 承认对方的优秀,同时展现自己的实力

        季工和李工两人的技术很厉害,刚当上管理角色的小伙伴,可能会有这样的纠结:如何能在团队中让他们信服我,愿意听我的安排呢?他们技术能力这么强,我说的一些他们很有可能会提反对意见,造成分歧,对项目进展造成影响

其实大可不必有这样的担忧,你可能陷入了以下几个误区:

  1. 当今社会,在团队中,一个人基本不可能面面俱到,总会遇到在某方面比你强的人。承认别人的同时,也不要妄自菲薄。

  2. 团队中的每个人的目标都是将事情做好,

  3. 团队中有讨论才是良性循环。并不要因为你是开发经理,别人都应该听你的。你的想法如果能站的脚,能够说服组员,自然会听你的。

我的做法就是:

  1. 尽量发挥自己的优势。术业有专攻,每个人都有自己的优势。比如,他们之前仅做过泛亚项目,而我已经做过江铃,长城,甚至已经做过从0到1的东风商用车项目。因此,在OTA的业务上,我应该比他们理解更为深刻。OTA 各模块中,安装模块一定是最复杂和繁琐的,大家基本都会避而远之,而我则主动承接。一是对自己的信心,二是这么重要的模块,也不放心给其他人;又比如,身为开发经理,我的重心会放在项目的整体需求,不仅需要熟悉自己的模块,对其它模块也要有一定的了解,这样才能通过日会了解目标的进度(这是开发经理的职责所在)。

  2. 给彼此一些自由度,尊重他人,快乐自己。技术能力强的人,一定会有自己的想法。我的做法就是需求给他到,明确我的要求,定好deadline,剩下的交给他自由发挥。往往会有不错的效果。

  3. 主动承担岗位职责。开发经理的职责我理解主要有3点。一,控制项目开发进度,识别风险,解决风险。二,作为项目技术对外对接人,包括对需求的确认,第三方对接。三,对内进行技术支持。因此,在涉及到对外交接的地方或需求存在疑虑的地方,我一般都会主动去确认,再转达给内部。让他们更多的专注于开发工作。

从结果而言,大家彼此配合起来还是不错的。以上仅是我个人的经验。

如何快速输出第一个版本

        我们团队成员应该是在8.20确定的。而客户要求9.16输出第一个版本。经与项目经理和客户的确认,按照客户的需求,想在这个时间点输出第一个版本,基本是不可能的。我的做法:

  1. 减少工作量。与客户进行battle,表明工作量之大,难度之高。适当的做减法,将一些功能剥离出来,放在下一个版本。

  2. 对内明确需求。因为时间十分的紧迫,根本没有给我们犯错的时间。因此每个人对自己的开发任务都要清晰,不能走弯路。

  3. 任务粒度适当。我将每个人的任务进行分解,基本都在1天或2天的工时。这样可以时长关注大家的进度。而不用过度开会。

        经过大家的努力,我们如期将第一个版本输出,并得到客户及领导的认可。

第一次通宵熬夜

        现在回顾项目周期,唯一一次的熬夜加班就是第一个版本发布。背景是这样的。正如上面介绍的,因为第一个版本时间比较紧,我们当时的工作分配:每个人负责对应一个或几个模块,开发完成后,需要进行自测。9.10需要完成,之后,留一周的时间,进行全流程的联调。

        而结果是,我和季工,李工都按时完成了,并进行了自测。但是刘工并没有按时完成,并且联调时会发现很多问题,经常crash,或需求不匹配。(季工和李工的问题基本没有,其实这时我的内心很崩溃的,因为之前我每天会咨询进度,他都说完成并自测了)。没想到临近发布时间,出现这个问题。

        究其原因,还是对刘工不了解,并不清楚他的工作方式。当然我也有问题,过于放松了,没有真正的把控住开发进度和质量。

        若是让我再来一遍,我会定期走读他们的代码,做到真正把握进度和质量。

需求不断迭代,看不到终点

        另一个痛点就是需求的不断变化。因为该项目的需求是由客户输出,我们没有产品经理介入。因此就出现需求完全由甲方控制,随意的增加或修改。曾出现以下的困境:

  1. 同一个需求,不断的修改。比如用户授权后等待时间,就从30s 改为 60s,120s,300s等。

  2. 需求一点点的增加。在开发过程中,他们可能会发现一些流程不合理的地方,有些问题可以在OTA端完善,也可以在第三方完善。但是因为需求由他们定,就会优先选择让我们修改。

  3. 流程的推翻,部分模块需要重写。让我印象最深的就是开发半年了,安装模块功能已经基本稳定,客户却提了一个新需求,就是安装流程的变化。当我看了需求之后,发现现有的模块流程基本不能满足,需要重写。

        在这样的背景下,我们大约开发了半年。我觉得这样下去肯定是不行的,何时才是个头呢?于是我就向项目经理和领导反馈这个问题。后续我们的做法是。

        让产品经理介入,整理出《需求规格说明书》,《需求矩阵》等文档,与客户进行评审。双方达成认可后,就按照这个《需求规格说明书》来。后续的需求修改,都需要进行邮件发送。新增的需求要重新评估工时,排期。

        之后,客户的需求变更就少了,即使需要变更,也会主动和我们确认。

优点

        当然,项目过程中,我们也有做的比较不错的地方。

参数配置化

        季工的最大特点就是提供一些好用工具,帮助大家提高开发效率。其中有一个比较好的,就是参数配置化的功能。

        季工引入的这个工具,可以将一些参数保存至配置文件中。程序启动时,会从配置文件中读取。好处如下:

  1. 可以给测试人员,集成时,一定的自由度。比如,我们可以通过配置开关,控制OTA的流程,若HMI功能异常,我们可以skip 该流程。

  2. 需求更改时,不需要修改代码。比如上面提到的,用户授权的等待时间,经过多次的修改。若是写到代码中,我们肯定做了多次的修改发版。而通过配置文件,大大减少了类似的时间消耗。

真诚才是必杀技

        我身边有些同事与客户的交流方式,让我不太理解。总是不会坦诚相待,比如一个问题出现了,第一句话总是:"我没有问题,你们先看看吧",即使发现是自己的问题,也不会承认。在下个版本默默修改好。经常就会陷入与客户面红耳赤的地步。

        我觉得完全没有这个必要,大家都是开发人员,都是为了解决问题而努力,开诚布公,才是对项目更友好的方式。

        客户反馈的问题。我一般都会立刻响应,若比较忙的话,也会如是说:“现在比较忙,稍后看一下”。但是对客户的每一个问题,我是一定会有应答和结论的。客户有时会向我请教一些crash问题,我也会主动帮他们分析,教他们怎么使用gdb和一些高阶用法。

        这样给我带来的好处就是。当我遇到一个OTA 问题时,需要系统工程师协助分析时,客户那边就会非常主动,积极的帮我找相关的同事,拉会,沟通。我这边的问题处理起来也会快很多;遇到一些节点delay的情况,客户也会比较好说话,不会追究什么。

        整体而言,项目开发过程中,出现过很多问题,但是基本都会很快解决。这也离不开客户的支持与帮助。

展望

        本文只是分享一下带项目过程中遇到一些问题及解决方式,希望能给正在经历的人一些帮助或参考。若有更好的建议,也十分欢迎一起讨论。

        也欢迎大家分享自己的经验或吐槽~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1220267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Isight 2023 新功能介绍

​​Isight是一个仿真分析流程自动化和多学科多目标优化工具,它提供了一个可视化的灵活的仿真流程搭建平台,同时提供与多种主流CAE分析工具的专用接口,利用此工具,用户可以方便的以拖拽的方式可视化的快速建立复杂的仿真分析流程&…

榜首揭秘:热门产品原型设计工具TOP10

在现代产品制作和创新过程中,原型设计工具起着不可或缺的作用。这些工具为设计师、开发人员和团队提供了更深入的理解,以便核实和呈现他们的设计想法。根据项目的特性,可能需要使用各种类型的工具,因此,我们将在此篇文…

最新随机小姐姐无水印开源版HTML源码

推荐一款高质量的HTML引流源码,适合浏览小姐姐短视频 这款源码具有出色的用户界面设计,给人视觉上的美感 视频播放流畅稳定,给用户带来良好的观影体验 小姐姐们的外貌也非常美丽吸引人 想要浏览精彩的小姐姐短视频,不妨试试这款…

智能位移监测,更新传统井盖的功能

在城市的街道和人行道上,我们经常可以看到井盖的存在。井盖作为地下管道和设施的入口承载着重要的功能。然而过去我们可能忽视了一个重要的问题:井盖的位移可能会对人们产生潜在的威胁。为了保护我们的生活安全和交通畅通无阻和确保城市生命线安全稳定&a…

老师如何在家长群发布通知?

班级查询系统是一种方便快捷的方式,让学生或家长能够随时在线查看老师发布的通知或回执。通过使用各种代码、Excel、小程序工具,老师可以轻松实现学生自助查询班级信息的功能。本文将向老师介绍如何发布成绩查询通知,帮助学生和家长更好地了解…

大势所趋!机器视觉替换传统人工,深眸科技以工业AI视觉赋能生产

如今,在工业4.0的浪潮下,人工智能技术凭借着优化生产流程、实现个性化定制、保障产品安全、促进产业变革等优势,逐渐成为制造业数智化转型的“利器”之一,其在工业生产中的广泛应用使传统制造业焕发生机。 机器视觉作为人工智能快…

非 dict 字典类型的处理

在Python的requests库中,使用data参数发送POST请求时,如果传入的数据对象不是直接继承自dict的字典类型,就会抛出TypeError异常。 Python的requests库是一个广泛用于HTTP请求的库,它提供了丰富的功能来发送和处理HTTP请求。其中&…

Workplace Search 的演变:使用 Elasticsearch 搜索你的私人数据

作者:Dana Juratoni, Aditya Tripathi Workplace Search 功能将来将与 Elastic Search 合并。 这是你需要了解的内容。 生成式人工智能技术的最新进展为搜索带来了一系列可能性。 随着开发人员构建新的体验,用户正在采用新的搜索使用方式 —— 从用自然…

基础课7——数据预处理

在智能客服系统中,数据预处理是进行自然语言处理(NLP)的关键步骤之一。它是对用户输入的文本数据进行分析、处理和转换的过程,目的是将原始文本数据转化为计算机可理解的语言,为后续的智能回答提供支持。 1.什么是数据…

html在线生成二维码(附源码)

文章目录 1.设计来源1.1 主界面1.2 美化功能 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134458927 html二维码生成(附源码),生成二…

Cow Lineup S——离散化、单调队列、双指针

题目描述 思路 x、id不大于1亿,数据量太大,使用离散化将id离散化成一串从1开始连续的编号,使用map集合进行离散化使用双指针维护一段区间,这段区间满足每个编号都包含 如何使用map集合进行离散化? 维护一个变量nums…

在Linux上安装Oracle 数据库 11g (含静默方式安装)

好久没碰11g了,今天(2023年11月16日)因为有个需求又装了一遍。 在OCI上安装了一个Oracle Linux 6实例: $ uname -a Linux instance-20231116-1239-db11g 4.1.12-124.80.1.el6uek.x86_64 #2 SMP Mon Oct 9 02:32:10 PDT 2023 x86…

Springboot升级为3.0.6

版本升级 Springboot升级为3.0.6 版本从原来的2.7.12换成了3.0.6 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.6</version><relativePath/> <…

使用宝塔面板安装mysql

1.第一步 在官网https://www.bt.cn/new/download.html下载页面直接在服务器控制面板复制这里的代码下载即可 2.第二步 下载好后按照服务器面版上有个公网地址&#xff0c;含有用户名和密码&#xff0c;保存好&#xff0c;然后通过公网地址打开一个网页&#xff0c;绑定自己注册…

【数据结构与算法】JavaScript实现双向链表

文章目录 一、双向链表简介二、封装双向链表类2.0.创建双向链表类2.1.append(element)2.2.toString()汇总2.3.insert(position,element)2.4.get(position)2.5.indexOf(element)2.7.update(position,element)2.8.removeAt(position)2.9.其他方法2.10.完整实现 三、链表结构总结3…

苍穹外卖--新增员工

请求方式Post,请求参数&#xff1a; 用EmployeeDTO类接收参数 Controller层实现&#xff1a; PostMappingpublic Result save(RequestBody EmployeeDTO employeeDTO){employeeService.save(employeeDTO);return Result.success();}service层实现&#xff1a; Overridepublic …

国家大基金三期线上金融正式倒计时!11月17日,共启芯片产业新篇章

国家大基金三期线上金融正式倒计时&#xff01;11月17日&#xff0c;共启芯片产业新篇章 新时代浪潮下&#xff0c;全球化进程不断推动各科技大国的核心发展&#xff0c;芯片作为强有力的竞争标志&#xff0c;是国与国之间的重要技术战争焦点。同时&#xff0c;国内基金发展势…

数字艺术藏品软件的独特创新与未来趋势

随着科技的飞速发展&#xff0c;数字艺术藏品软件逐渐崭露头角&#xff0c;为艺术爱好者们提供了一个全新的收藏方式。这类软件不仅为艺术家提供了展示作品的平台&#xff0c;也为收藏家们提供了收藏和分享艺术品的渠道。本文将从开发思路、技术实现、市场前景等方面探讨数字艺…

TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt

一、换内存&#xff0c;拆闪存&#xff1a; 1、先原机开机试试是否功能正常&#xff1b; 2、拆机&#xff0c;比较难拆&#xff0c;容易坏外壳&#xff1b; 3、找到内存和闪存&#xff0c;用胶带把边上的小元件&#xff0c;电阻都贴好&#xff1b; 4、加助焊油&#xff0c;用风…

IPSec:strongswan -- IKEv2如何检测到经过了nat设备

拓扑 其中NAT设备将来自DUTA的报文源IP 101.0.0.2转换为102.0.0.2。DUTA发起IPSec连接。 DUTA计算natd_chunk和natd_hash DUTA先用自己的SPI&#xff0c;对等体的SPI&#xff08;为0&#xff09;&#xff0c;IP和端口号做SHA1处理。如下图&#xff1a; 代码位于ike_natd.c的函…