当前位置: 首页 > 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…...

后端解决跨域问题的三种方案:注解配置 vs 全局配置 vs 过滤器配置(附完整代码详解)

文章目录 一、引言:跨域问题的本质与解决方案分类解决方案分类二、方案一:`WebMvcConfigurer` 全局配置(推荐)1. 核心代码(你提供的 `CorsConfig` 示例)2. 代码详解3. 优点4. 注意事项三、方案二:`CorsFilter` 过滤器配置(传统方式)1. 核心代码(你提供的 `ResourcesC…...

低代码采购系统搭建:鲸采云+能源行业订单管理自动化案例

在能源行业数字化转型浪潮下,某大型能源集团通过鲸采云低代码平台,仅用3周时间就完成了采购订单管理系统的定制化搭建。本文将揭秘这一成功案例的实施路径与关键成效。 项目背景与挑战 该企业面临: 供应商分散:200供应商使用不同…...

【AI教我写网站-ECG datacenter】

阶段性总结:后端用户管理基础 在项目管理和协作中,清晰地阐述“为什么做”比“怎么做”更能凝聚共识和提供方向。我们不仅要理解技术实现,更要明白其背后的动机和意义。 让我们重新回顾并总结我们到目前为止的工作,这次会更侧重…...

Vite 双引擎架构 —— Esbuild 概念篇

Vite 底层采用 双引擎架构,核心构建引擎是 Esbuild 和 Rollup,二者在开发和生产环境中分工协作,共同实现高性能构建。不可否认,作为 Vite 的双引擎之一,Esbuild 在很多关键的构建阶段(如依赖预编译、TS 语法转译、代码…...

Docker load 后镜像名称为空问题的解决方案

在使用 docker load命令从存档文件中加载Docker镜像时,有时会遇到镜像名称为空的情况。这种情况通常是由于在保存镜像时未正确标记镜像名称和标签,或者在加载镜像时出现了意外情况。本文将介绍如何诊断和解决这一问题。 一、问题描述 当使用 docker lo…...

AI赋能的浏览器自动化:Playwright MCP安装配置与实操案例

以下是对Playwright MCP的简单介绍: Playwright MCP 是一个基于 Playwright 的 MCP 工具,提供浏览器自动化功能不要求视觉模型支持,普通的文本大语言模型就可以通过结构化数据与网页交互支持多种浏览器操作,包括截图、点击、拖动…...

零基础入门 C 语言基础知识(含面试题):结构体、联合体、枚举、链表、环形队列、指针全解析!

🌟 零基础入门 C 语言基础知识(含面试题):结构体、联合体、枚举、链表、环形队列、指针全解析! C 语言是所有程序员通向“系统世界”的第一把钥匙。很多嵌入式开发、操作系统内核、网络通信、图形引擎,背后…...

矩阵详解:从基础概念到实际应用

矩阵详解:从基础概念到实际应用 目录 矩阵的基本概念矩阵的类型矩阵运算特殊矩阵矩阵的逆与伴随矩阵的秩与等价分块矩阵矩阵的应用 矩阵知识体系思维导图 mindmaproot((矩阵))基本概念定义mn数表元素aij矩阵记号基本术语行数和列数方阵与非方阵矩阵相等矩阵类型…...

软件更新机制的测试要点与稳定性提升

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

【hadoop】Flink安装部署

一、单机模式 步骤: 1、使用XFTP将Flink安装包flink-1.13.5-bin-scala_2.11.tgz发送到master机器的主目录。 2、解压安装包: tar -zxvf ~/flink-1.13.5-bin-scala_2.11.tgz 3、修改文件夹的名字,将其改为flume,或者创建软连接…...