APP开发涉及到的哪几种技术?

文章分类:APP开发问答 发布时间:2017-03-29 原文作者:Shi Yongfeng 阅读( )

最后,在技术问题的选择上有几个误区陈列如下:

1.架构贪图完美前言 —— 开始别想架构,把眼前的问题解决好最重要 
2.先进的技术和大众的技术 —— 稳定的技术是创业初期的福利,有更多的技术支持方案和选择,有成熟的人才
3.完善考虑仔细斟酌 —— 快速上线,快速实现,过程改进,才是最佳方案
4.团队越牛逼越好 —— 牛逼的人是否在一线真的干活最重要,稳定的合作伙伴远比牛逼重要
5.用什么语言 —— 这个看看培训学校在培训什么语言就知道了
6.代码一劳永逸,能够支撑一年半载 —— 别做梦了,系统代码要能够承担从零开始写的代价
外包还涉及到开发时间,需求变更解决机制,沟通机制,上线测试,后期维护和服务等诸多内容。

另外几个画外音:

1)系统,即便是我们自己的,每8个月更新30%的代码,14个月更新90%的代码。系统是不断升级和迭代的,找到这样的人(自招或者外包)。不要找固步自封的团队;
2)系统的外部依赖也是变化的,例如:微信的卡券,1.2, 1.4, 1.6, 1.9我们跟着经历过来的,他们增加减少和调整算法结构,我们都是跟着变化的。不要考虑一蹴而就的技术实现方案;
3)外包公司和自己团队核心面临的问题,过了8个月,很多代码很多架构没人敢动了;业主或老板不愿意承担改动的责任。要知道软件项目没有人一开始就“门清”的,用一个完整的解决方案解决12个月以上的事情,找死。业主和老板,要承担基础代码变动带来的“不确定”性。你不需要懂,需要的是担负相关责任,和技术一起平滑过渡,N多人不理解原则才出问题的,而不是没有合适的团队或者人;
4)12个月,代码一定要重构,找你信任的CTO才是关键。任何一劳永逸的态度,都会出大问题。

新创业的兄弟,我在技术上的建议是:

1)你们的CTO如果没有见过1000万访问的配给(团队+设备),你就等等。如果你的公司成长到了日活跃用户100万(客户端),你的CTO目标是5000 - 1亿规模的CTO,否则后期成长肯定有问题。

2)找大公司的大牛技术做顾问;找一线技术做技术经理。解决实用和前瞻,现在和未来负载的综合问题。

3)在你不需要技术团队跟屁虫一样跟着的时候,选择外包就好了。技术顾问+小型外包适合非技术型创业团队。因为技术顾问都是你信任的朋友。如果没有,去找一个值得信任的朋友。

   

在我们接手过的项目中,发现最大的问题其实是金主们(甲方)一 是不明确自己的需求二是 这个需求的难易实现程度。当然这也是会被坑最主要的原因。

但这个问题有木有办法解决呢?是有的,全看你找的技术团队。接下来告诉你在选择流程里面避坑的方法。

1.沟通需求
一般来说第一次都会面聊沟通需求,此时注意在告知了App的核心功能后,对方是否帮你扩展,丰富你的需求,并提供解决方案。【举个栗子,你是做社交的App,对方会问你在第一步注册的时候,手机号码,邮箱,微博,微信等常见登陆方式,你要选择哪几种?】
必要时候会要求你画简图,避免双方信息沟通不对称。


2.项目开发文档及报价
前期沟通后,外包团队都会出一份详细的项目开发文档及报价,囊括项目各个功能点,功能点的实现效果,所需人员个数,所有的时间节点以及需要你给到的支持,价格。你要评估这份开发文档是否适合你,看什么,看时间节点。

针对App来说,大概的时间节点描述一下,出原型—确认原型—出设计简单的交互—确认交互—出初步设计风格—确认设计风格—开始研发—前期检查—中期检查—完成—测试—(是否有维护)—交货

时间周期和价钱都确定无误的情况下,就可以签合同付定金开始做了,注意合同上要写清不按时交货的赔偿等等。

