当前位置: 首页 > news >正文

内卷情况下,工程师也应该了解的项目管理

简介:大家好,我是程序员枫哥,🌟一线互联网的IT民工、📝资深面试官、🌹Java跳槽网创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队,目前业余时间专注Java技术分享,春招/秋招/社招/跳槽,一对一学习辅助,项目接活开发。
🌈更多学习内容, 欢迎👏关注👀【文末】微信公众号:IT枫斗者
🌟🌟程序员找工作,就上Java跳槽网:www.javatiaocao.com

内卷情况下,工程师也应该了解的项目管理

背景

  • 作为研发工程师,我们的工作时间大部分时候都是在某一个项目上。一些较大的公司或比较注重项目管理的团队中会有专门的项目经理负责项目进度的把控,也有一些团队是由产品经理来负责。
  • 作为研发人员,我们应该了解一些基础的项目管理概念,尤其是在当前更内卷的情况下,以便更好的与其他同事合作,提高自己抵御风险的能力。

项目管理基础概念

  • 项目管理的三大关键要素
    • 时间
    • 资源/成本
    • 范围/质量

项目计划

列出项目的工作分解结构

  • 按照职能,时间阶段,主要交付物,列出项目的工作分解结构。要一直分解到能估量出单个任务的责任、预算和计划等,并确定交付标准。

    工作分解参考原则:

    • 对业务足够熟悉才能够更好的工作分解
    • 确认是否有模板或先前类似的项目用来帮助识别活动,确定风险点等
    • 需要考虑公司休假及国家法定节假日
    • 任务尽量分解在一周内完成的粒度
    • 任务需要考虑等待时间
    • 一个任务尽量分解为一个人可以完成的粒度
    • 任务历时的估算要以小时为单位
    • 任务量的分配以工作时间的85%为宜
    • 人员分配以后要确认人员使用率
    • 缓冲时间不要分配到各个任务上,可在阶段后或整个项目后留出缓冲
  • 具体到我们的工作中,一个需求首先是产品输出PRD文档,而后设计同学输出具体的设计稿。当研发收到需求后,会针对这个需求排一个开发内部的计划(我们内部管这个叫拆单)。

  • 在我们的这个拆单中,我们会将一个需求的开发任务拆分成以小时为单位的任务,并以此确定最终的交付时间。例如经过拆单我们评估大致要一个人开发20个工作日,安排一个人从6月3日开始开发,去除端午节以及周六日的影响是在7月1日可以开发完成提测。

明确关键时间点或里程碑点

  • 列出计划后,我们需要设置几个关键点,确定好每个时间点的交付物。同时在计划中预留出一定的缓冲时间,且缓冲时间最好是放在项目最后,而非切分到每个阶段。
  • 回到我们的项目中,最终交付可能涉及到以下时间点:
    • PRD输出时间点
    • UX设计稿输出时间点
    • 客户端开发完成时间点
    • 服务端开发完成时间点
    • 客户端与服务端提测时间点
    • QA一轮测试时间点
    • QA二轮测试时间点
    • 上线:客户端发版,服务端发布

明确涉及的人以及所负责的内容

  • 责任落实到个人,每一项任务分配一个且只能是一个负责人,负责计划、估算、监控及报告任务数据;负责人不一定需要亲力亲为,但必须对交付负责。
  • 回到我们的项目中,整个项目的负责人可能是产品经理。具体到研发这里,假设客户端内部参与这个需求有三位同学,将这个需求划分为三个部分,每位同学指定负责开发其中一部分,但最终我们一定要指定一位同学负责整体客户端的技术方案和需求的落地,以及对外沟通协调。
  • 这位同学可以是技术Leader,也可能是虚线汇报的Leader,也有可能就是有owner意识的开发同学。这样指定整体的客户端才能按时高质量交付,而不会出现客户端内部互不关心对方实现、出现遗漏功能、边界不清等问题。

输出项目进度计划

  • 指定项目计划时需要考虑各种情况,例如
    • 假期
    • 跨部门合作
    • 各个任务依赖关系等等
  • 例如前面我们确认开发完成提测的时间时,就需要将端午节假期考虑进去。
  • 不过前面没有提到的是,提测之前应该先和服务端确认联调时间,确保联调的时间要在提测时间之前,所以最终确定时间点时,一定是要考虑好各种依赖关系。

