相似图片搜索的原理

作者: 阮一峰

上个月,Google把“相似图片搜索”正式放上了首页。

你可以用一张图片,搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。

一个对话框会出现。

你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图片是美国女演员Alyson Hannigan。

上传后,Google返回如下结果:

类似的”相似图片搜索引擎”还有不少,TinEye甚至可以找出照片的拍摄背景。

==========================================================

这种技术的原理是什么?计算机怎么知道两张图片相似呢?

根据Neal Krawetz博士的解释,原理非常简单易懂。我们可以用一个快速算法,就达到基本的效果。

这里的关键技术叫做”感知哈希算法”(Perceptual hash algorithm),它的作用是对每张图片生成一个”指纹”(fingerprint)字符串,然后比较不同图片的指纹。结果越接近,就说明图片越相似。

下面是一个最简单的实现:

第一步,缩小尺寸。

将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。

 

第二步,简化色彩。

将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。

第三步,计算平均值。

计算所有64个像素的灰度平均值。

第四步,比较像素的灰度。

将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。

第五步,计算哈希值。

将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序就行了。

 =  = 8f373714acfcf4d0

得到指纹以后,就可以对比不同的图片,看看64位中有多少位是不一样的。在理论上,这等同于计算“汉明距离”(Hamming distance)。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。

具体的代码实现,可以参见Wote用python语言写的imgHash.py。代码很短,只有53行。使用的时候,第一个参数是基准图片,第二个参数是用来比较的其他图片所在的目录,返回结果是两张图片之间不相同的数据位数量(汉明距离)。

这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来了。所以,它的最佳用途是根据缩略图,找出原图。

实际应用中,往往采用更强大的pHash算法和SIFT算法,它们能够识别图片的变形。只要变形程度不超过25%,它们就能匹配原图。这些算法虽然更复杂,但是原理与上面的简便算法是一样的,就是先将图片转化成Hash字符串,然后再进行比较。

昨天,我在isnowfy的网站看到,还有其他两种方法也很简单,这里做一些笔记。

一、颜色分布法

每张图片都可以生成颜色分布的直方图(color histogram)。如果两张图片的直方图很接近,就可以认为它们很相似。

任何一种颜色都是由红绿蓝三原色(RGB)构成的,所以上图共有4张直方图(三原色直方图 + 最后合成的直方图)。

如果每种原色都可以取256个值,那么整个颜色空间共有1600万种颜色(256的三次方)。针对这1600万种颜色比较直方图,计算量实在太大了,因此需要采用简化方法。可以将0~255分成四个区:0~63为第0区,64~127为第1区,128~191为第2区,192~255为第3区。这意味着红绿蓝分别有4个区,总共可以构成64种组合(4的3次方)。

任何一种颜色必然属于这64种组合中的一种,这样就可以统计每一种组合包含的像素数量。

上图是某张图片的颜色分布表,将表中最后一栏提取出来,组成一个64维向量(7414, 230, 0, 0, 8, …, 109, 0, 0, 3415, 53929)。这个向量就是这张图片的特征值或者叫”指纹”。

于是,寻找相似图片就变成了找出与其最相似的向量。这可以用皮尔逊相关系数或者余弦相似度算出。

二、内容特征法

除了颜色构成,还可以从比较图片内容的相似性入手。

首先,将原图转成一张较小的灰度图片,假定为50×50像素。然后,确定一个阈值,将灰度图片转成黑白图片。

  

如果两张图片很相似,它们的黑白轮廓应该是相近的。于是,问题就变成了,第一步如何确定一个合理的阈值,正确呈现照片中的轮廓?

显然,前景色与背景色反差越大,轮廓就越明显。这意味着,如果我们找到一个值,可以使得前景色和背景色各自的”类内差异最小”(minimizing the intra-class variance),或者”类间差异最大”(maximizing the inter-class variance),那么这个值就是理想的阈值。

1979年,日本学者大津展之证明了,”类内差异最小”与”类间差异最大”是同一件事,即对应同一个阈值。他提出一种简单的算法,可以求出这个阈值,这被称为“大津法”(Otsu’s method)。下面就是他的计算方法。

假定一张图片共有n个像素,其中灰度值小于阈值的像素为 n1 个,大于等于阈值的像素为 n2 个( n1 + n2 = n )。w1 和 w2 表示这两种像素各自的比重。

  w1 = n1 / n

w2 = n2 / n

再假定,所有灰度值小于阈值的像素的平均值和方差分别为 μ1 和 σ1,所有灰度值大于等于阈值的像素的平均值和方差分别为 μ2 和 σ2。于是,可以得到

  类内差异 = w1(σ1的平方) + w2(σ2的平方)

类间差异 = w1w2(μ1-μ2)^2

可以证明,这两个式子是等价的:得到”类内差异”的最小值,等同于得到”类间差异”的最大值。不过,从计算难度看,后者的计算要容易一些。

下一步用”穷举法”,将阈值从灰度的最低值到最高值,依次取一遍,分别代入上面的算式。使得”类内差异最小”或”类间差异最大”的那个值,就是最终的阈值。具体的实例和Java算法,请看这里

有了50×50像素的黑白缩略图,就等于有了一个50×50的0-1矩阵。矩阵的每个值对应原图的一个像素,0表示黑色,1表示白色。这个矩阵就是一张图片的特征矩阵。

两个特征矩阵的不同之处越少,就代表两张图片越相似。这可以用”异或运算”实现(即两个值之中只有一个为1,则运算结果为1,否则运算结果为0)。对不同图片的特征矩阵进行”异或运算”,结果中的1越少,就是越相似的图片。

转-我在Facebook的十点经验分享 – 非反人类文字版

 

我是2007年初加入Facebook, 那时大概150人; 2011年9月底离开, 当时3200多人. 经历了很多稀奇古怪但影响很大的项目, 像Application Platform, Social Ads, News Feed, Gift Shop, Facebook Credits等等. 碰到的很多的问题都是全新的, 规模是互联网历史上最大的. 当时的心惊肉跳现在回想起来是很让人怀念的旧时光. 到我离开Facebook的时候, 我负责支付安全和工具研发部门还有部分的支付后台研发组。

在Facebook的这些年让我学习感悟了很多东西, 很多东西溶在血液中, 现在我换了时间来思考最值得分享的10点经验和大家分享. 希望能给创业的朋友一些启发。

