刚看完“无问西东”,电影里说人总归还是要留下些足迹(文字)的,那么赶紧跑图书馆来留下些文字。

最近去瑞士启动了一个新的项目,那么早上做项目,晚上总结留下了一张张思维导图来记录当时的感受,

手稿如下,字写得不好请见谅:)

首先你得知道这个软件写出来是做什么的,因为不同的应用场景对软件要求是千差万别的。

例如,机械控制?那可能需要实时性高;订票系统?那需要并发性好,还有数据准确性要高;购物系统?简单,好看,好用,操作不反人类......

所以第一重要的东西就是,Domian Knowledge领域知识。

领域知识

领域知识,怎么获得?当然是找三类人(产品经理,领域专家,服务工程师)。

产品经理:是他定义的产品,他当然一般知道用户的关注点和痛点是什么,他一般也是在这个行业中摸爬滚打了很多年,你让他给你讲这个行业是个什么情况,

这个产品大概应该做成什么样子,为什么要做这个产品,他一般都有自己的一些想法(当然有时候也不是非常全面的)

领域专家:他一般知道客户生产产品的流程,知道客户会怎么使用系统来帮助他们提高产品质量或生产效率,他也知道这个行业的基本技术水平在个什么高度(现在市面上的软件能帮客户产品做什么方面的管控,如何提高生产效率和产品质量),也知道按照客户流程这个产品应该怎么做测试

服务工程师:也就是你这个软件产品交付给客户使用之后,他们负责和客户交互,解决使用和简单技术问题。所以客户的一些反馈,客户如何真正使用软件,以及客户心情他们是都知道的。他们是软件使用的老师傅。

抓住这三类人,你将获得巨大的领域知识,这样你提供给客户的功能不再只是可运行的系统,而是在不断的给客户提供价值。

需求文档

人都是靠需求驱动的,马斯洛归纳了人类的5大基本需求。软件当然也不例外,软件也是靠需求驱动的,粗略的可以分成两大类--功能性需求和非功能性需求。

所以需求文档必须包含这两部分。

功能性需求:主要描述系统的行为要求。这个一般产品经理都会写,只是详略程度各有区别。

非功能性需求:主要描述系统的性能要求。

性能要求一般包括:易用性,效率性,维护性,安全性,可扩展性,等。

性能要求看似不起眼,而且很多情况下产品经理会漏掉定义这些。然后性能要求其实是驱动软件架构最重要的元素,所以项目开始这些也要定义清楚。

拿到需求之后有以下这些动作是要做的

  • 需求的澄清:先阅读产品经理写的需求文档,然后将每条需求大概的用你自己的语言给产品经理讲一遍,看看你的理解是否正确,有疑问的话直接问,因为这些疑问迟早要回答的,越晚回答越对项目造成风险。(在你发问的过程中你会发现其实很多需求产品经理也都没想透彻,你发问帮助他思考,当然也是帮助自己不要写无用的代码)
  • 需求排优先级:需求一定是有优先级和版本发布最小功能集的。如果你不能挖掘出这两个东西来,你很难做成功这个项目。如果产品经理说说有的需求都重要,请给他100块钱,然后说:“假设你只有100块钱来买软件功能,请将这100块钱分配到不同的需求上,钱越多表示越重要。”这之后你自然能知道需求的价值和粗略的优先级。需求文档拿到之后还有一个重要的策略是最小集,你说:“如果我们人手实在有限,只能提供软件最基础的功能,请你告诉我软件上线,哪些功能是必不可少的。”这之后你大概就知道项目的范围了。这样一般一个有经验的项目经理大概就能知道产品按时上市的可行性了。
  • 需求文档经过前两步,项目目标,可行性和真实需求应该会比以前清楚不少了,那么后面项目经理一般会让开发组出一个项目估算。我只能告诉大家这个时候的估算,一般都不是太准的,但是我们可能试着提高估算的准确性。这里有个技巧就是把需求用User Story(https://www.mountaingoatsoftware.com/agile/user-stories)的方式来描述:As ...(role) I want ...(function)..so that...(purpose) 就是作为什么样的角色我需要什么样的功能,这个功能的目的是什么。可以发现当产品经理提出一个需求的时候你最想问的一般是“你为什么要这个功能,这功能谁会用?那他一般怎么使用?”,当然有时候“你为什么要这个功能?”听起来有点aggressive,但是却是个好问题:)
  • 有了上面的用户故事,你们团队就可以开始做估算了。估算一般用计划扑克会比较好。当软件有技术难点时一般时间会估得比较不准,所以我建议尽早将系统难点研究一下,之后动手了才能真正知道有多复杂,说不定很简单呢。人对于自己不了解的东西总是有种恐惧感,估算的时候有时会估出一个“天文数字”。估算不是只做一次,第一次估算只是大概看看人手是否足够,技术点时候没太大risk,而不要太在意准确性。估算可以不断修正的,你了解得更多也会估得越准。
  • 需求的利益相关者:这一条虽然放在最后,其实最重要:)请确保参与项目的利益相关者都在同一个理解层面上也就是on the same page。所以前期开会要尽量要求所有利益相关者一同开会,对整个项目有个相同的认识,而且对于项目的范围,目标,时间,质量达成协议,这样才好继续后面的工作。千万不要孤立或遗漏了重要的利益相关人员,或开很多小范围的讨论会议,这样很容易浪费时间,达不成共识,项目注定失败。还有一些重要决定请一定邮件、文档记录,签证画押~~