沟通确认

计划的复核与修正,发现问题、解决问题

  • 计划执行过程中,肯定会发生各种各样的问题(下一节我们会详细讨论项目风险管理)。我们需要注意的是要让风险尽早的暴露出来,而不是项目即将交付了才反馈存在问题,此时想要挽救可能也无力回天了。
  • 过程中也要回看制定的计划是否是合理的,如果最初制定计划时,由于比较急切或者经验不足,确实制定了一个不太可能完成的计划,那么也要做好及时的修正以及预期管理。

项目风险管理

正确认识风险

  • 风险与不确定性相关,不确定性越多,风险越大
  • 负面的风险称作威胁,正面的风险称作机会
  • 具有风险管理意识则项目有序,没有风险管理意识,则项目无序、状况不断
  • 具体到项目中,首先是制定技术方案时尽量考虑完善。其次在拆单时,尽可能将单子拆的比较细,一个任务4-8小时会比较合适,这样就控制住了不确定性。
  • 可能在制定技术方案时我们识别到了某个点存在技术上的不确定性,例如客户端开发不确认此处是否能够实现,需要调研;或者此处可能存在厂商兼容性问题,需要做兼容性测试。

识别风险

  • 识别出那些当真实发生时会对项目造成影响具体的不确定性,需要注意的是:项目风险必须是具体的,而不是空泛的担忧或疑虑。
  • 前面我们提到可能某个点不确定能否实现,此时上报时间点时就要具体说清楚是哪个点。这里千万不能有担心我提出这样的点会不会被认为技术不行,而隐瞒的心里。
  • 开发需求时技术能力的差异可以通过调整为组内其他同学来负责的方式补足,或者给时间去调研、反编译竞品App的方式学习补齐。如果因为隐瞒,而最终导致项目延期,这样的问题实际上会更加严重。
  • 所以在识别出风险后,一定要及时提出来,上下游都要清楚,同时要言之有物。

确定风险发生的概率

  • 评估风险出现的概率来确定一个特定时间或场景出现的可能性,可以用数字或次序值来评估概率。

风险评估分级

  • 风险 = 影响*概率

风险应对措施

  • 避免:改用其他方法消除风险
  • 缓解:降低风险概率或风险影响
  • 转移:转嫁给第三方
  • 接受:接受风险和结果
  • 针对不确定的点,明确提出来需要调研的时间。可以在制定项目计划时反馈,先确认其他部分的时间,不确定的这个点给出一个预估时间,例如大致要一周时间,也要明确说出来这个预估时间不准,调研后可能立即就可以解决。或者一个预估的时间也给不出来,那么可能要看看是不是要安排其他同学针对此专门去调研,不占用这个项目的同学,这个项目先正常推进开发。
  • 甚至可以协调产品经理看看这个点在产品设计上做好调整的准备。在一个成熟的团队,这种情况是有可能发生的,产品经理的想法也许是天马行空的,他(她)在确认需求之前可能不会从如何落地的角度去考虑,具体如何落地是开发需要考虑的事情。

风险管理要点

  • 培养自己的风险管理意识,提升项目控制能力
  • 控制粒度越弱,风险越高
  • 了解项目的主要风险及应对方案
  • 提前指定风险应对计划
  • 手上要有一定的缓冲
  • 手上要有备选方案

项目执行与控制