来源:王淮Harry哥

在我们开始之前, 先来一段免责声明.

  1. 这里所有的东西都是从我自己的亲身体会和实践中获得的. 不一定都是新的, 但都是真实的.
  2. 所有的这些在Facebook的文化下能有效. 但不代表对你的公司一定有效. 好的种子还要有合适的土壤.
  3. 不是所有的点都对你有用. 但有一点对你有用, 我就开心了.

OK. 我们开始吧.

1.坚持你的远见, 但灵活的把握细节

作为领导者, 在远见上你只有依靠自己, 至少在你自己负责的业务范围之内. 你是老板, 意味着整个公司; 你是经理, 意味着整个部门. 为你卖命的兄弟姐妹们是依靠你来给他们提供远见. 什么是远见? 就是对最终状态的一种描述。是让你的团队在疯狂的飞行之后最终着陆的地方。是辛辛苦苦忙忙碌碌之后的新生活。它是北极星,它来指明方向。举一个例子,当我一开始建立支付安全部门的时候,我们只有人工规则引擎. 规则是人写的. 一条人工规则是有少数变量的简单逻辑,比如“如果 (注册在30天之内 和 支出大于100美元 和 是首次支付 和 用户来自印度尼西亚),那么 (拒绝交易)” 但这里有个问题 – 人写的东西容易出错. 人很难有效的处理10个以上的变量. 我们需要一个更有可扩张性(scalable)的解决方案. 我们希望把很多事情自动化, 让机器人做更多机器擅长的事情。因此我们建立了一个共识 – 将我们绝大部分的规则逐步替换为机器学习获得的判断模型。这一远见让我们组新加了一位机器学习领域的博士和另一位之前有过机器学习体系开发经验的工程师。赌注巨大,但是一个更好的未来需要下这个注。

但你需要对细节灵活把握, 永远都有条条大路通罗马. 你需要给团队足够的空间来施展拳脚,只要他们在朝着正确的方向以合适的速度前进。另一个故事:在classification算法上一度我对决策树的兴趣比回归要大。但玩算法的工程师告诉它们之间的差别可以忽略。我可以坚持己见(当时我是真心觉得决策树要更合适)但我信任他并让他放手去选合适的算法。同设计师(Facebook的整个研发有设计师, 产品经理, 工程师三类物种) 合作的过程中也有趣事发生,他们对于字体,颜色,行距等等都很龟毛。我通常都会忍让, 只要服务于产品的主要功能。我们精力有限, 吵架要选择正确的战争,关乎全局的战争,而不是纠缠于某个局部战斗。

2.只和最好的人合作

一流的牛人只愿意和牛人厮守。他们聚在一起会更牛逼。一流人才无法容忍二流的人. 那什么是“最好的人”?我的理解是能够尽其所知, 用其所长, 学其所不能, 从而迅速完成目标并远超期望. 他们的本能是挑战自己, 超越别人的期望,超越自己的期望. 对他们来说,仅仅足够好是不够好

只有一流人才组成的团队有很多好处。

(1) 这让你更加愿意委托. 从我的经验来看, 牛人不会轻易信任不熟悉的人. 如果你还没有证明自己和他们一样出色甚至更出色, 他们宁愿自己独立工作劳累死也不愿接受你的帮助. 因为他们担心你会搞砸. 但当你证明自己之后, 他们会信任你, 放心的把事情交给你一起合作。一个互帮互助的牛逼团队才能做到1+1远大于2.

(2) 通过艰巨任务的完成牛人们互设榜样. 你会想”牛, 这哥们竟然能把这玩意做出来了, 咱得加油了”. 这种peer pressure合理的利用可以大幅度的提高工作表现并在团队中形成良性循环。

(3) 牛人们喜欢互相挑战. 我记得一位工程师总监立下赌约 – 如果我们在规定时限之前完成网站翻译平台所需的代码修改,他将把头发染成蓝色. 这样的挑战把“枯燥”的工作变成了挑战性游戏。在玩游戏中写程序比纯粹的写程序要有趣得多. 当然我们也有很多更加认真的挑战. 因为牛人们天生(贱命, 哈)容易对挑战上瘾, 不管是挑战别人还是接受挑战.

(4) 牛人们相互学到很多. 每个牛人都有自己牛的地方. 彼此有很多的互补. 如果Facebook不是有很多东西可以学习的话我不会呆4年多。对缺乏经验的人来说,这点很给力. 我们雇佣非常聪明的毕业生(潜在牛人),这些人希望引爆自己来证明他们的牛逼之处。他们不愿到一个舒适无挑战的公司过日复一日的生活。他们想学很多来丰富他们的经验,完成不可能完成的任务并在他们的职业生涯上前进。他们想要证明“yes, we can”。和其他牛人一起才能更容易的实现这些。

你不想要二流的人但如何远离他们?首先,慢点招人 (Hire Slow). 在招人的标准上固执一点. 训练你的面试人员让他们明白他们需要招(某些方面)比他们更强至少不会拖后腿的人, 如果不是, 拒绝平庸, 不要屈就. 我曾好几次在招聘决策会议上发现黄金履历者无法拿到Offer, 只因为某个面试官觉得这人无法给他深刻印象没有让他惊讶。但在另外一些例子当中,那些获得一致通过的候选人仍被放弃因为大家都只是觉得他仅仅符合要求而已, 没有出彩的地方. 在招人问题上,绝大多数情形下,你要小心不要冒进.(顺便提一下我们也会雇用那些没有全票通过的候选人, 只要有一两票是强烈推荐 – 因为对于已有员工的强烈推荐你是不应轻易忽视的, 这时可以冒险)其次,炒鱿鱼要快 (Fire Fast). 使用二流人才就像服用慢性毒药, 一天一点, 迟早咯屁. Facebook要求所有的管人经理对于员工的表现要特别敏感. 经理发现员工分配的任务或者答应的事情经常没有做到, 如果是客观原因, 一定要尽力帮助解决; 如果判断为人才质量为题, 走法律允许的程序迅速将人炒掉. 我见过几次炒的比较慢, 那对团队造成的负面作用可不是闹着玩的。

3.树立高的期望值并加以衡量