需求之后的产出物

  • 需求定好了之后一般就可以产出一个基本的系统架构设计了--这个出来之后才好开始技术研究或相关编码
  • 需求定好了之后一般就可以产出一个Mile Stone和交付计划了-- 这个出来之后才好安排相应的测试和其它资源

项目成功最最最最重要的部分,写在这了

角色定义和授权

  • 这个很重要有了角色定义,项目中的角色就有了责任将这个角色扮演好,其它人有问题也可以找到相应的人员,也消除了一部分人不管自己的事情,老去盯着别人
  • 授权也很重要,各个角色有什么权利,管哪些方面定义好了,就不会有模糊领域大家都不管,或者资源不听使唤

需求文档 -- 描述了做什么,什么不做,做的假设是什么

用户故事描述需求--可以捕捉,这个功能是谁要的,为什么要这个功能

软件架构设计--架构设计怎么来满足需求中的非功能性需求和功能性需求

估算--用来给项目计划提供支撑和合理安排资源

项目计划--给管理层一个时间节点和期望,相应的时间节点做资源安排等

后面找时间写后面几篇:

--全新的软件项目,好的开始决定了成功一半!(架构设计)

--全新的软件项目,好的开始决定了成功一半!(团队)

最后给大家show一下我在瑞士买的本子,我喜欢用思维导图捕捉思想,在瑞士偶遇了这个本子,大小纸张都很合适:)