3.选择外包公司还是私人外包团队
归根结底,还是一个实力的考量。并不太认同楼上说的外包公司就一定靠谱,私人兼职团队就一定不专业的看法。

对于外包公司,最基本的是看案列,是否做过较大型成熟 or 知名的项目。
对于私人团队,就看团队里的人隶属于哪家公司,BAT占多的话,靠谱度会直线上线。

   

流程:

 

1赞同反对,不会显示你的姓名

管理外包,这其实是个风险管理的问题,可以分成以下三个阶段:
1:开始前,如何降低风险
2:进行中,如何控制风险
2:风险已发生,如何尽量降低损失

 

我们先来聊聊第一个:开始前,如何降低风险

首先,从自身来看,如果以下两个问题没弄清楚,外包失败一半的原因其实应该算在自己身上。

 

1-自己要清楚要实现什么

经常有人私信我,“做一个微店那样的网站多少钱?”,“做一个网站要多少钱?”,“做一个京东3万块钱够么”。

所有在外包的时候,只能提出这样的问题的人,都应该先停下,不要去找外包,要先整理清楚自己的需求。你要先弄清楚:

1)你的核心流程是什么?
是用户购买?是分享转发?是发布信息(文字,图片,语音,视频)?
就拿最简单的登录流程来说,都分为手机号+验证码登录,手机号+密码登录,邮箱+密码登录,第三方登录。

2)最简单快速可验证核心流程的产品是什么?
比如facebook, 最开始核心流程就是就是对两张人脸评分,它的功能也只实现了这一点,然后迅速爆红于校园。

3)所有你想做的事情当中,可做可不做的有哪些?
这个其实是对问题2的补充。
Stack overflow创始人Joel在他的《软件随想录》中曾经提到过,那些自己出于上线压力不得不从本期版本中挪动到以后版本的功能,后来被证明从来没有上线过,而这,被他认为自己做过最正确的事情之一:不要为了一些可有可无的功能而浪费时间精力。

 

以上三个问题,以程序员客栈3.0为例,我们会这样做:

1)我们的核心流程:企业方预约开发者做短期雇佣

2)最简产品形态:

· 页面:可预约的程序员列表,预约页面,预约进展页面

· 流程:企业方预约(具体时间,地点,工作内容)-开发者接单 - 企业方托管费用-双方联系,开始开发-开发者提交完成-企业方评价

3)在验证阶段,可有可无的需求:
所有通过现有其他工具可以实现的需求,以及对核心流程无关键影响的需求,我们都定义为现阶段可有可无的需求,如:

· 限制开发者接单次数

· 限制企业方发布次数

· 上传文件,提交每日进度

因此,我们在原有程序员列表,个人履历页的基础上,产品最终形态和交互如下:

 

2-知道实现一个产品的流程,以及一般的时间安排

避免节奏踏错,浪费时间和人力

实现一个互联网产品,一般的流程如下:

· 第一步,将想法变成产品文档(起码包括原型,流程图,页面交互图,页面说明文档),一般是专业的产品经理来做这件事情。   因此,你首选需要找到的,是一名产品经理。

· 第二步,根据原型页面做出UI设计,提供设计文档(包括设计效果图,原稿图,切图)。因此,你需要一名UI设计师

· 第三步,根据你的业务逻辑和数据要求,做出后台系统,提供接口。因此,你需要一名后端开发者

· 第四步,根据原型,设计,开发出用户界面(网页,iOSAndroid都是此类),因此,你需要一名前端开发(Web前端,iOS,Android等。)

· 第五步,前后端联调测试,这个时候需要测试人员根据文档做出测试用例。测试成功后,才可以部署上线。

 

这样,以一个最简单的APP研发规划为例,可以做出以下的时间规划:

 

3-知道如何去选外包合作伙伴

再次强调前面两点都准备好了,我们才需要考虑寻找外包合作伙伴的事情。如果自己都还没想清楚,就开始找人来开发,多牛逼的开发者,也不能帮你成就一个可以正常上线的产品。

