“ 对于初创公司来说,软件开发的要点有哪些?程序员的重要性到底有多大?外包、内包能够包治百病吗?
  主要结论
  算要失败并重试,初创公司的速度也一定要快,更重要的是一定要专心聆听客户心声。初创公司的程序员需要迎合客户而非代码本身,这样才能创造出足够简单直观的软件,进而改善客户体验。
  为实现品牌的扩张和公司规模的扩大,初创公司的程序员必须在前瞻性思维引导下用狂飙的速度和激情进行尝试。
  初创公司的程序员必须在速度、成本、质量、用户体验、设计、伸缩性等要务之间进行权衡。
  初创公司的程序员必须能顺利应对安全弱点和失败。
  初创公司的程序员可以是创始人、公司员工,或外包的供应商,重点在于恰当的心态。
  对大部分初创公司来说,技术是关键的分水岭。无论将技术视作自己的精髓(例如谷歌或优步),或希望通过技术促进自己的核心业务(例如Zenefits或Zappos),对初创公司来说,软件开发很可能成为连接客户痛点和公司收入流的桥梁。毕竟餐巾纸上规划的构思和蓝图需要通过软件的形式交付到客户手中。
  初创公司实景
  初创公司会面临动态、不可预测,甚至混乱的环境,这迫使创始人必须快速行事,快速失败,更快速地学习经验教训找出市场利基(Market niche),从中获得可持续收入。60%的初创公司撑不过头五年,接受风投注资的初创公司中75%终将失败。这主要是因为初创公司面临的风险较大,错过了市场机会,或其他业务方面的原因。
  为了获得推动,初创公司需要快速发展出自己的第一个客户,并用更快速度发展出前十个客户。但这一切可能需要2年时间。考虑到收入,需要尽可能快地将1个收入来源扩展为10个,只要达到百万级收入,可轻松实现15%的月增幅。
  要快速获取客户并获得收入,这种想法背后的原因在于,适合的团队会借助每个客户和每分钱的投入对产品进行完善。各种紧迫情况会迫使团队更加立足于基础,专注聆听客户的想法和反馈,用尽可能简单的方式实现这些反馈,并周而复始地一直这样做下去。
  如果你的团队只是专注于他们自己觉得酷的地方,而非专注于客户的实际想法,那只能说你入错行了。只要你的一切行事以客户为基础,而非以代码为基础,客户会让你在这场游戏中顺利获胜。
  这和父母养育孩子的过程很相似:如果你希望自己的孩子以后能有出息,必须在孩子成长和转变过程中付诸足够关心。你也许认为孩子以后会成为气象学家或NASA的专家,但这仅仅是因为你自己觉得这些职业很酷,只有朝着整个社会(而非你)需要他扮演的角色方向上培养、引导和教导,你的孩子才能终获得成功。
  程序员极为重要!
  团队中的程序员能够对终的成功或失败造成多大程度的影响,这一点很难量化,但很明显软件和制造软件的人在先于对手抢占市场方面扮演了一个关键的角色。这里有些例子。
  为初创公司写代码和为老牌公司写代码的过程截然不同。初创公司有着独特的文化,并会扩展到业务的每个角度,从财务到销售,从运维到软件开发,全都包含在内。你的产品必须简单并且便宜。你必须地专注于客户,并不断根据客户体验快速完善自己的产品。没什么是孤立的,没什么是“神圣不可侵犯”的。这里有些例子。
  不是随便哪些代码都可以这样做,也不是随便哪个程序员都愿意这样做。无论程序员是否同时也是创始人,都必须首先和客户而非代码“联姻”。尤其是软件必须采用这样的一种心态:
  理解客户的想法,并采用差异化的技术满足客户的需求:
  你的软件必须能颠覆现有技术或企业,通过更简单、更直观、更稳健的各种“更”改善用户体验。
  因此对程序员来说,如果初创公司的业务领导谈到某个健康追踪应用的上市时间,针对某个在线花店谈到更平滑、直观、不受干扰的客户购物体验,或谈到要为放款人立刻提供针对特定客户量身打造的报价方案;程序员需要知道这些要求意味着什么,以及如何通过软件开发工具、方法以及功能实现这些要求。
  这并不是说与项目有关的所有程序员都需要理解业务的方方面面,并理解将这些内容转变为技术决策的方法,但技术必须心里有谱,同时也要能解释给技术团队。这样整个团队才能通过大量小决策的积累终产生大成果,成功实现“创造客户想要的产品”这一愿景。
  在竞争和不断变化的要务之间进行权衡:
  技术愿景要求技术必须能在竞争优先权和速度、质量、成本、用户体验、设计、缩放性等方面进行权衡。对每个初创公司来说这些要务各不相同,并且对同一家初创公司,这些要务也会时常发生变化。
  例如身处性命攸关的医疗设备行业的初创公司,无疑会先于上市速度或成本等因素优先考虑代码质量。但如果要开发网络叫车应用,上市速度和代码质量很可能同样重要:客户需要每次叫车时有车可乘,初创公司则需要在这个竞争激烈的市场中通过速度保持。
  技术需要对不同要务进行权衡,但同时也要获得所有团队成员的认同和支持。如果我的初创公司要开发社交应用,同时我雇佣了一位始终坚持提供高质量代码的程序员,我可能会错失市场机会。
  从2007年到2013年,每当由于快速发布新功能导致网站出现技术问题后,Twitter都会在网站上放一张我们称之为“失败鲸(Fail Whale)”的图片。很明显,对他们来说创新速度的重要性远远胜过质量。
  成功仅仅是多个失败粉饰后的结果:
  对于技术和支持团队来说,另一个非常重要的心态在于要能接受弱点和失败。初创公司通常需要通过实验找出值得进一步投入的想法、领域,以及特征。对于手头的问题或脑海中的长远目标,并没有哪怕一个已经明确的解决方案,面对这种情况程序员也必须充满活力,不能因此而感觉受挫。
  团队的角色:
  团队中的程序员实际上是公司创始人以及项目目标实现过程中的“螺丝钉”。你的项目可能需要一名软件工程师和一名质量工程师,或者由同一位程序员担任这些角色。你的项目可能需要架构师,但此人同时也是产品的所有者或业务分析师。对初创公司来说,人员配置方面不存在严格的规定。人员需要接受项目的支配,然而你肯定不想面对冗员造成的开销和瓶颈。
  平台和方法论很重要
  为实现品牌的扩张和公司规模的扩大,技术团队必须在前瞻性思维引导下用狂飙的速度和激情进行尝试。天使投资人和风险资本投资人想要看到的不光是单点解决方案,而是能够通过发展成功打造出一个平台的公司。这需要针对不断变化的大环境开发出精彩的代码,并持续专注于为终用户制造惊喜。
  选择能顺应这些需求的恰当平台成为势在必行的做法。平台可以意味着某种操作系统,某种编程语言,或者在某种编程语言基础上构建的某种框架。犹如房屋的地基,这种平台可以为初创公司提供支撑,但也会造成局限。
  在外人看来某些平台似乎挺适合,但面对你的具体要求可能会显得很糟糕。Azure也许很适合Olyve.com但并不适合Proflowers.com。Windows平台也许很适合很多公司,但相比Unix系统,在可伸缩性方面对PayPal来说无异于灾难。选择恰当平台的佳方法是雇佣足够出色的程序员,并将平台的选择任务交给他们。