项目跟进的频率

  • 确认好时间节点之后,提前告知对方需要配合的地方。
  • 制定技术方案时,就要确认好前后端需要联调的点,即将到达联调时间点之前也可以与服务端沟通一下,看看可以先联调哪个点,后联调哪个点,确认好顺序。
  • 千万别出现重来不沟通,客户端等着服务端找他,服务端等客户端找他的情况,直接死锁了。
  • 认可对方的努力,及时给出正面的反馈
  • 比较成熟的做法是,当对方的工作做的非常好,也要学会夸夸模式。
  • 例如服务端同学考虑的非常全面,弥补了你的技术方案上的漏洞,或者联调时接口逻辑都是通的且没有Bug,沟通时积极正向,整体体验非常棒。
  • QA同学测试的比较全面,测试过程中考虑到了很多逻辑边界,涉及其他模块的影响,以及资源占用如内存泄露等问题,让你觉得非常靠谱安心。
  • 在项目群中,启动夸夸模式,没有人是不喜欢赞美的,尤其是对方主管也在群中,效果更佳。及时正向的反馈,会让后续的合作更加顺畅,其他同事也会更加喜欢与你合作。
  • 当然夸人也是有一些小技巧的,别夸的太尴尬。一般从专业性、工作主动性、沟通与团队协作几个方面入手就行了。别太假,更别两个人约好在群里互相夸对方,那画面不敢想象。
  • 沟通中存在的问题,采用逐渐设计的方式提醒
  • 私下沟通
  • 项目群中沟通
  • 与对方主管沟通等
  • 已经到了联调的时间点了,但是服务端的同学还没有准备好接口,客户端可以通过其他方式先好自己的逻辑,但是没有联调过终归是不能提测的,此时你可以先私下来沟通。
  • 如果对方不回复你(已读不回),也不说他到底啥时候好,你可以再提醒一至两次,结果还是没有改善。此时就要将问题上升了,例如在项目群中反馈给项目经理或者产品经理"本该昨天甚至上周联调的接口还没好",后续交给项目经理去沟通。
  • 注意此事不是为了甩锅,也不要觉得不好意思。可能这位同事存在其他问题,主动PUSH问题的解决就是在保证项目能够按时去交付,何况你已经提醒过几次了。

项目跟进要点

  • 项目控制过程中最大的问题就是没有问题
  • 踢皮球的根本原因是没有落实跟进

项目协调会议

  • 发现问题,立即拉会沟通,少开长会,开高效会议。 针对会议需要考虑一下几点
    • 会议一定要设置会议议程,具体讨论哪几个点
    • 要有会议记录
    • 会议最后要有结论以及具体的行动项
    • 明确行动项的负责人

相关文章:

内卷情况下,工程师也应该了解的项目管理

简介:大家好,我是程序员枫哥,🌟一线互联网的IT民工、📝资深面试官、🌹Java跳槽网创始人。拥有多年一线研发经验,曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队&…...

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来:深入了解机器学习的核心技术与实际应用 💎1.引言💎1.1 什么是机器学习? 💎2 机器学习的分类💎3 常用的机器学习算法💎3.1 线性回归(Linear Regression)&#x1…...

1-3.文本数据建模流程范例

文章最前: 我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…...

【FFmpeg】avformat_alloc_output_context2函数