在找外包合作伙伴时,如何来预防项目失败呢?我们的经验是以下3点:

 

1:有经验的人
他最好做过类似项目,已经积累了成功的开发经验,而不用从头开始学习你需要的功能如何开发。
否则,不仅失败可能性很高,你需要支付的金钱和时间也会成倍上升。

我们和某些程序员聊过,他们会这样来对私活定价:

自己很熟悉的,难度低,时间快,价格低

自己知道,但不熟悉,需要去研究一下的,难度中,时间中,价格中;

自己不知道,还需要去寻找解决方案,然后来学习的,难度高,时间长,价格高。

 

因此,找到有经验的人,他会很轻松高效,并且便宜地帮你完成你需要的功能。
因此,我们也把这个认识融入到了客栈开发者个人的展示,以及项目程序员对接过程中,来提高成功率。

 

2:靠谱
他最好有良好的合作记录,业界口碑不错,老客户多。能看到老客户对于合作的评价更好。

技术很牛,态度不好的开发者我们也遇到过。有接单之后突然没有人影了的,我们只能尽快对接下一位;有遇到一点挫折,就从项目经理开始埋怨到发包方的;有闹脾气最后不愿意合作,源代码也不给了的。。。。。。这些人,即使技术很牛,也不适合合作,会给项目带来不可预估的时间甚至金钱损失。

这个是我们非常看重的一点,因此,我们会展示所有签约开发者的过往评价,成功次数和成功率,来帮助企业方做出更正确的判断。

 

3:有时间
第三个潜在的风险,就是开发者没时间了。技术很牛逼,态度也很好,但是最近有事在身,没有办法来接单,如果接单,那么失败可能性很大。

为了避免这个影响用户在客栈上雇佣开发者的成功率,我们专门研发了“Ping”功能,有时间想接活的开发者每天可以把自己Ping上首页,在对接项目时也会得到优先推荐。

 

4:细致到每周的交付计划
如果自己去找外包,签订合同是基本要求。
但是在签订合同的时候,我们比较容易忽略的是具体的交付计划,以及根据交付计划来付钱的规则。

考虑到外包比较多的是每周开会,建议在合同中也要规定要每周的交付计划,双方都按照这个交付计划来推进。
这样,在之后如果发生延期,从每周计划上便可以定位原因,理性解决。

 

总结
如果在发布外包之前,你做好了以上准备:
1)明确的需求
2)清楚需要完成哪些工作
3)选择了合适的合作伙伴:经验,靠谱,有时间。那么你的成功率会大大提升。

 

1赞同反对,不会显示你的姓名

 

1. 抓主要矛盾


首先,你得有一个明确的需求,最好有一个需求文档(我曾经给一个朋友发了“你有需求文档吗?”然后他消失了很久没回消息。后来他告诉我,他去百度了一下什么叫做需求文档……)。然而,需求文档一定是只关注最重要的那个功能和流程。也许这个行业有100个问题,也许你有救世主的才华,但在你的产品第一版,请务必只解决那个最迫切的需求。否则你将面临产品胎死腹中,或者失去市场先机的惨痛局面。

你不必去百度需求文档怎么写,格式是什么,那都不重要。你就按照你内心的想法,用其他人能看懂的文字表达出来就好了。还有,需求文档不应该超过一页纸,否则一定是你想要的太多了,请砍需求。由于公司业务的原因,我帮不少创业者分析过产品需求,做的最多的一件事情,就是砍砍砍。

 

2. 请个 CTO 不如招个产品经理


无论你面临的是千亿级的市场还是万亿级的市场,技术在最开始都不是一个重要的因素。要知道淘宝最开始的程序也是个渣渣,后来是完全重写的。请一个 CTO 是很费时费力费钱的,但普通的产品经理有很多。招一个产品经理,帮你把想法和需求整理成产品文档,画出产品原型图。这个过程能够很好的帮助你梳理自己的思路,有什么想法应该在这个阶段探讨,确定。在这个阶段多花点时间值得,对于后面的工作是非常重要的一个基础。

 