作为领导者,你需要设定足够高但仍合理的期望. 足够高使得你的团队不会感到无聊。仍合理使得他们不至于油尽灯枯。你要给他们创造一段经历使得在旅程结束时,他们回过头来看会说 – “他妹的, 我都没想到我居然做到了这个. 这个屌爆了.” 在Facebook, 和其他硅谷高技术公司一样,期望同薪酬相结合. 每半年Facebook都有5-6个公司级的大目标, 所有人的奖金算法中都会考虑该目标的完成情况. 因此树立明确的期望本身就至关重要。

另外, 你需要找到一个不容争辩的途径来衡量期望. 我花了大量时间和团队一起制定下季度里最重要的3-5个目标并有数据化的衡量指标 (一个目标背后可以有多个指标)。根据工作量把目标分别委派给单个或多个攻城狮,或者让他们自己揽。在这一情况下,我们不仅有可衡量的目标,使得我们可以迅速地说出来我们在做什么做到哪了,同时也知道每个具体目标后面的负责人是谁。团队的表现和个体表现挂钩, 所以他们失败了我即不成功. 例如, 当年我们团队最大的成果就是在一年时间里,通过每季度不同的指标,让信用卡支付的投诉率降低了75%.

有一点要强调的是﹣期望还是要基于现实要合理. 在你只有10%的市场份额的时候却幻想10几倍的收入增长无疑不现实. Steve Jobs乔老爷是这方面的老手, 非常善于推动他的团队超越潜能但同时也榨干他们(虽然他们后来还是为他们所做到的而自豪一辈子)99.9%的领导者不是乔老爷, 也不需要是。更可行的是在团队的真实极限中找到一个可持续性的驱动来激励团队超越自我.

4.重视数据而不盲从数据

决定产品方向时, 要的是想象力, 激情和胆量, 而不是数据. 数据能让你的团队沿着正确的方向前进而不出轨, 也有助于产品从“一开始是什么样”到“最后应该是什么样”的逐渐优化成型. 但数据不能帮你决定方向. 举个例子, 当我们在人工智能(机器学习)上压上我们团队所有的资源的时候, 我们忐忑不安. 但是我们坚信一点, 现有的基于人工规则引擎的防欺诈系统会很快成为死胡同, 因为它太死板而且不易规模化以处理大数据。所以, 就像在电影指环王中Frodo明知通向Mordor的道路很黑很冷很危险, 但那是一条他必须要选择去走的路; 我们选择了在机器学习上压上所有的宝。失败, 整个团队会很难看; 但我们决定走艰难但我们认为是正确的路. 这种思路同样应用在如何设计用于用户报告(外部工具)和案例审查(内部工具)的工具来应对潜在的欺骗行为。 我们最后决定的方向是”进行自动处理”和”建立反馈机制”。直接抛给人工来处理总是很容易被选的一条路, 因为只要建立一个人多人傻的客户支持团队即可. Lame! 我们希望通过自动处理来解决大部分的欺诈案例,而把精力则放在那些确实需要单独处理的特殊案例上, 同时把从业务支持团队(即客户支持部门)的处理意见自动采集并集成到下一轮的机器学习中去。由此, 我们的机器判断会越加精确和聪明且与时俱进.

但你不能忽视数据。没有数据的支撑而一味靠直觉走黑路, 很容易走岔道, 甚至大错特错。有一段时间我们认为爬行工具(通过分析关联的cookie,信用卡)可能可以找到很多欺诈的同伙。通过实验结果却发现, 这种预期是否成立很大程度上取决于当前流行的欺诈行为的特点. 比如, 当失窃或贩卖信用卡的案例非常普遍的时候,关联分析是一种有效的方法。但如主要情况是帐户被黑或小宝们冒用妈妈的信用卡去网游消费时,关联分析就作用不大。直觉在现实前面碰了一脸的灰。 不过幸运的是我们很快意识到这点且把这个项目叫停了, 所以没有浪费太多的资源。

另外, 顺带提一下A/B测试。A/B测试并不会告诉你去做什么产品,但它可以帮你确定实现产品时的哪个细微版本更能揪住用户大爷们的心.

5.避免无谓的时间浪费

刚进Facebook做工程师的时候,我非常享受那种日夜泡在码海中的感觉。后来慢慢的承担的项目责任越来越大越来越多,写代码的时间越来越少(但绝大多数时候仍占大头). 有时候更多的是把时间花在决定产品的方向和设计上。很多事情是和产品经理设计人员一起搞的. 但在Facebook攻城狮们有很大的发言权甚至有些时候是拍板的权力。Facebook希望攻城狮们有王者风范. Facebook希望攻城狮能决定自己要做什么应该做什么, 而不是总是”被决定”做什么(一种流行的说法是,write your own job description). 因此,我花了大量的时间在思考这些问题 – 哪些功能需要添加,哪些功能需要删掉,需要开始或停掉哪些测试,我们正在流血流汗的是不是现在最最最重要的问题, 我们是该花时间优化用户交互流程呢, 还是减少出错率, 还是让系统更快, 等等。这些问题很伤脑筋, 答案经常不确定, 比一个劲码到手抽筋要难.但这些问题很重要, 甚至可能决定了你熬的日日夜夜究竟有没有必要. 建议所有的攻城狮思考思考代码之外的这些问题, 团队领导者就更有必要了. 当然, 攻城狮的大多数时间还是应该花在代码上.

那究竟哪些时间不应该被浪费呢?

很多, 但我只举两个我认为最重要的例子。

邮件。不是所有邮件都发而平等。有些邮件纯粹打酱油的. 有些邮件是不需要马上处理的. 我尝试使用过滤规则来踢掉打酱油的邮件, 突出需要马上处理的重要邮件。对此,分享两点。

1) 建立一个适合你的邮件过滤系统. 我会对重要和紧急的邮件做即刻回复,而暂缓处理那些可以等到晚上再回复的邮件(尤其是发自我自己的团队,产品经理,兄弟连和顶头的不顶头的上司们的邮件)。但是,我要确保在我挣扎的爬到床上之前,把这些邮件全部处理掉, 读的读, 回的回。对于那些仅供参考的邮件,过滤系统会将其塞到某个固定的角落,我隔三差五去瞅瞅。此类邮件诸如某酒鬼询问Napa Valley哪个酒窖比较正点等等. 这些邮件通常比较有趣, 挖的坑很大很深所以也很耗时间, 我通常不跳或者不马上跳。

