2017年3月31日

记第一次出差(工作篇)

我被派到成都天府软件园的一家软件公司出差,他们打算集成 FineReport 的某些功能。

客户需求描述:

客户自己有一套 saas 软件,主要提供在线制作简单报表的功能。问题在于,客户用的是mongodb,无法实现表间查询(mongodb 中的集合,相当于 mysql 中的表),即不能实现如下效果:

select department.name, count(person.id) from department,person where department.id = person.depId group by department.name order by department.name

他们想利用 FineReport 中的处理功能来实现这样的查询效果,然后集成到自己的产品中。不要设计器,也不要决策平台及渲染结果页面的功能。我的任务,就是教他们如何使用 API 来实现这个需求。

工作过程记录:

29 号

下午到达客户现场,与客户沟通,明确了需求用 MongoDB 实现一个代码生成 cpt 模板的 demo,实现上述SQL语句的效果。帮助客户搭建运行环境,确保生成的 cpt 可以正常使用。由于之前已经写过一个用文件数据集生成 cpt 文件的 demo,所以这个 demo 难度应该不大。

我卡在“用代码创建 MongoDB 数据集”的问题上,研究了好久,直到晚上十点多才搞定。这样一来,预计第二天上午就能交付了,然后睡了个安稳觉。

30 号

给这个 demo 逐行添加注释,帮助客户理解每行代码的作用,并帮助客户部署运行环境,验证这个 demo 的可用性。

紧接着,第一次需求变更面临大数据量的情况,可能会有上千万个模板存在,而服务器中保存上千万个 cpt 模板文件是很难处理的,但将上千万条数据保存到数据库中却很容易。客户希望跳过读写 cpt 模板的步骤,直接在数据库中存取配置信息。经过研究,可以使用“程序网络报表”实现相应的功能。

(小插曲:下午,客户向我们公司的销售反映情况,说我是个新人,很多关键问题都不知道,需要“再去问一问”,这样沟通起来的效率很低。如销售所说:“他们需要我们整体架构最熟悉的研发和他们对整体的对接方案。”我被嫌弃了。我主动加班,超额完成了客户一开始提的任务,还被嫌弃了。明知被嫌弃,还必须做好手头的工作,继续跟客户沟通)

通过与公司资深研发人员讨论,我在下班之前完成了这个 demo,并告诉客户如何使用。客户这边的研发要去研究一下,明天告诉我能否正常运行。圆满完成任务,我都准备买返程机票了。

这还没完。客户又加了新的需求(二选一):1、希望通过API直接拿到报表最终数据,不使用决策平台展示报表,他们自己去做界面;2、如果第一条不行,希望可以演示如何调用API来设置生成报表的样式,要能支持他们产品的所有样式。以上两个都需要完整 demo。这个需求很有难度。

客户爸爸反复变更需求,让我很不爽。有得寸进尺的感觉。最后提的这个需求,我不知道如何去做。我并不熟悉 FineReport 的完整实现,第一条心里没底,无从下手;我做用代码生成 cpt 的小 demo 时,因为不熟悉相关 API 的使用(正常情况下用不到,因为这些功能都集成在设计器里面),耗去了一两天时间,若要按照客户需求,给出生成各种样式报表的 demo,一两周的时间都不够用!我向我们组的产品经理汇报了情况,可以直接拒绝这个需求。

31 号

我拒绝了昨天客户最后提出的需求,没想到他爽快地接受了,并且告诉我任务已经完成。离开客户现场。收拾东西,向机场进发。

后来 neil(带我的老大) 与客户电话沟通了下,确认客户提的需求是可以实现的。客户只需要拿到结果报表的数据,自己转 json。neil 写了一段 demo,我发给客户这边的研发,并解答一些问题。我上午才跟客户说,这个需求无法实现,现在就被打脸了

最后,拉了一个讨论组,让客户的研发可以直接跟我们公司的研发、产品经理以及讨论后续问题,必要时可以把技术支持拉进来。

(下午,因为是工作日,客户的事情虽然搞定了,公司这边的任务还是继续做。于是我在机场的星巴克改 bug……)

经验总结:

设身处地为客户着想,弄清楚客户需求。客户频繁的需求变更,看似无理,其实很自然。总之是,希望找到解决问题的最优方式。客户一开始描述出来的需求(用代码生成一个 cpt 文件),其实词不达意,不是他真正想要的。所以这里就有一个真理——客户无法准确描述自己想要什么。这个时候,就需要站在客户的角度,设身处地为他们考虑,尽量弄明白客户真正需要的是什么。跟谈恋爱一样一样的。直到现在我才搞清楚客户真正需求,也就是本文开头描述的那个。

出差之前,前期沟通非常重要。客户一开始描述的需求很简单,但是,他们希望过来出差的是核心研发。由于不知道这个情况,公司派我来出差,就难免让客户失望,以至于发生一些不愉快的事。

技术实现问题,先问公司带我的研发,其次才是产品经理。30号下午,我带着一点小情绪,直接跟产品经理反映情况,错判了实现用户需求的难度。如果先让 neil 和客户沟通,确认客户的需求是能够的满足的,就不会出现后面的波折。

作为 FineReport 的研发,我还太嫩。对产品的核心功能实现并不熟悉,项目中的很多地方对我来说都是一个个“黑箱”,因此无法从容解答客户问题,快速给出解决方案。

You may also like...

No Responses

  1. Albert说道:

    看了这篇文章,我理解了你发的 微信朋友圈里的那篇了 追本溯源,防微杜渐。需求理解上的一点点偏差,若不及时纠正,随着项目的开展,会被放大无数倍。
    最近几天的加班本可以避免,徒劳而无功。下次长记性。

    ps: 能否通过第三方授权方式进行评论权限获取?比如关联 git/qq/wechat/weibo

发表评论

电子邮件地址不会被公开。 必填项已用*标注

错误:您的PHP不支持GD图像!

联系您的主机商,询问PHP支持GD图像的问题.

错误:您的PHP不支持imagepng函数!

联系您的主机商,询问PHP支持imagepng函数的问题.