找产品经理也不需要名校名企BAT背景,有一定工作经验,能写文档,能画图就行了。产品经理往往是跟过软件开发的,他可以对后续的工作给你很多建议。甚至他还可以帮你介绍程序员。

 

3.设计没有你想象中那么重要

 

除非你是做一个以设计为导向的产品,否则对于第一版的产品来说,设计真的不重要,只要不太丑就行。我可以列出一堆知名企业的 APP 在最初几个版本的设计都是惨不忍睹,例如 京东,一号店,寺库等等。在初始阶段,能解决问题比赏心悦目重要太多。所以在产品开发的时候,不要太过于纠结设计的问题,虽然你很羡慕隔壁做的精美绝伦的 APP,但那都是后面的事情。找个设计师,快速把产品经理的原型图变成产品界面,体验一下将来产品的感觉,这很重要。

以下截图是京东 APP 的早期版本,大家感受一下~

 

4.软件开发的标准


对于普通的软件产品来说,开发已经是非常工业化的流程了。无论你是 APP,网站还是微信,只要你能想到的,基本上都能做,而且大部分软件开发者都能做,不是什么高科技。除非你说想再做一个微信,基本上都不太贵。有一个粗略的判断标准:如果你的产品不能以10万元以内的成本,在三个月之内做出来,那么你的需求有问题或者你找错了人。

 

在开发的过程中,要控制自己什么都想要的欲望。软件开发了一半,看到别人有个新功能,然后你去找程序员说能不能加这个,加那个……相信我,这时候程序员最想干的就是拿键盘拍死你。要把功能的需求定在产品阶段,产品原型确定了,就尽量不要改。先做出来看看。

基本上,你不必担心实现你想要的功能会不会很贵。对于绝大部分的创业项目,前期的研发成本应该是不高的。所以,有想法就尽快试,失败的成本估计也就是北上广深的一个厕所,哈哈。

 

5. 要能容忍 Bug 的存在

 

所谓 Bug 就是软件的缺陷,所有软件都有,比如头像多点两下就闪退了。天下武功,唯快不破。在目前的创业环境下,尽快推出产品是王道。你测来测去,bug 测没了,用户也测没了。所以,不纠结,主要功能好用就上。当年我也面临过同样的问题,产品有很多 bug,同事都不敢上,后来我硬是让上线了。有 bug 慢慢修,死不了人的。我记得京东最初有一个版本,下单完成后会闪退。于是我每次下单完成以后要重新打开 app 再下单,或者看看刚才买了什么。所以你看人家百亿美金的上市公司都这样,我等屌丝创业者还纠结啥?最近上线的微众银行更是说明了这一点。

 

6. 找外包还是自己建团队?

 

首先讲结论:如果身边没有开发者资源,短期内希望产品上线,先找外包,同时着手建团队。由于大环境的原因,外包在国内成了一个贬义词,很多人被坑过,所以不敢找外包。但从模式上,外包是一个非常好的解决团队资源稀缺的方法。但是我们对外包也要有一个正确的认识,不能期待100分,80分算很好的了,60分也 OK。但是长远来看,外包解决不了后续发展的问题当你有很多需要及时响应的需求,或者很多琐碎的需求的时候,自己的研发团队是必不可少的。所以,如果你是一名严肃的创业者,还是尽早建立自己的技术团队。然而,正如之前说过的,在 A 轮之前,CTO 应该都不是一个关键因素,所以不急。找几个踏实做事的开发者实现你的想法比较靠谱,也不必追求名企名校BAT,基本上在早期阶段,很难。

软件开发是有一个流程的,以上几点基本覆盖了最常见的软件开发流程:需求,产品,设计,开发,测试。按照这个流程走基本上不会出大问题。如果有能力,这些流程是可以合并的。例如你运气很好找了一个“全干工程师”,文能写文档,武能编代码,那么恭喜你,产品开发周期会缩短很多:)

原文来自:Shi Yongfeng