2016.06.30 丨 壹佰案例
精品APP探索—如何高效研发
2016.06.30 丨 壹佰案例
本篇文章来自于腾讯SNG和msup共同举办的技术开放日移动端专场出品人华有为的分享,由壹佰案例整理编辑。
开篇之前我想引用马化腾的一句话“我所期望的产品经理是从技术晋升而来”,我对这句话的理解是技术人员必须具备产品的视野。以前做开发的时候经常被老板批评没有产品意识不懂产品。都说BAT三家公司各有侧重,而腾讯在产品方面有独到之处,本次分享的主要内容就是对如何进行精品APP的高效研发进行的一些探索。
精品APP的高效研发需要要做到这三点:数据推动改进、积木式开发、为自己而设计。
数据推动改进
先看一个闪屏的案例,我们发现某些场景下,App首次打开的时候没有闪屏,在进一步验证,发现了设计上的问题,即当用户广告设定出现前启动时,首次启动App将不会有本类闪屏。从数据上看,有75%的用户每天启动2次及以上,在这个case中,广告的曝光用户数必定小于75%,但期望是与日活用户相当。因此,类似的问题也可以通过数据监控来及时的发现。
再看另外一个数据驱动的案例,我们研发了一套基于用户行为的视频内容评分系统,在这个之前内容的评分是通过用户点“★”一星到五星来计算,但是评分有一个很明显的缺陷,用户参与度比较低,不到万分之一的人会参与打分,因此这种评分误差会比较大。基于用户行为评分的机制是在综合考用用户观看过程中的行为来作为权重打分, 比如拖动相关,用户通过拖动来查看是否有感兴趣的内容,如果有,那么通常会继续看下去,那么这个分就会高。又比如在看一个节目的时候出现卡顿,可依旧坚持看完,说明用户很喜欢这个节目愿意忍受播放不流畅的现象,这也是权重之一。通过基于用户行为得分研究,以及用户对应的标签属性来做推荐之后,播放量与播放时长有了较大幅度的提升。
积木式开发
随着技术、资本市场、营销市场等外部环境与技术日渐成熟,很多产品需要整合各方面的技术和资源。SNG的积木式开发做得比较多,我们在开发新特性的时候,为了后续的扩展与维护与积木共享,也是遵循组件化的原则,将能抽象的模块进行提炼,经过长期的积累,有网络、云、流媒体、等各种种类100多个比较成熟的组件,很多产品的关键功能都是在这些组件的基础上快速构建,比如播放器,网络通信层直接复用,从而大大提高了研发效率。
我们在看个组件化的应用。很多APP遇到的最大问题是程序的稳定性(crash)和性能方面的问题(数据来源AppStore的用户评论),对于Crash,我们的产品都集成了补丁修复组件,因此,一旦发现稳定性问题,可以快速动态发布补丁修复,二不用等待下个版本。 虽然硬件设备逐年在不断提高,但性能依旧是很多App的最大瓶颈。就我自身而言,一个印象比较深的案例是,我在386上跑的Windows上做了一个VB与VC的对比试验,发现相同的逻辑,VB比VC的程序慢100倍,语言上的差别导致的性能差异很大,现在,我们仍然有很多组件是为了提升性能用汇编去写某些模块,其性能比C还要快10倍。 除了使用高性能的组件外,对于性能我们还有一些发现与监控的组件,通过积木式的组件整合,我们能及时发现存在的性能问题。
在问题追踪方面,我们还有定向日志组件,比如程序中出现某种不能直接定位问题的错误,需要分析详细日志,这是,可以通过通过后台下发一个指令对这一类错误的用户日志进行采集,从而大大提高问题解决的效率。
积探索用户的真实需求
举个例子,有一次我孩子看见邻居家门口有一个订牛奶的小箱子,她说也希望能够牛奶,是因为他喜欢喝牛奶么?其实不是,她只是是觉得么门口有个订牛奶的盒子比较感觉比较酷,他也想拥有一个这样的盒子。所以其实我们看到的用户需求也许并不是用户真正所需要的。
在Apple watch刚出来的时候,我们看到在AppStore上,每天都有些反馈,质疑为什么不支持watch,这个是用户的真正需求吗?当有的产品具备这个功能后,其实使用的用户基本可以忽略。
图片显示的是一个错误提示,这个早期的程序设计
在看下改进版本,对比下
这个改进看起来要友好的多。我们希望程序能尽量的帮助用户解决问题,在这个新的交互中,我们可以看到,用户有申诉与重试的机会,来尝试解决问题。
图中的是视频网络相关的架构,这里描述下App相关的策略,App侧用的是现有的成熟组件,首先我们会就近IP直接接入,当出现问题时,比如IP不通时,再尝试用域名,一个域名解析通常可能需要100-300毫秒,在使用的过程中,链路仍然可能出现低速等情况,这是就需要用到低速阀值时的链路切换策略,采用这些策略之后,我们的链路成功率达到了99.9%以上。自己就是用户,将各种场景考虑提前到,并利用现有的成熟组件与思路,把每一个点都做到极致。
回顾
一、数据驱动。量化目标,用数字说话
二、积木式开发,多使用或创造一些积木,享受技术沉淀带来的成果。
三、为自己设计,自己及时用户,解决“我”的问题。
现场问答
:程序员要怎么培养自己的产品视角?
:多用产品多体验,逐步寻找感觉。
:采集用户和保障用户隐私的矛盾如何解决。
:用户GPS位置等信息,公司有完善的安全处理规范,比如加密传输,仅本地使用等。
:稳定性中的异常捕获怎样做的?
:异常相关通常是2类,可捕获的与不可捕获的,现在有成熟的组件。对于可捕获的,做法比较常见,上报异常的堆栈然后分析就行。对于不可捕获的,拿不到堆栈,大致原理会在程序启动和结束有标记,并且或在运行是做些标签,比如IO、内存等情况,程序崩溃后,拿到对应标记分析,然后结合定向日志来定位问题。