2) 广而告之你的个人邮件处理策略. 我让我身边的战友们知道我是如何处理邮件的, 并把这个政策放到我所有的邮件末端。如是说 – “正在尝试个人邮件处理策略-为了戒掉Email瘾, 我将强迫自己每隔三小时或以上查看一次Email,急事请电话/短信/IM我” 这么做更多的是让别人明白不要指望马上得到回应. 其实我查email比每3小时要频繁, 但至少不用马上逼得去回每个email了, 我可以憋着悠着点. 因为如果真的很急, 我的iPhone应该已经响过了. 而且, 批量处理真的效率要高很多. 不骗你.

会议。开会太容易变成一群人互相在扯对方的蛋. 浪费时间而且开完后发现没有结论且很蛋疼. 但开会对于teamwork很多时候是必要的. 如何主持会议是门学问, 这里不细谈. 不过, 你不可能也不需要参加每个邀请你的会议。当你认为你参加某会议于己于人都无太多价值的时候, 建议你考虑不去。如果想要有礼貌一点, 那就写个email问问主持人你是否可以缺席. 通常当你想过这个问题决定发这样的邮件时,答案通常都会是yes。有些时候我也会很可耻的让我的产品经理替我去开会。当然,我会鼓励他也争取不要去。Only make the meetings you really have to. 同样, 我要求我自己的团队在组织和参加会议的时候要慎重,也经常问他们想想看自己花在会议上的时间是不是多了。一个做法是把可能的会议都整合在一起。有一个例子。早些时候, 我们会经常收到来自支持团队的比较随意的会面请求。这让攻城狮的一天被会议分割得支离破碎. 写代码的都知道没有3-4个小时的连续时间是不容易高潮的. 而且这种会议通常效率很低. 于是,我们改变了做法,每周安排固定的答疑时间(office hour)和支持团队嗑想法然后follow up。当然, 紧急的问题另当别论应当马上处理.

有一个被经常忽略的原则 – 有意识地去思考哪些事情不应该做并且马上不做。例如,哪些是无谓的争论可以避免介入,哪些功能可以放弃,哪些关系不应该发展, 哪些人应该开掉, 等等。我经常问自己一个很简单的问题,我现在正在做的是否对我的目标很重要。如果你清楚自己正在做的和自己想要的,答案会明了。Go for it.

6.增进亲密感是减少紧张关系的有效方式

工程师和支持团队之间有着纠结的合作竞争关系(注意, 合作在前)。互联网技术公司中很多人(尤其是聪明人)总是期望工程师对所有问题给出一个让人会心一笑的解决方案。但现实是,不是每一个问题都可以或者应该在技术框架下解决。对于一些具体的问题, 客户支持和运营部门会有一些非常深刻独到的见解. 工程师未必行. 毕竟很多见解需要不同的专业知识, 依靠实地经验。没错, 工程师可以在代码中自动log大量的原始数据,但从原始数据中提炼可靠的判断却并不总能如愿. 和很多其他公司的客户或支持部门不同, 我们的支持部门招募了质量相当好的员工(很多来自美国名校 – 在我直接接触的反欺诈支持组20来人中就有3名斯坦福校友)。因此,当两群都很聪明的人观点相左时,该听谁的呢? 紧张关系再所难免。

不同的工程师团队也存在着合作竞争关系。 反垃圾邮件、安全和反欺诈(我的团队)这几个团队之间存在密切的工作协作关系。这些团队也都尽可能地相互学习,分享经验和技术。但是,有时候各团队独立处理类似但不同的一些问题时,都试图向对方推销自己的解决方案和理念。

如何让合作竞争保持在一种健康有序的状态? 我觉得关键是促进人与人之间的亲密感。把人搞近了, 事情就容易了. 我花大量时间用在建立和其他团队的关系上面。例如两周一次或者一月一次和其他团队老大们的1对1碰头会。越相关的团队, 头碰得越频繁. 我自己或者我的团队成员会有选择性的经常参加一些其他团队的会议 (我们称之为Friends & Family meeting)。当为一个共同的大项目工作时,我曾安排不同的部门成员(工程师、支持、数据分析、金融财务)坐到一起进行项目冲刺。这是拉近相互之间距离的非常有效的一个做法, 尤其对于减少扯皮的机会. 因为互相之间经常会请或被请喝咖啡 (可称之为“咖啡外交”). 我也会经常和一些人约定吃工作午餐, 经常聊的是家常, 增的是感情。有的时候一次长距离的散步也更能让人畅所欲言。而这样的紧密关系,在我们面对一个极具挑战性的项目的关键时刻,会帮助大家紧紧的抱团闯关.

7.习惯委托, 但不要盲目, 请谨慎

分配任务委托别人的重要性比较容易理解. 因为你不是超人, 不能端茶倒水什么都做吃喝拉撒什么都管. 有些时候, 你往往还不是最适合的人选. 当团队一大事情一多, 你一定要学会委托别人来负责合适的任务. 对有些领导者而言, 委托别人一个重要的目标可能不是很放心, 觉都睡不好; 但我非常习惯委托别人, 有时候可能太习惯了. 这是我一位前老板给我指出来的一个问题. 有一次我给一位组员分配了一个既有技术难度又有协调挑战的难题. 进程比较缓慢. 但我给了他太多的时间空间来折腾, 而事实上他在某些方面需要一些加强, 有些方面需要我更多的主动的帮助. 我老板指出来, 如果我要让别人随便折腾的话, 前提是我需要有足够的信心. 我需要有事实来逐渐证明我的决定是正确的. 需要谨慎委托. 因为如果项目失败, 对他而言, 最终负责的人还是我, 不是别人. 所以我不能以别人不行来给失败的委托埋单.

如果你有一个重要的任务需要委托给别人, 你要么已经对此人非常了解. 知道他战斗力非凡可以搞定; 或者相信他可以迅速学习提高打鸡血搞定;要么需要在一开始手把手教他, 时不时问他, 直到你对他有足够的信心.

具体我是这么做的. 项目开始时, 我让被委托人给我一个整体计划以及几天内可以完成的任务. 一开始经常会面跟进, 然后确定后几天的任务. 根据每次完成状况来估计他能不能”高快狠”地完成最终的目标. 信心逐渐建成后可以减少关于该项目的细节讨论. 此时的委托可以放得更开. 但有一点要注意, 如果跟的太紧的话, 可能让人觉得你对他不放心, 他也会做得畏首畏尾, 这可能比盲目的委托还更差. 所以在委托和谨慎之间, 有一个微妙平衡.

