过去,在传统软件行业里,开发的流程一般是:先作需求分析,然后确定功能,后实施开发。也是说,需求分析之后,需求基本很少变了,会在相当长一段时间内,维持一个稳定的需求。

  但是,在进入互联网软件时代后,事情已经发生了变化,仅需求而言,“朝令夕改”已经不是什么新鲜事,作为系统的实现者,我们当然都希望需求越稳定越好,但那仅仅是“理想”,甚至,有时仅仅是“梦想”。因为,对于一个尚未成熟的市场,尚未成熟的互联网产品或者尚未成熟的团队来说,需求变动的推动者,可能是市场,可能是用户,也可能仅仅是老板的一句话,你无法说这个改动是对是错,很多的情况下,我们也没有那个精力和时间去争辩谁对谁错,对于我们而言,切实可行的一条路,是:摆正心态,积极应对。

  这是一篇有关“如何应对需求变化”的作团队感悟,其核心思想是:在互联网软件时代,需求变化是软件开发的一种常态,我们再也不能用开发传统软件的思维来照搬互联网软件的开发。互联网软件“需求变化快,开发周期短”,从各个方面都要求团队内部要建立起应对这种快速变化所需的组织、流程、以及沟通氛围。作为底层的实现者,对于需求变化,很多情况下是我们决定不了的(要么是老板说了算,要么是用户说了算,要么是竞争对手“说了算”),这时,对于我们而言,只有在力所能及的范围之内作到适当的架构灵活和适当的组织灵活,以积极的心态和主动的方法来应对这种变化才能把产品务实的一步步向前推进。

  引入正文----

  写程序,痛苦的是什么?是辛辛苦苦弄了半天,写好了,人家的需求却变了,刚写好的代码没用了,全部删掉。曾经以为,只有互联网软件里,才会比较经常的出现这种情况,但是,跟一些朋友聊了之后,才知道,原来,现在的传统软件行业里也存在同样的问题。不管这个需求来源于哪里,程序员除了抱怨一下,发一下火(还要看有没有那个“资历”)之外,该作的,还仍然要作,一个都逃不掉。

  我们的开发中,也会经常遇到这样的问题,面对不断变化的需求,我们有过懊恼,有过气愤,有过不平,但当所有的情绪都发泄完了之后,静下心来想一想,为了产品,这些新需求还都挺有道理,都必须来实现。

  于是,我试图想在这篇文章里,分析和总结一下有关需求变化的前因后果,还有我们目前的作法,以及我们如何看待需求变化这件事的,希望能给大家带来一些帮助和启发。

  对于我们凭一己之力无法改变或者无力决定的事,应该秉持两种心态:

  1. 要以积累的心态去用自己的实际行动对它产生积极的影响力;

  2. 既然我们无法改变它,只有接受它,适应它,再慢慢引导它。

  对待需求变化,也是同样的道理。

  很多的需求,为什么会有,为什么会变,可能本身是没有太多道理的,老板说这个得改一下,那个得改一下,在产品没有推向市场之前,在用户没有终体验之前,你也很难说他的这个需求是不对的或者不合适的,那这时怎么办?我们的策略是:争取一下,沟通一下,想想其它办法,实在不行,什么也不用说,动手作吧。当然,这是一种被动应对的方式。

  我们认为,这是没办法的事,一个团队,需要成长才能成熟,一个老板,也同样需要成长才能成熟。只有越来越成熟了,才可能会越来越多的提出更合理的更稳定的需求,而反之,当他不成熟时,他作出的需求谈不上稳定和合理,那这时,是不是我们不要作事了,是不是只有散伙了?我想,动不动这样去想的朋友,还没有真正悟出开发者应该具有的觉悟:其实,老板都差不多的,当你换了一家后,你可能也会遇到同样的问题,你能作的,不是逃避,而是正面面对它,如果他的想法不成熟,帮着他成熟,如果他坚持,照作,让事实教育他。当事实一次次告诉他,你的想法和作法才是正确的之后,他才会更愿意放权给你。而在此之前,你没有其它更好的办法,只有忍着。

  也许,我们经常会有这样的抱怨:“我们不是约定好了吗,按XXX来作的,怎么又改了”。我想郑重的告诉大家:不要相信约定,对于一个尚处在生存期的项目而言,你一切努力的目标,都是为了项目生存和发展,而不是为了一个“浪漫的约定”。市场和用户,只看需求,不会看你所谓的“约定”。

  从另一方面说,很多时候,并不是老板自己想作出需求改动,他们可能是受压于市场环境,受压于同类产品竞争,也可能是受压于用户,总之,方方面面的原因,都可能造成需求改动,所以,我们没有理由、也没有必要一直坚持在“需求需不需要改动”这一点上来回的扯皮浪费时间,我们更多需要作的,是要考虑一下,在我们团队内部,以何种开发方式,以何种流程,以何种组织架构来灵活适应这种经常性的需求变化。

  除了上面所说的被动应对,还有一种主动应对的方法,那是,作为系统开发者,我们自己要不断的使用我们自己的产品,不断思考我们的系统需求,在你使用和思考的过程中,很容易发现一些极可能带来变化的需求,这样,你在设计和实现时可以提前规避。不要认为一个系统你开发完了,是完事了。很多的细节完善,其实是在你第一遍开发完成之后再慢慢添加的,而如何才能发现这些细节,只有你自己不断的使用自己开发的系统。