在一个项目开始前,需求整理大概要占到整个项目周期15%甚至30%的比重,可以说需求理得越清楚,后续开发中返工几率越小。在一个项目中,开发新功能的花费的精力要远远小于修改功能的精力,这基本是一个共识。老祖宗说,谋定而后动,不是没有道理的。

一般项目开发中,前期会包含商务活动、需求调研,需求交底的过程。

商务活动

一般由售前人员进行,了解客户需求,收集客户愿景,商务洽谈等等工作,个人认为在这一阶段主要要做好如下工作,原谅我没做过商务工作,穷限制了我的想象力:

  • 了解客户的需求,收集客户的应用场景
  • 商务洽谈,初步确认是否能合作,如果合作确认合作性质,比如,是一个试水项目还是一个盈利项目等等
  • 与产品经理或项目经理沟通是否有资源来完成项目
  • 等等其他,因公司性质而已。

需求调研

一般由商务接洽后,项目经理或产品经理介入,根据前期了解的内容与客户接口人进行详细的规划

  • 对客户场景的详细了解,确定项目的开发模式规模等
  • 对客户需求的详细了解,对项目细节所应具备的功能进行梳理
  • 对客户业务的详细了解,针对不合理的需求提出合理性的建议,反馈给客户帮助客户完善业务
  • 产出需求概要、原型等文档,由商务交付客户确认
  • 产生最终开发方案,并评估工时等信息,有商务进行报价

可以说需求调研是整个项目成功与否的关键所在,如果被客户牵着鼻子走,可能会造成项目开发过程中功能难以实现;如果牵着客户鼻子走,又可能会造成产品上线后客户业务无法开展,导致项目返工甚是废弃(当然给钱了项目废弃也无所谓,但是作为项目经理费了好大劲最后做出来一个废品,是不是很受打击呢!)。

同时项目经理又是承前启后的桥梁,客户业务需求转化成基本实现方案,对接客户与开发人员之间的沟通,立项,需求交底,项目排程,项目监管,阶段验收,测试交付等等,贯穿整个项目流程。俗话说,兵熊熊一个,将熊熊一窝。这个项目经理就是大将,项目成败系于一身,慎之慎之!

接触过的一些项目经理(当然大环境下分工并不十分明确)比如如下场景,

客户:我要做个商城

项目经理(产品经理):……

第二天

项目经理(对客户):一个月吧,最多两个月我们就能做出来,您看怎么样?

客户:我们商城要能加盟,能b2b同时b2c

项目经理:嗯……

第三天

项目经理:我们对了一下,这个可能有点麻烦,要三个月

客户:我们还想关联微信公众号,然后……

项目经理:哦,我咨询下我们的技术再给您答复……

第三天:

项目经理:可以做

客户:……

估计客户最后内心是崩溃的~,你不能和大爷多说几句话么?你不能问问大爷为什么要么?你就不问问大爷想干什么?万一大爷要搞个传销系统,你敢做么?

我总结过,对客户要把握两点

第一:合作共赢(大家各取所需,共同做好项目,都有好处,客户有业绩有绩效,我们有钱拿)

第二:不卑不亢(有时候很难做到,碰到财大气粗的,一副拿钱砸死你的气势,但是回过来想我又不吃你家饭,你在牛和我没半毛钱关系,挖了坑自己难受)

需求交底

在这一阶段,客户基本可以休息了,改由项目经理(如果可能能参与更好,避免跑偏,但是一般很少有客户参与,第一客户专业不是开发,第二客户都很忙)和项目成员进行对接,把从客户那里听来的经过咀嚼,喂给开发人员

  • 项目启动会:概述项目的意义啊,价值啊什么的,白话说,就是要高举反清复明的旗号,告诉大家,只要成功都有吃有喝有女人~
  • 成员定义:谁干什么谁干什么,别等项目都开始了,先锋官还没有,后勤没到位,还打个屁仗,洗洗睡吧
  • 需求交底会:项目经理主讲,图文并茂的说一下客户场景,客户需求,每个模块干什么,并且要保证项目成员能听懂能理解。这点很重要,客户那里有很多术语,要翻译给项目成员听,一定记住 井蛙不可以语于海者,拘于虚也;夏虫不可以语于冰者,笃于时也
  • 需求反交底:由项目模块的相关人员(开发、测试等)进行模块功能讲解,项目经理进行确认,避免开发人员跑偏。

需求交底和反交底视情况而定,参与的人越多,这些工作越要做的仔细。