【FFmpeg】avformat_alloc_output_context2函数 1.avformat_alloc_output_context21.1 初始化AVFormatContext(avformat_alloc_context)1.2 格式猜测(av_guess_format)1.2.1 遍历可用的fmt(av_muxer_iterate&#xff0…...

Flask 缓存和信号

Flask-Caching Flask-Caching 是 Flask 的一个扩展,它为 Flask 应用提供了缓存支持。缓存是一种优化技术,可以存储那些费时且不经常改变的运算结果,从而加快应用的响应速度。 一、初始化配置 安装 Flask-Caching 扩展: pip3 i…...

基于weixin小程序农场驿站系统的设计

管理员账户功能包括:系统首页,个人中心,农场资讯管理,用户管理,卖家管理,用户分享管理,分享类型管理,商品信息管理,商品类型管理 开发系统:Windows 架构模式…...

JAVA将List转成Tree树形结构数据和深度优先遍历

引言: 在日常开发中,我们经常会遇到需要将数据库中返回的数据转成树形结构的数据返回,或者需要对转为树结构后的数据绑定层级关系再返回,比如需要统计当前节点下有多少个节点等,因此我们需要封装一个ListToTree的工具类…...

设计模式——开闭、单一职责及里氏替换原则

设计原则是指导软件设计和开发的一系列原则,它们帮助开发者创建出易于维护、扩展和理解的代码。以下是你提到的几个关键设计原则的简要说明: 开闭原则(Open/Closed Principle, OCP): 开闭原则由Bertrand Meyer提出&am…...

代码随想录算法训练营第59天:动态[1]

代码随想录算法训练营第59天:动态 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 示例: 输入: …...

jvm性能监控常用工具

在java的/bin目录下有许多java自带的工具。 我们常用的有 基础工具 jar:创建和管理jar文件 java:java运行工具,用于运行class文件或jar文件 javac:java的编译器 javadoc:java的API文档生成工具 性能监控和故障处理 jps jstat…...

ISP IC/FPGA设计-第一部分-SC130GS摄像头分析-IIC通信(1)

1.摄像头模组 SC130GS通过一个引脚(SPI_I2C_MODE)选择使用IIC或SPI配置接口,通过查看摄像头模组的原理图,可知是使用IIC接口; 通过手册可知IIC设备地址通过一个引脚控制,查看摄像头模组的原理图&#xff…...

HTTP协议头中X-Forwarded-For是能做什么?

X-Forwarded-For和相关几个头部的理解 $remote_addr 是nginx与客户端进行TCP连接过程中,获得的客户端真实地址. Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后…...

Linux高并发服务器开发(八)Socket和TCP

文章目录 1 IPV4套接字结构体2 TCP客户端函数 3 TCP服务器流程函数代码粘包 4 三次握手5 四次挥手6 滑动窗口 1 IPV4套接字结构体 2 TCP客户端 特点:出错重传 每次发送数据对方都会回ACK,可靠 tcp是打电话的模型,建立连接 使用连接 关闭连接…...

力扣第220题“存在重复元素 III”

在本篇文章中,我们将详细解读力扣第220题“存在重复元素 III”。通过学习本篇文章,读者将掌握如何使用桶排序和滑动窗口来解决这一问题,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释,以便于理解。 问题描述…...

Qt实战项目——贪吃蛇

一、项目介绍 本项目是一个使用Qt框架开发的经典贪吃蛇游戏,旨在通过简单易懂的游戏机制和精美的用户界面,为玩家提供娱乐和编程学习的机会。 游戏展示 二、主要功能 2.1 游戏界面 游戏主要是由三个界面构成,分别是游戏大厅、难度选择和游戏…...

Windows 10,11 Server 2022 Install Docker-Desktop

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker-compose Compose 是用于定义和运行…...

C++中的RAII(资源获取即初始化)原则

C中的RAII(Resource Acquisition Is Initialization,资源获取即初始化)原则是一种管理资源、避免资源泄漏的惯用法。RAII是C之父Bjarne Stroustrup提出的设计理念,其核心思想是将资源的获取(如动态内存分配、文件句柄、…...

【机器学习】Whisper:开源语音转文本(speech-to-text)大模型实战

目录 一、引言 二、Whisper 模型原理 2.1 模型架构 2.2 语音处理 2.3 文本处理 三、Whisper 模型实战 3.1 环境安装 3.2 模型下载 3.3 模型推理 3.4 完整代码 3.5 模型部署 四、总结 一、引言 上一篇对​​​​​​​ChatTTS文本转语音模型原理和实战进行了讲解&a…...

ubuntu22.04 编译安装openssl C++ library

#--------------------------------------------------------------------------- # openssl C library # https://www.openssl.org/source/index.html #--------------------------------------------------------------------------- cd /opt/download # 下载openssl-3.0.13…...

百度Agent初体验(制作步骤+感想)

现在AI Agent很火,最近注册了一个百度Agent体验了一下,并做了个小实验,拿它和零一万物(Yi Large)和文心一言(ERNIE-4.0-8K-latest)阅读了相同的一篇网页资讯,输出资讯摘要&#xff0…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...

Linux【5】-----编译和烧写Linux系统镜像(RK3568)

参考&#xff1a;讯为 1、文件系统 不同的文件系统组成了&#xff1a;debian、ubuntu、buildroot、qt等系统 每个文件系统的uboot和kernel是一样的 2、源码目录介绍 目录 3、正式编译 编译脚本build.sh 帮助内容如下&#xff1a; Available options: uboot …...

可下载旧版app屏蔽更新的app市场

软件介绍 手机用久了&#xff0c;app越来越臃肿&#xff0c;老手机卡顿成常态。这里给大家推荐个改善老手机使用体验的方法&#xff0c;还能帮我们卸载不需要的app。 手机现状 如今的app不断更新&#xff0c;看似在优化&#xff0c;实则内存占用越来越大&#xff0c;对手机性…...