我觉得在这一点上我还要加强. 这里也和大家提个醒.

8.意见反馈应该一个持续性的, 而不是一年一次或两次的活动

一年一度或两度的意见反馈在硅谷公司是非常常见的. 它的目的不是设置起来给员工难堪, 让他们互相责难的. 它的目的是希望员工对自己对他人有更全面的认识, 以助进步. 意见反馈有自我反馈和同事反馈两部分. 自我反馈是自己评定自己, 完成了哪些目标, 错失了哪些目标, 哪些方面做好了, 哪些方面还待进步. 但由于是自己踢球兼裁判, 难免有偏颇. 同事反馈, 就像一枚镜子, 让你看到180度之外的自己. 在Facebook, 360度的正式意见反馈是一年两次, 并且和薪酬挂钩. 但近年来, 意见反馈和薪酬评定逐渐分开. 比如我做的一件事就是季度性的意见反馈, 时间和正式评定错开. 在那几天中, 我请求所有相关组的同事在自愿的前提下给我写写关于我直属组员的意见反馈, 短短几句都行. 我会收集, 综合, 最后在1-1碰头会时反馈给我的组员.

如果需要等半年才来收集意见的话, 很多相关故事早以忘得一干二净. 故事越久远, 记忆越模糊, 意见越空洞, 说了等于没说. 而且, 意见反馈和薪酬绑在一起, 正常人(即使是牛人)都会很自然的把心眼更多的放到薪酬上, 而不是意见本身.

除了季度性的轻型意见反馈, 日常的意见反馈如果有的话应当立马传递. 趁热打铁效果更好.

如何有效传递整理好的意见也很重要. 有句话是说“it’s not what you say that matters, it’s how you say it”. 我没那么极端, 我觉得如何传递意见也同样重要. 有两种方式我都试过, 不确定哪种更有效. 这里都谈一谈. 一种是以问为主逐渐深入促其思考, 比如”how did you think about the meeting you hosted yesterday”; 另外一种是赤裸裸的直入主题, “hey, let’s talk about the meeting you held yesterday”, 然后开始谈我自己的感觉. 不管哪种方式, 一定要给对方一个解释自己行为的机会; 永远假设并告诉他我相信他的意愿是好的. 为了避免陷入”你昨天做了xxx” “没有, 我做的是yyy” “我觉你是做了xxx”的死循环式的争论, 我首先争取和他们在”我们感知的即是事实”这一点上达成共识. 基于这点前提, 我们把讨论的重点放在如何做能改变别人的感受最后让事情能顺利完成, 毕竟大多数重要的事都有很多人一同协作完成. 当他们认识到自己想要改进某个方面的时候, 如何改是一个相对容易很多的问题 – 聪明人一向能够找出改进的办法, 我所做的就是配合他们做头脑风暴. 最终谈话的目的是产生一个下次如何能做的更好的具体方案.

关于有效传递意见反馈, 另有4点提一下.

1) 意见反馈不见得都是负面的. 它可以是别人的一个长处. 你很欣赏. 你希望他这方面坚持做, 做得更多. 比如一句”hey, I really love your weekly summary email with the key metrics at the top. Please keep them coming”可能产生很好的激励效果.

2) 意见反馈必须摆事实和讲道理. 如果你只是告诉别人他很烂, 但不说什么时候浪过了以及为什么, 除了给他添点火气之外无他用. 所以我在相关人员包括自己写意见反馈的时候要求提供实例. 比如一句 “I think he could make meetings transparent and shorter by having an agenda, like the weekly data review meeting on last Friday”比”his meeting is too long”更有血有肉有效.

3) 意见反馈必须是可操作的. 让人无从下手的意见意义不大. 如果在提意见的同时提出一个方案以供参考就有意义的多. 但注意, 绝不能是命令的方式 (那是中青宝…). 比如前面的例子”I think he could make meetings transparent and shorter by having an agenda sent ahead of time…”就很容易操作.

4) (个人偏好) 在最近的两个评价周期中, 我给15个左右的同事(一半不直属我)写过意见反馈. 我把我写的直接分享给他们. 出于这种想法, 在我下笔时就少了很多冲动. 因为他们会读, 所以我无法做到背后捅刀. 因为他们要读, 所以我需要写得有意义, 容易理解, 并且加上很多例子. 并且, 我欢迎他们和我直接讨论. 如此一来, 他们也明白我写这些反馈的一片苦心是为了他们进步.

9.你可以比你想象的做得刚好

这不是说说而已. 我自己就有一个亲身的例子. 我们曾经认为把一个高得离谱的欺诈率降到所允许的范围内会很难. 的确很难. 但想想看我们最终牛逼了一把, 把它降到了比允许上限的一半还要低. 感觉很爽. 很长一段时间内整个团队士气高昂信心爆棚做事像开了外挂.

牛人们总是不断的超越自己. 给他们一个离谱的目标, 配以应有的工具, 适当的帮助, 足够的信心还有一定的时间, 他们会让你大吃一惊, 也会让自己大吃一惊.这一点, 乔帮主是行家, 屡试不爽.

但做到这一点有一个前提 – 不能害怕犯错. 如果犯错是被要严惩的失败是不允许的话, 牛人们只能在框框中被圈养, 没有办法实现突破. 有一句话我经常挂在嘴上“ask for forgiveness, not for permission”. 在Facebook, 大胆行事犯错是容易被原谅的.

但反过来, 有一点要小心, 就像第7点所说的 – 你不能随便把一个离谱的目标交给一个人, 然后期待他来给你惊喜. 盲目带来的可能是惊吓. 你需要真正的牛人, 至少是潜在牛人. 而作为一个领导者, 你的一个任务是帮助他们, 鼓励他们, 来引爆自己的潜力点. Facebook不缺此类待引爆的牛人.

10.不要过多设计或者过早优化

有些工程师有一股出于本能的冲动想把自己的程序规模化, 甚至在这些程序还没看到大规模使用的曙光之前. 我在Facebook开始的时候, 也是冲动型工程师一杯. 但经历过几次失败的产品之后, 我牢记了这个教训. 不要过多设计或者过早优化. 把核心功能设计的简单精炼. 只有在看到产品有被大规模使用的趋势后, 才来增加功能或增加规模量. 有一个我做的产品使用的上限是200万月用户(当时Facebook整个月用户群是4000万左右), 但我的实现已经做了很多额外的功来满足更多的用户. 做的时候感觉很爽(感觉自己很牛, 感觉再多人用产品也不会崩溃), 之后感觉很惨.