以上工作并不一定线性进行,有可能是异步的,而且,除了这些,在企业内部要做好项目的支援工作,人员协调,开发资源协调,项目经理要做好前期项目搭建工作,源码管理、项目管理、bug反馈管理等等的准备工作。

以上可以省略,下方本文正文:

我们的项目需求如下:

叨叨了一堆废话,最后就一张图片,因为项目组就我一个人啊。

You can you up

我喜欢用思维导图来梳理一个项目的枝枝叉叉,比较方便,而且不容易漏掉东西,但是也有很多不足,比如展示内容有限,要加很多备注什么的,展示的时候别人看不到等等。

所以用思维导图配合原型工具比较好。

说下功能:项目重点在 “考试系统管理”,规划的功能基本都会实现。答题这里的移动端我不会手机原生开发,做的话可能就是angular或者vue,这俩都没做过项目,所以最后可能只提供API而不实现移动端。

用MVC5+EF6+WebApi 做一个小功能(二) 项目需求整理的更多相关文章

  1. 用MVC5+EF6+WebApi 做一个小功能(三) 项目搭建

    一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了.好吧,就叫Trump吧.没有任何含义 ...

  2. 用MVC5+EF6+WebApi 做一个小功能(四) 项目分层功能以及文件夹命名

    在上一节,我们完成了一个项目搭建,我们看到的是一个项目的分层架子,那接下来每一层做什么以及需要引用哪些内容呢?在本节内容我们还逐步拆分每一层的功能,顺带添加package包 Trump.Domain ...

  3. 用MVC5+EF6+WebApi 做一个小功能(一)开场挖坑,在线答题系统

    从哪开始说呢,这几年微软的技术一直在变,像是牟足了劲要累死所有的NET程序员,从WebForm到MVC到现在MPA.SPA .Razor单页,从net2.0一直走到现在.net4.6.2,后面还有一个 ...

  4. 用MVC5+EF6+WebApi 做一个考试功能(五) 前端主题

    内容概述 前面絮絮叨叨没正事,到现在为止也没有开始写代码,不过在考虑下貌似这一节还是开始不了. B/S架构开发有一个特点,就是用浏览器打开,不同的用户群体可能有不同的风格,不论是管理平台还是普通的网站 ...

  5. 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类

    前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...

  6. 使用PixiJS做一个小游戏

    PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方 ...

  7. 用RecyclerView做一个小清新的Gallery效果 - Ryan Lee的博客

    一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...

  8. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  9. 用RecyclerView做一个小清新的Gallery效果

    一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...

随机推荐

  1. Excel中单元格、超级链接形成超级链接单元格

    使用函数 HYPERLINK(超链接,显示文字) =HYPERLINK("http://www.cnblogs.com/Vpygamalion/","李汉超") ...

  2. 微信小游戏canvas操作

    这几天在做项目的时候,想在游戏画面之前,在Canvas上面画上一张背景图,代码如下     let ctx = canvas.getContext('2d')    export default cl ...

  3. C# 简述Action与function

    Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托. 最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定 ...

  4. ABP框架入门踩坑-配置数据库表前缀

    配置数据库表前缀 ABP踩坑记录-目录 本篇其实和ABP关系并不大,主要是EF Core的一些应用-.-. 起因 支持数据库表前缀应该是很多应用中比较常见的功能,而在ABP中并没直接提供这一功能,所以 ...

  5. Python运维脚本整理

    Python 实现的自动化服务器管理 import sys import os import paramiko ssh = paramiko.SSHClient() ssh.set_missing_h ...

  6. 分布式管理GIT命令总结(转载)

    GIT是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  7. joi库 学习笔记

    零.背景 node.js 应用中,req.query / req.body 传来的参数需要做 valication( 合法性验证 ) 一.安装 https://github.com/hapijs/jo ...

  8. JPA-style positional param was not an integral ordinal

    参数错误 多为SQL语句问题 例如SQL拼装中的空格,换行时首位应多加空格保持语句效果

  9. oracle RAC srvctl命令关闭节点实例的时候 不能正常执行

    场景描述: [oracle@oracle01 admin]$ srvctl stop database -d oradb1 PRCD- : The resource for database ORAD ...

  10. mysql基础知识(3)

    十六.组合查询 使用 union 来组合查询,如果第一个查询返回M行,第二个查询返回N行,那么组合查询的结果一般为 M+N 行. 注意:每个查询必须包含相同的行.表达式的聚集函数:默认会去除相同行.表 ...