这段时间我听到了团队里的一些抱怨,技术人员抱怨市场项目人员为什么一直在变、反反复复,而市场项目人员也在抱怨我们的产品无法满足个性化的需求。最近有一个客户的项目,开始感觉很简单,价格很可观,但是在执行的过程中,需求在不断变化,导致产品很难满足个性化的定制,一边是客户的抱怨,一边是内部的抱怨。今天和客户开了一个沟通会,不到一个小时的时间,需求合理明确,开发毫无压力,怎么会这样?
在这个过程中,除了沟通协作的问题以外,我发现我们缺失了三种能力:
1、前方需求沟通,没有控制住变化!缺少的是看透表象抓本质的需求分析能力!
2、后端技术开发,不知如何支持变化!缺少的是立足现在看未来的架构设计能力!
到底什么是合格的需求分析能力?我认为需要具备两点:
1、对业务、产品和技术有足够的理解,否则无法第一时间结合实际产品,提供必要的咨询方案。
2、对需求深度挖掘的能力。
举个例子,一个顾客来饭店要了一碗炸酱面,你没有炸酱面怎么办?你是告诉对方不好意思请换另一家呢?还是会继续会探问?肯定我们会探问,说不定这个人就是饿了,点了这个面,吃米饭也可以;也许这个人来北京想吃个北京的特色小吃,点了这个面,其他特色小吃也是可以替代的。当我们对于需求的深度挖掘后,我们才能给对方提供可接受的替代方案,而这个方案是绝对对我们有利的。
上周五我亲身经历了这样一件事,客户提过需求来,要这么改,那么改,而且三天后就要用。我们的技术团队在评估后给与回绝,这么短的时间是无法完成的。但是客户的确需要,不搞定可能就失去了一笔大生意。客户跟我打电话沟通,他想要的就是把不需要登录的课堂测评系统变成能记录用户身份的测评系统,最终给考生一个成绩报告。原来他的所有需求都是为了完成出一个成绩报告这样一个目的。我给他提供的方案是不改系统依然可以通过稍微的手工工作就能很快出报告,对方很欣然的接受了,搞定!
只有深度挖掘需求,探寻需求最终的目的,你所提供的方案就不会偏离客户的需求,而且方案对自己有利。
3、沟通的能力。不要一口回绝,也不要轻易答应,在拿不住主意时,通过良好的沟通缓和下来。出现问题也需要沟通来很好的解决。
如果说拥抱变化是一种态度的话,那么支持变化就是一种能力。而系统设计的能力恰恰是如何更好的支持变化,满足日益个性化的需求。
我认为一个好的系统设计的能力,需要以下三种能力,而且也可以说架构设计的三个过程:
1、举一反三
当一个需求被确认开发的时候,设计人员首先要做关联分析和延展性分析,这个需求功能可能会和哪些功能关联?这个需求是一个个性化的需求还是一个普遍的需求?这个需求未来会不会出现演化?会演化出哪些类似的需求?
做设计第一个步骤就是举一反三,以点带面,考虑到尽可能多的情况,只有思考的多,预测的多,才能更深刻的探究需求背后的本质,做出更符合长远发展的设计。
2、抽象
以不变应万变,变化的是需求,不变的是共性和规律。第一步的举一反三,将一个需求延展成多个需求,这些需求必然存在共性,很好的把共性和规律提取出来就是考验我们的抽象能力。以CMS系统举个例子,一个发布新闻的需求过来,举一反三就是未来是不是还有发布其他内容的需求,比如视频,图片,病例,文献等等,他们的共性是什么呢?无非都是内容,包含了最基本的标题,标签,正文等这些信息,只是内容类型不同而已。再比如一个调研的需求,调研和投票是不是很相似,这个功能以后会不会被应用到文章页面,会不会被应用到活动页面,他们的共性是不是可以提取出来,以便未来扩展。
3、(扩展性)设计
经过了前两步,我们即考虑到未来的变化,又找到不变的规律,接下来就是我们如何通过一个良好的扩展性的设计来支持可能面临的变化。而扩展性的设计需要考虑哪些因素呢?
一个核心是稳定的(抽象的共性);多个扩展点是可插拔的(举一反三的处理);一套开关体系是可实施的(灵活的开闭)。
时代在变化,市场在变化,客户也是多变的,不能因为变化而产生混乱,也不能因为变化让我们内心恐惧,因为只有变化才会给那些有准备头脑的人予以机会,而我们需要做的是拥抱变化,甄别变化,在变化多端的需求中找到最本质的不变的规律,通过我们的设计能力,构建一个“以不变应万变”的系统体系。
(提醒:不要从设计不足走向过度设计,避免过度设计要把产品发展周期和成本分析考虑进来,寻求在一段可控的周期内的投入产出比)