但这一点不一定能适用于架构上的工作. 比如Friendster这个网站的失败就是其基础架构的性能长期无法应对急速增长的用户以致网站很慢甚至崩溃. 在用户增长高潮来临之前, 你应该已经在架构上做了足够多的前戏. 否则搞不好就要像Friendster收摊子散伙. 但同时也要意识到, 你所看到的用户访问模式, 你的网站功能, 在你只有10万用户的时候, 可能和你有1亿用户的时候会很不一样. 所有太多太早太频繁的架构上的大动作可能会适得其反. 这一点上, 你要小心判断.

结语:
在Facebook的4年半很好玩. 我学到的感受到的远多于以上的十项. 但希望这个分享能对朋友们有点帮助. 同时祝所有的朋友在自己现在扮演的角色上都有好运.

转:更严厉的在线隐私保护政策?扼杀互联网的活力!

(中国电子商务研究中心讯)本文是马特·阿金撰写的客座文章。马特·阿金是社会化广告服务公司33Across的总裁。

在过去的几个月里,美国政府已采取了一系列重大措施,使广大消费者能够对各自的个人在线信息拥有更强的控制权。今年2月下旬,奥巴马政府提出了《消费者隐私权利法案》(Consumer Privacy Bill of Rights)。数周之后,美国联邦贸易委员会(FTC)发布了有关消费者隐私权利保护的最终报告,该报告敦促各家私营公司采取自我监管的做法。值得称道的是,美国政府已经认识到私营部门正日益努力增强自我监管措施,其中包括那些来自诸如网络广告倡议组织(Network Advertising Initiative)、互动广告局(Interactive Advertising Bureau)、数字广告联盟(Digital Advertising Alliance)等组织发起的措施。比如,许多广告技术公司已经建立了它们自己的“不跟踪”机制,消费者可以通过点击在广告旁一起出现的AdChoices图标,选择不参与(opt out)接受针对性广告的服务活动。 Read More

超越那一天 刘爽在凤凰网2012年会上的讲话

今天是我们大家庭的聚会,也是我们新年的Party,我们尤其要欢迎的是来自神州大地、五湖四海的凤凰新媒体的兄弟姐妹们。他们近的来自太原、天津,往北有来自哈尔滨、沈阳,往南有山东,有南京,有上海,有福州,有厦门,有广州,有长沙,有武汉,有河南,有西安,有重庆,有成都……这么多的兄弟姐妹们来镇守、来开拓我们神州大地的各个角落,我想正应了毛泽东先生的一句话,“星星之火,可以燎原”,这燎原之势,我想也彰显了我们凤凰网未来红红火火的明天。

今天我们年会的主题是“超越那一天”。超越那一天,是哪一天呢?我想我们每个人心中都有那一天。对我们公司来说,那一天是2011年5月12日,我们实现了纽交所的登陆,实现了全球强势传统媒体分拆新媒体业务,在主流交易所上市的全球性先例。我们的市值超过10亿美金,我们的股价超过10块,所以那一天是我们凤凰网发展的里程碑,也将成为我们兄弟姐妹们的共同美好记忆。我们从那一天到今天,可以说一路走来,跌宕起伏,遭遇了很多挫折,遇到了很多困难,我们的股价受到了腰斩,但我仍然还要在今天喊出“超越那一天”!这是需要底气的。

公司基本面依然坚挺

那么我们在过去的这一年里,为什么能喊出这句话?我们的底气又源自何处?我想是源自于我们自己的基本面,我们的基本面仍然坚如磐石。首先,我们账上有十几亿港币的现金,在投资并购领域,有很多想象的空间。其次,我们的门户互联网业务,我们的流量、影响力持续上升,成长速度不但压倒了几大门户,而且高于很多SNS的网站。资本市场都难以置信,怎么一个传统门户能有这样的流量增长?很了不起!我们的无线业务在惨烈的行业调整过程中,乘风破浪,有惊无险,逆势保持着利润的增长,很不简单。我们志华领导的视频业务,以几乎零投入与对手的高带宽成本、高内容成本竞争,紧紧咬住了中国视频的第一集团,完美地演绎了非对称战役。我们的游戏业务在坚强的、野蛮的生长,向道鑫致敬!还有我们的华鹏领导的技术团队,在极小的成本投入的情况下,厉行节约,圆满的完成了大视频、大直播、大流量平稳运行的保证。还有我们市场部的兄弟姐妹们,在过去三个月,以你们辛勤的劳动,圆满的支撑了、完成了公司五个大的活动:“美丽童行”、“华人经济领袖”、“财经峰会”、“时尚之选”、“汽车盛典”,我想很少有门户在年底敢这么玩儿。了不起!还有我们的人力资源团队,再一次摘下了中国“最受欢迎的雇主”,这个响当当的桂冠。我们Lily领导的职能部门,在中国的互联网里,可能是独一无二的,要同时应对两个交易所,纽交所和香港交易所的规范,同时要面对两个董事会,凤凰卫视董事会和凤凰网的董事会,中国互联网没有第二家这么玩的。完美,你们表现的非常完美!当然,我还要说说我们的广告部,我们广告部虽然在去年经历了一些挫折,但是在金玲的领导下,力挽狂澜、有惊无险,现在的队伍空前团结,我们跟各部门的配合,空前的融洽。

所以,超越那一天,不是一句空谈,我们的基本面坚如磐石。超越那一天,我们的信心正是来自于我们的自身,我们的底气正是来自于我们的自身。

继续重新定义互联网媒体版图

我们是谁?我们是中国互联网的大清新,不是小清新,是大清新。当中国的互联网海量、快速成为门户主流打法的时候,当碎片化消费媒体已经成为一种时尚的时候,当门户有一群工程师们强调的技术驱动的理念来垄断的时候,我们凤凰网杀了一个回马枪。我们仍然相信稀缺信息的价值,我们相信精英编辑、媒体的力量,我们相信差异化的定位和传统媒体的基因。所以在中国的互联网里,我们是个大清新。

