互联网产品开发流程总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 概述

软件类项目具有一些与生俱来的复杂性,因此在整个产品生命周期中,往往由于一些环节的处理不当,而造成了进度延误、BUG较多,甚至项目失败的后果。相比之下,互联网类项目除了本身就是软件项目之外,又具备更多的环节、需要更多的交互。因此,互联网项目在产品周期中,更容易出现问题。

一个项目周期可以大致分为这几个阶段:项目规划、需求分析、软件设计、软件开发、软件测试、软件发布,系统运维。而在现代软件(尤其是互联网)项目中,这几个阶段已经不是十分清晰地划分开来,而是通过所谓“迭代”的方式循环前进。尽管项目周期的几个阶段并不能够完全独立地划分,但是每一个阶段都是缺一不可的,对任何一个阶段的过于草率甚至忽略将会带来严重后果。

关于软件开发过程,有很多相关的书籍有详尽的描述。事实上,过于遵循严格的流程定义,也会适得其反,尤其是对于较小的团队。如何能做到最大程度的“敏捷”,应该是一个小规模团队的追求目标。本文将针对互联网项目的几个重点环节,依据已有的一些经验,为软件技术(互联网)类的项目开发提供一些参考性的思路。

2 前瞻性和细节:关于项目规划和需求

2.1 项目规划

在项目开始之前,一个规划的过程是不可缺少的。规划包括技术方面和非技术方面,对于不同类型的项目,这二者各有侧重。对于大多数项目来数,技术是次重要的。

在这个过程中,有几个主要的事情需要完成:

明确项目目标:没有一个明确的目标,任何项目都无法避免失败的命运。虽然,在项目的进行过程中,目标是会明确项目目标

不断地调整,但是,必须在项目初期确立主体目标。也就是说,要明确地描述出这个项目将要做成什么样子,依靠哪几个关键点来赢得用户。尽量通过最简略的语言描述项目目标,如果做不到,或许是对于项目的考虑还不成熟。

往往,很多团队已经小有规模,但是项目目标仍然在不断调整,这实际上是一种无奈之举,因为之前的工作没有做到位。这种情况会产生很多负面影响,无论是对于成本,还是团队士气。因此,对于项目目标的规划,应具备足够的前瞻性。

竞争对手分析:当前的环境下,已经很难找到一个完全没有其他人参与的项目(如果有,可能说明了这个项目没竞争对手分析

有价值)。而对于互联网项目来说,了解竞争对手的成本是相对较低的。作为用户,去体验竞争对手的网站,可以获取第一手的资料。去发现对手做得好的以及不好的地方,可以为自己节省大量的时间。

发现优势和劣势:每一个商业模式,都是由几个环节组成的。首先要明确,对于团队来说,这几个环节是通畅发现优势和劣势

的。进一步,要考虑对于哪些环节具有优势,这些优势将是带来商业利益的关键点。对于劣势环节,则要考虑如何去克服。在项目规划阶段,对于优势和劣势的分析,要尽量避免乐观思维。

技术选型:尽管不是最重要的,不过技术选型依然是在项目规划阶段要考虑的。系统所运行的平台,开发工具和技术选型

语言,第三方程序的成熟度。基于项目目标,对这些方面进行初步的分析,理想情况是,尽可能利用现有的东西,尤其是开源产品。另外,工具和语言的选择要考虑人员招聘的需要。

2.2 需求分析

角色定义:“产品经理”-负责完成需求分析,输出技术团队所需要的需求规格,并跟进项目的开发、运营过程。产品经理的角色非常重要,尤其是对于互联网项目。首先,对于项目团队来说,产品经理代表了“用户”,通过日复一日地使用自己的产品,调研用户的需求,对产品进行不断改进。另外一个方面,产品经理充当了技术团队和非技术团队之间的桥梁,他们需要把非技术团队的需求转换成技术化的语言传达给技术团队,起到两者之间“润滑剂”的作用。

首先,产品经理需要关注产品的“核心能力”。没有一个产品可以做到面面俱到,产品经理需要找到最能够满足用户需求的核心点,并将其发挥到极致。这种满足了用户需求并做得极致的核心点,最终将成为口碑,并为用户所传播。

其次,产品经理需要对产品的运营保持敏感。通过对统计数据的持续关注,通过在产品论坛上了解用户的反应,产品经理要能够及时了解到产品目前的发展走势,并以最快速度做出调整。

然后,在产品的交互设计方面,尤其是互联网项目,产品经理要把自己当成“最笨”的用户来看待自己的产品,菜单的设置、按钮的摆放、提示语的位置等等,如何让用户能以最简单、最快捷、最不需要动脑筋的方式使用产品,应该是产品经理追求的目标。

另外,关于产品经理的素质,产品经理为了做好产品设计工作,除了对产品的感觉之外,需要有一定的技术功底,例如对带宽、服务器性能、WEB标准等方面应有一定的了解。对于细节的极致追求,也应该是产品经理应具备的特质之一。