全新的软件项目,好的开始决定了成功一半!(需求&计划)的更多相关文章

  1. 软件项目量化管理(CMMI高成熟度)实践经验谈——之项目管理过程策划篇

    续:软件项目量化管理(CMMI高成熟度)实践经验谈--之概述篇 二.项目管理过程 软件开发项目管理过程,从项目全视角来看,分为售前.售中.售后等三个大的阶段.本文所谈的是售中阶段项目管理过程,在售中阶 ...

  2. 开篇:软件项目的整个流程 - IT软件人员学习系列文章

    这段时间闲来无事,就在总结以前的项目经验,然后写成博客的形式以进行记录.本文就对<IT软件人员学习系列文章>做个开篇吧. 对于IT软件的开发来说,无外乎B/S.C/S和Android.iO ...

  3. 规范化的软件项目演进管理--从 Github 使用说起

    规范化的软件项目演进管理 从 Github 使用说起 1   前言 首先,本文的层次定位是:很基本很基础的 Github 工具的入门级应用,写给入门级的用户看的. 基本上工作过几年的人,下面描述的这些 ...

  4. Atitit 软件项目非法模块与功能的管理与  监狱管理的对比 原理与概论attilax总结

    Atitit 软件项目非法模块与功能的管理与  监狱管理的对比 原理与概论attilax总结 软件项目中的非法模块非法功能非法分子与人类中的非法分子很是相似,必须要建议不同的的约束管理标准化... 软 ...

  5. 开源软件项目管理系统招设计/开发。。。。。Zend Framework2架构 svn://735.ikwb.com/pms

    开源软件项目管理系统招设计/开发.....Zend Framework2架构svn://735.ikwb.com/pms

  6. AxeSlide软件项目梳理

    先介绍一下我负责的软件项目 AxeSlide斧子演示,估计大部分人没有听说过,但国外有一款叫Prezi的软件,应该有一部分人使用过. 这是我们产品的官网http://www.axeslide.com/ ...

  7. “canvas画布仿window系统自带画图软件"项目的思考

    "canvas画布仿window系统自带画图软件"项目的思考 首先贴上DEMO图,并没有美化效果.对UI有要求的,请自带补脑技术. 思考一 在做项目的过程中,我发现"工具 ...

  8. 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路

    layout: post title: 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 key: 20180517 tags: OAA flow chart se ...

  9. 小账本APP——软件项目风险管理及解决办法案例

    小账本APP——软件项目风险管理及解决办法案例 摘要 软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响.软件项目风险会影响项目计划的实现,如果项目风险变成现实, ...

随机推荐

  1. 析构函数(C#)

    析构函数又称终结器,用于析构类的实例. 定义 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数.析构函数往往用来做&quo ...

  2. Pycharm选择pyenv安装的Python版本

    在macOS上使用pyenv实现Python多版本共存后,pyenv安装的Python版本存在于macOS下的 ~/.pyenv/versions/下. 在Pycharm时,选择此目录下对应的版本即可 ...

  3. HTTP结构

    HTTP结构 转载请注明出处:HTTP结构简介 HTTP通信过程包括从客户端发往服务器的请求和服务器返回客户端的响应,这篇文章就简单的了解一下HTTP请求和响应的结构与协议本身的状态管理. 用户HTT ...

  4. 最新swift4.0 图片进行尺寸大小及体积压缩

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Menlo; color: #4dbf56; background-color: #282b3 ...

  5. 警惕phpstudy等开发神器使用默认配置可能带来的危险

    0x00 前言 其实这个点早在之前,我就已经想到了,当时也觉得没啥就记在了我的印象笔记里. 而今天重新把这个点拿出来讲,主要是因为今天早上在温习nmap的时候,一不小心利用这个点,拿下了一位同事的电脑 ...

  6. H5开发中的故障

    本篇博文会不断的收录我在做H5页面时遇到的问题以及解决方案,当然有的问题,我也没有遇到好的解决方案,所以如果你有解决的办法,请务必不吝赐教! H5开发中的故障       微信APP返回按钮不刷新页面 ...

  7. View 动画 Animation 运行原理解析

    这次想来梳理一下 View 动画也就是补间动画(ScaleAnimation, AlphaAnimation, TranslationAnimation...)这些动画运行的流程解析.内容并不会去分析 ...

  8. HTML5——localStorage

    html5的学习,忘记的差不多了,特地拿出来重新记录一下,从它的本地存储开始吧! 假设这样的html结构: <div id= "one_storage" class=&quo ...

  9. MYSQL:python 3.x连接数据库的方式

    我们想要在我们的mython程序中使用mysql,首先需要安装pymysql模块,安装方式可以使用cmd命令安装, pip3.x install pymysql 首先在我们连接数据库之前先创建一个us ...

  10. CVE-2017-8635复现

    在最近几个月里,我花了一些时间深入了Device Guard以及如何实现用户模式代码完整性(UMCI).如果您对Device Guard不熟悉,您可以 在这里阅读更多信息.通常情况下,UMCI可防止未 ...