在前年我们上市路演的时候,我记得我经常用两个词,就是我们是中国互联网的“New Breath of Fresh Air”, 我们是中国互联网的新空气,我们这个新空气在过去一直重新定义着,redefine,重新定义着中国门户的版图,我们将继续重新定义这个版图。

说到我们的定位,说到我们的传承,我想由于今天来了很多新的同事,他们对我们的“十六个字”和“十二个字”可能不太熟悉,我还要老生常谈一下,这是我们的价值观和情怀。“中华情怀”,大中华、大文化、大历史,这是我们的根;“全球视野”,以中国的角度看世界,以世界的角度看中国。我们尊重并相信人类几千年文明积累的普世价值的力量;“包容开放”,我们包容不同的观点,同时在大的事件中,大的观点上,从不羞于彰显自己的主张;“进步力量”,我想再简单不过了。我想没人会声称自己愿意成为反动的力量,也没人敢挑战,一个愿意成为进步力量的媒体。十二个字的气质就是“有温度、真性情、敢担当、有风骨”,注意我讲的顺序跟这个顺序不一样,因为我刚才说的前三者,我们一直在践行,“有风骨”对我们来说依然是个挑战。由于我们的媒体气质由于我们的追求,我们注定走过的路程将浴火重生,不断超越。但是我想在这里跟大家共勉谨记的是,我们不但要有风骨,还要有智慧,因为只有如此,才能在这样的环境里生存下去。第一要生存下去,才能改变,才能推动进步,我们共勉。

超越那一天勇气来自艰苦卓绝的历练。我们的历史是与狼共舞,并舞出精彩的历史。我们从出生开始的那一天就在与狼共舞。2005年,凤凰新媒体真正的建立,那个时候几大门户都上市五六年了,几乎所有的人都认为门户格局已定,再走门户的路,无疑是以卵击石。但是,就是在那样的形势下,我们生生的在青石板上钉钉子,杀出了一条血路。与那个时候相比,我们现在的困难还算困难吗?

我们的文化是非对称战役的文化,前两天有一些网络大佬在谈狼性文化,在谈小资,我觉得非常有趣,这个问题我们在很多年前就想通了。我们有一句话,这是我们凤凰网2005、2006、2007年的兄弟姐妹们的共同的智慧,那就是:在狼群出没的草原,只有更机敏、更强悍、更协作才能存活,并最终取得胜利。我们曾经还有个“三反”的运动,反三气:反贵族气、书生气、孩子气。我想这个狼群出没的草原,决定了我们将是一个非对称战役,在非对称战役里,我想这将肯定是我们未来的命运了,赢得这样的战役才更有激情。

最大的创新是差异化

超越那一天,我想我们必须要正视变化,并拥抱变化。因为拥抱变化就是拥抱未来,我想这一点我不用再解释了。

我们必须要认识到巨变正在发生,有很多变化,有一些是暂时的变化,有一些将永恒的、永久的、深刻的改变我们周围的媒体的环境,对于凤凰网我关注的是这几个变化:智能机对功能机的淘汰、视频收看的习惯在发生根本的改变、社会化媒体自媒体要革门户的命,游戏这个看似已经发展了很多年的业务在可预见的未来依然是最靠谱、最现实的变现方式。

巨变正在发生,我们怎么办?面对变化必须创新,如果仅凭“赢”的激情而没有创新,我们是不可能穿过那些非对称战役走到今天。我们一路走来是有创新的:我们首创的首页小顶通、专题的媒体化包装、无民调不热点、美伦美奂的页面设计、大事件压倒性版面的使用、政论短视频、网台联动以及移动的IDM的创新、大事件营销等等。就拿我们一年一度的年会来说吧,我认为也是创新,这样的年会开法,像春节晚会一样的开法,我想在中国的互联网我们是独树一帜的。还有凤凰衫,我觉得这也是一个微创新,也是被逼出来,那时候没有市场的经费,怎么办?我们只能人肉去作为移动广告,去推广我们的品牌,那时候一到周末,我穿着这个,哪人多往哪去,去年年会我也说这个话。今天我还特意选了一个我的老版的凤凰衫,大家通过这个斑驳陆离的LOGO,能看出穿了多少次,洗了多少次,我想这个LOGO,这个非常发旧的凤凰衫也能衬托出我们一路走来的沧桑和不容易。

创新真的是在点点滴滴,可小可大。我想我们凤凰网的最大的创新就是以差异化定位,媒体化的运营,提供稀缺的资讯,坚信编辑、内容的力量,我想这个是我们对传统门户运营模式打法的颠覆,这就是创新。但是我们在很多其他的公司业务线的领域,在新的产品、新的频道、新的业务线上,创新还很不够,我们创新的路还任重道远。

所以我们必须全力改变这个局面。第一,我们要有新人才,人是决定性的,新人能带进新思维、新思路、新团队、新的风气。在过去一年我们有这方面非常成功的案例,这也使得我们汽车、时尚、财经以及无线、广告等各条业务线得到了快速增长,垂直领域的影响力迅速攀升。第二点,我想我们要有新的架构去鼓励创新,我们新的项目必须指挥体系前移,同时要进行扁平化的管理。当然,我们需要有新的激励,很高兴,跟大家宣布我们新的期权马上就要发布了,经过上市以后两年的努力,我们终于发布了,我们上市以后加盟的副总监将会得到新的期权。我们不但要有新的激励,更重要的本身是新的文化,我们必须要有机制去跟踪新的产品的出现。还有就是学习型组织的建立,学习型组织的建立非常重要。

全面拥抱移动互联网

我想展望未来,要超越那一天,我们必须突破创新,但也必须要有所坚持,有三点我们要牢牢守住:第一个要持续在流量和广告收入上冲击门户最前列;第二个要坚持新闻加纪录片为主的视频的蓝海策略,要抵住我们的电影、电视剧这种红海的诱惑;第三个就是继续坚持我们对游戏的战略优先级。