小故事:巨人网络的史玉柱,号称自己大部分的时间都花在游戏上,有一段时间他甚至亲自作为客服人员,直接倾听来自用户的反馈。腾讯的马化腾,自从05年之后就从管理事务中脱身,把自己更多地当成“首席产品体验官”的角色。常常在凌晨时分,他会把对产品的意见发送到负责产品经理的邮箱里。

3 差异化思维和迭代开发:关于设计和开发/测试

3.1 系统设计

不同类型的产品,不同的开发平台,设计思路有非常大的区别。本文不会就具体的软件设计做讨论。这里想重点强调的一点是系统设计中的“差异化”思维。

举个例子,一个西餐厅,平常的客流量基本上是稳定的,但是在情人节等特殊的日子,客流量会有一个突发性的增长。有什么办法可以解决这个问题,即使在忙的时候,也不能让客户过长时间的等待。另外一个例子,盛夏时节,用户家里的空调坏了,维修需要3天时间,作为售后服务方,应如何应对。

这些问题的解决思路,实际上在于如何进行合理的差异化设计。一个热门的互联网应用,在繁忙时间段(例如周末、晚间),会出现带宽、服务器资源紧张的情况,这个时候网络丢包、操作响应变慢,影响用户体验。更严重的情况下,当负荷超过阈值,出现雪崩效应,基本上处于无法服务的状态。

所谓的差异化设计,即要根据业务的本质,对产品所提供的服务按照一定的粒度划分层次,什么是基础服务,什么是增值服务;什么是必须满足的服务,什么是锦上添花的服务。举例来说,对于一个即时通讯业务,发送文本类消息是最基本的,而魔法表情、虚拟形象则是增值服务。在合理地对业务进行了划分之后,就可以在不同情况下作出取舍。系统和带宽空闲的时候、资源紧张的时候,系统出现故障的时候,在不同的情况下,系统的设计要能够支持划分的业务单元按需要进行组合和取舍。

对于业务单元的划分,也可以从另外一个角度来考虑,那就是用户的“愤怒”指数。对于一个具备十几项功能的服务,某几项功能出现问题会使用户觉得无关痛痒,而另外几项则会使用户暴跳如雷,甚至有几项出问题会使用户发誓永远不用你的服务。通过对不同功能的愤怒指数进行设定,也可以得出层次化的划分。

当系统、IDC、网络出现问题的时候,要优先保证最基本的、也就是愤怒指数最高的功能。当问题逐渐升级,功能要逐层取舍。这是在系统设计需要考虑的问题。

回到西餐厅的例子,在业务空闲的时候,餐厅提供的服务可能包括热毛巾、个性化菜单、豪华餐具,甚至跪式服务。而在繁忙的时候,为了能够提高流转速度,餐厅可能需要一份特殊菜单,这份菜单上没有过多的选择,只能像做选择题一样,选择情人节套餐A,B或者C。对于修空调来说,空调的维修需要3天,这个是无法更改的。但是,我们在维修的同时,是否可以为用户提供一个风扇,缓解目前的状况。一切方法是为了降低用户的愤怒指数,而互联网产品的差异化设计的目的也是一样的。

另外一个需要在系统设计时考虑的重要问题是“可扩展性”(scalability),也就是说当系统的压力持续增加时,需要能够通过扩展硬件来达到容量的提升。理想的情况是线性扩展,也就是硬件的增长和用户压力的增长是成线性比例的。但是,大多数系统是做不到线性扩展的,更差的是,很多系统在设计的时候完全没有考虑“可扩展性”,从而无法突破单机的性能极限。

现代的互联网系统基本上都是“分布式”的,把系统划分成前端显示层、业务逻辑层、数据存储层等几个部分,在各个部分能够进行不同策略的负载均衡。例如数据库可以采用主从备份和均衡、数据分片等方案,WEB前段可以使用squid/nginx等进行负载均衡,甚至采用DNS全局负载均衡等方案。

3.2 开发和测试

互联网是一个快速变化的世界,我们所面临的用户、环境每天都在改变,这就要求项目的技术团队能够适应这种情况,要能够做到“快速迭代”。不同于传统的软件项目,动辄几个月甚至几年的项目周期,互联网项目通常是以周为单位进行迭代。

在大多数情况下,一个网站在应付日常的特性修改的同时,也在酝酿大型的版本升级。因此,技术团队负责人需要对版本进行很好的规划。在开发过程中,借助SVN等版本管理工具,对主线版本和分支版本进行管理,保证日常的BUG修复可以归并到主线版本中。对于需求文档、设计思路、BUG记录等,则可以借用WIKI等工具。通过快速原型的构建,使得产品经理和其他内部客户能够尽早地体验系统功能,及时发现问题和明确方向。

开发团队应当在工作中逐步总结出编码规范,例如,HTML/CSS制作规范、PHP/JAVA编程规范等等。这里要特别强调的是,互联网应用中的安全问题是非常突出的,这方面需要在开发过程中特别关注。常见的互联网安全问题

相关文档
最新文档