那么变化是什么呢?四个突破和创新:第一个,我们PC互联网业务的全面的移动互联网化,这是我们未来的第一个战略的重点,PC互联网业务的全面移动互联网化,这是我第一次提出来。我认为在现在这个时代,没有移动互联网策略的公司显然是必死。但如果认为移动互联网业务仅仅是在SP领域,仅仅是设立一个无线部门,那也必死。我们必须回归到我们PC业务媒体属性的本质,把我们属于媒体属性的移动互联网业务跟我们既有的PC完美的融合在一起,打破我们行业人为设置的范例,在这方面,我们在机制上,我们在春节前后马上有重大的举措。第二个,我们要意识到新的自媒体的形式,我们在专题的包装上,在短平快上,在PC互联网反映微信、微博的内容上,在我们PC互联网内容向微信、微博平移上,以及利用微信微博推广我们的PC互联网内容上,都要有全新的举措。第三就是我们视频多终端业务要进一步突破和布局,这方面视频领域已经开了很好的先例。最后,我们必须加快以全媒体的思路,整合网台的资源,我们今年已经走出了一个很好的开端,我们的美丽童行、汽车盛典、时尚盛典、财经峰会等活动都很好的贯穿了这个思想。

所以这三个坚持,四个突破,将构成我们来年的战略,我想只要我们做到三个坚持,在不久的将来,我们的股价上超越那一天,就完全成为可能了。如果我们做好这四个突破,那就不仅仅是超越那一天了。

我们追求商业的成功,我们不能忘记我们媒体的使命,通过捍卫老百姓的知情权和话语权,赢得社会公信力和影响力,并在所有网络设备支持的设备上,给全球华语网民以温暖、快乐和力量。我很难再找到一个像凤凰这样的平台,能够把商业成功的追求、媒体情怀的坚守、家国情怀给全球华语网民以温暖、快乐和力量,这么多美好的元素糅合在一起,我很难想象还有什么其他的视野平台,能够像这个平台一样。所以如果有记者站在现场,把麦杵到我的嘴边,如果问我,你幸福吗?我想我会毫不犹豫的说我姓刘,很幸福。我也希望在蛇年里,我们大家伙一起继续奋斗着,一起感知痛,并幸福着,谢谢。

奥巴马筹款网站的制作过程

作者: 阮一峰  日期: 2012年12月14日

1.Kyle Rush是一个网站工程师。

2011年6月,他加入BarackObama.com,负责设计2012美国大选的奥巴马官网。

(图为2011年6月的奥巴马官网)

除了宣传,官网的主要目的就是筹款。

上一次大选,奥巴马筹到了6.9亿美元。这是一个很大的数字,但由于过去4年美国经济一直没有起色,本次大选势必要投入更多的资金,团队内部估计资金需求将达到创纪录的10亿美元。

一个筹集10亿美元的网站,历史上从来没有过。Kyle Rush不知道自己能否做到,但是他很清楚,如果筹不到钱,奥巴马没法赢得大选。

 

2.2012年美国大选现在已经结束了,奥巴马有惊无险地击败了罗姆尼。他最终筹到了11亿美元,成为历史上筹款金额最高(也是花钱最多)的总统候选人。(排在第二位的就是罗姆尼,他也筹到了10亿美元。)

这11亿美元之中,线下筹集了4.1亿,线上筹集了6.9亿。单单BarackObama.com一个网站,就创造了2.5亿美元的捐款。

在6个月的时间里,BarackObama.com共有

  * 17,807,917个访问者,81,548,259次页面访问

* 4,276,463次捐款

* 捐款转化率24%(每四个访问者,就有一人会捐款)

这样辉煌的成绩,是如何取得的?

3.制作一个超大流量的、体验良好的、能够说服人们捐款、并能安全快速处理这些捐款的网站、绝非易事。

最近,Kyle Rush写了一篇文章,披露了许多内幕,从技术角度总结了BarackObama.com的制作心得。下面,我们就来看看奥巴马的技术团队是怎么做到的。

(图为2012年5月的奥巴马官网)

网站的制作班子,从2011年下半开始组建,Kyle Rush是第一个加入的前端工程师,负责网页的外观和用户体验。

一开始,网站放在团队自购的服务器上,运行和捐款都还算平稳。但是,随着竞争不断加剧,局势变得令人担忧了。到了2012年5月,罗姆尼当月的筹款金额第一次超过了奥巴马。

竞选总部决定,网站必须改版,尽一切可能争取捐款。于是,技术团队开始大规模的扩充,全职的前端工程师从1个人扩充到了14个人,其中6人专门负责制作筹款页面。

4.技术团队做出的第一个决定是,使用静态网站生成器Jekyll,用静态网页取代动态网页,加快网页打开速度。网站的打开应该越快越好。有研究称,打开速度每慢100毫秒,Amazon的销售额就下降1%。

第二个决定是,将全部网页放上CDN,使用的服务商是Akamai。它是世界最大的CDN供应商,共部署了50000多台服务器,美国各地都能获得理想的访问速度。奥巴马芝加哥竞选总部,可以在20毫秒内载入官网的HTML网页。

第三个决定是,将捐款的后台做成API调用。这是因为有23%的访问者使用移动设备,所以必须部署多个前端(Web端和移动端)。使用API,可以让不同前端以相同方式与后台通信,彼此之间用JSON格式传递信息。

第四个决定是,后台用PHP语言开发,放在Amazon的EC2平台上。

第五个决定是,为了避免宕机,开发两个后台。一旦一个系统停止工作,立刻自动切换到另一个。这点很重要,因为宕机不仅影响士气,而且经济损失巨大。因为捐款每分钟都在涌入,最高记录是一小时300万美元,你不能让它停下来。

 

5.新网站初步完成后,使用webpagetest.org进行测试,结果令人鼓舞。

原版页面4秒钟后还没载入,新版只用1秒就可以看到。整个平台的访问速度上升了60%,捐款转化率增加了14%。

接下来,就是微调页面的各种细节,一共进行了240次a/b测试,也就是说,至少迭代了240个版本。

调整后的页面,视觉效果和用户体验都有了巨大的提升(点击看大图),捐款转化率因此又提高了49%。。

随着奥巴马的当选,BarackObama.com共进行了1101次前端部署。

 

6.事实证明,整个开发方案非常成功,顺利完成筹款任务,没有一分钟宕机。

Kyle Rush感到有必要总结,留下记录。除了上面的开发过程,他还提到前端团队使用的工具:版本控制Github ,a/b测试管理Optimizely,代码编译CodeKit

Kyle Rush最后总结说:

“我百分之百肯定,这是我经历过的最好的开发环境。我们不断调整,捐款转化率的提高令人难以置信。整个团队感到无比满足。但是,最高兴的还是看到,2013年1月21日巴拉克·奥巴马依然是美国总统!”

(完)