第一篇《12年ToB创业感悟》

海阔天空

2020年5月

本人在互联网B2B领域创业已有十二年之久,虽然我不是最大股东,但也是创始股东之一,亲身经历了公司从零起步的一点一滴。经过这十二年的风雨,我已看淡了一切与创业有关的权力与利益之争,当然,最关键的是收获了经营一家小微公司的全方位经验。在我退出公司股东时,公司在保持十人规模的同时已取得年营收千万元的业绩。我退出的原因是多方面的,最重要的原因是身体因素(公司离家太远并且加班/值班过多)以及渴望在新基建方向(如:充电桩、工业互联网、人工智能、大数据等等)取得同样的甚至更大的成就。

对于一家初创公司来说,最重要的三点是:合伙人、发展方向、现金流,至于具体业务的开展,在以上三点都做好的前提下都是容易实现的。

第一、股份结构要合理,合伙人要稳定:

直截了当地说,初创公司最大的危机是股东内讧,所以合伙人的问题至关重要。根据我的经验,选择合伙人最好是选你最熟悉但又没有太多利益牵扯的人,比如同学、前同事;另外,一开始的股东人数以2至3人为宜;还有很重要的一点是必须有一位股东要占有绝对多数的股份(最好是67%,至少也是51%),这样会避免股东层面、管理层面出现剧烈变化;最后需要提醒的一点是最好能保留一定比例的股份用于新股东的加盟或者现有股东的激励,如果能建立股东退出机制就更好。

如果能做好以上几个方面,那么,日后产生股东内讧的风险就小多了。股东内讧的主要原因是部分股东对利益分配或权力分配的不满,而保持股东人数的精简和树立老大地位可以使权力集中,保留一定比例的股份可以解决股东之间的利益纷争。

第二、公司发展大方向要稳定:

大方向稳定了,大家才知道向哪里去努力,该掌握哪些业务知识,该提高哪些能力。当然,小方向是可以随时调整的,这是小公司的优势所在,要充分发挥这一点,不能太死板,否则就无法在大公司的竞争下生存下去。

第三、公司现金流要健康:

公司每个年度、每个季度甚至每个月的现金流都需要保持健康,这就要求每笔客户订单都要控制风险,不能为了追求业绩而忽视其中的付款风险(客户是否会赖账?客户付款周期是否过长?催款成本是否过高?)。

第四、市场、产品(含技术)、运营三者的平衡:

市场、产品、运营三方面需要协同发展,同步推进,以完成业绩目标,在此基础上,还应该注重单点突破,即优先发展其中一个方面,以此来带动另外两个方面的跟进发展,否则可能会造成共同退步的不利局面。

第五、如何找客户?

初创公司起步时,一般都是发动身边的人介绍客户,待熟人客户发展完毕后就需要自己去找客户了。新客户从哪里来?在确定了目标客户群之后,首先是自己的销售团队去网上寻找客户信息并做电话销售甚至线下陌生客户拜访,这属于直销客户,比较牢固,需要销售队伍有很强的执行力;然后也可以借助上下游公司的力量来发展客户,这属于非直销客户,粘性稍差,不过大树底下好乘凉,如果能绑定一家大企业接单还是非常不错的;最后还可以与有客户交集的供应商共享客户来发展客户,这种方式比较松散,发展成功的客户数量较少,不是重点。

第六、如何规划产品?

产品规划方面,首先要符合行业规范(资质、安全等等),然后要注意让自家产品贴近目标客户的需求,当然,产品一定要有差异化,一定要有自己的特色(比如:易使用、安全性高、迭代快、可定制等等),否则难以与行业巨头错位竞争。想当初,我们公司在创业初期就采用了与竞争对手完全不同的软件部署方式(我司采用私有化部署,竞争对手采用SaaS部署)而获得大量客户青睐。由于感受到我公司产品与服务的巨大竞争压力,竞争对手在百度搜索引擎的广告宣传语居然改为“超越MD,唯有YM”(MD是指我公司,YM是指竞争对手公司),真是令人感慨!由此可见,差异化的产品与服务是创业公司异军突起的重要因素之一。

第七、如何做好运营?

运营主要包括供货商管理、产品运营、客户运营,其中,供货商管理的重点是快速有效地鉴别供货商并保证其价格合理、质量合格、付款周期合理;产品运营的重点是在工作中不断总结经验并形成简单有效的运营文档;客户运营的重点是一客一策,即对每个客户执行个性化的运营策略,因为每个客户的需求是不同的。精细化运营是产品发展到一定阶段后必须要经历的,这不但可以满足客户不断提高的业务需求,也可以为我公司带来相当的利润空间,从而也能赢得更多的获客机会。

第八、成本控制:

最大的成本项是人员工资。人员工资如何控制呢?个人认为可以通过以下两方面来做到:一是让人员结构更加合理(比如:市场人员6名、产品及技术人员2名、运营人员2名);二是用高效管理来节约用工成本(工作中,管理人员将各方面的经验沉淀下来形成公司资产,招聘即插即用的员工,以降低人员流动的成本)。

第九、其它:

关于员工激励,个人认为将员工收入做如下安排比较合理:基本工资80%+月度奖金10%+年终奖10%,其它福利可以包括团体保险、团体旅游、不定期的公司聚餐、考勤灵活等等。

公司产品进入成熟期之后该如何发展呢?个人认为在确保现金流健康稳定的基础上可以适当切入与当前业务关系紧密的新业务,以此来增加新的业务增长点。如此,热启动一项新业务,将客户低成本迁移到新业务中来,提高客单价,这是非常值得探索的一件事。

以上九个方面就是我创业十二年的心得体会,愿与走在或即将走上创业之路的朋友一起分享。由于本人在研发、运营、产品以及其它岗位(售前支持/实施/测试/运维/DBA等)均工作过多年,所以后续还将继续分享不同岗位的心得体会。

第二篇《ToB创业的产品与研发》

海阔天空

2020年9月

上一篇文章《12年ToB创业感悟》,我跟大家分享的是公司整体经营管理层面的思考。本篇文章,我将分享有关产品部门和研发部门如何执行创业想法的思考。

对于一家互联网B2B领域的小微初创公司,创始人首先要选定一个自己熟悉的领域并寻找一个市场切入点进入自己渴望的市场。此时,公司应该明确地知道:目标客户是谁以及向目标客户提供什么样的产品与服务。如果只提供服务而没有自己的产品,那么公司对客户的吸引力不强,能成单的客户数量少且容易流失,市场部的压力都比较大,擅长做市场但不擅长研发的团队可以走这条路;如果有自己的产品,再辅以优质的服务,那将会吸引更大规模的市场,擅长产品和研发但不擅长市场的团队适合走这条路。下面,我们只讨论第二种情形。

假设创业团队已经确定了产品方向,那么应该如何推出受市场欢迎的产品呢?如果目标市场是全新市场,由于增量市场较大,那么完全可以用先MVP(Minimum Viable Product最简可执行产品)再逐步迭代的模式去打磨产品;如果目标市场是成熟市场,那么推出的首款产品就需要包含行业标配功能并且拥有自己的差异化功能,否则很难说服存量客户切换供应商,因为存量客户转移阵地时客户是有较大风险和成本的,若没有足够的吸引力,客户是不会随便换供应商的。现在,我们将目光聚焦到互联网B2B领域并且目标市场是成熟市场的场景之中来,因为这种场景比较常见,值得我们花更多精力去研究。

产品部门需要完整地整理出行业标配功能,然后要着重规划设计差异化功能的部分。差异化哪里来?不能为了差异化而差异化,它一定要来自于目标客户的真实刚需。产品部门需要从销售、客服、技术支持等直接面对客户的部门认真收集客户痛点,再加上产品部门自己的客户访谈,并且数据样本要足够大,这样才能准确定位到目标客户尚未被满足的刚需。由于差异化功能是吸引客户的亮点,所以创业团队要投入更多的精力做产品规划、软件研发、软件测试,此处,数据埋点、稳定的新技术、A/B测试等都值得各部门积极尝试。

研发部门需要配合产品部门,将更多的研发资源投入到差异化功能的设计开发上,让产品的亮点足够亮。如何让亮点足够亮呢?相对于标配功能来说,差异化功能部分是吸引客户的亮点,不但要在当前版本使用合理的技术实现出该功能,而且要在设计和编码方面预留出升级、扩展的空间,以便后续版本迭代更为迅速,这样才能保证客户体验。研发部门需要注意的是:差异化功能虽然极为重要,但不可过度设计,一蹴而就的思维不可行。合理设计一来是为了早点推出版本给客户,二来是为了根据客户反馈快速迭代版本。简单地说,我们可以将差异化功能模块的设计思想理解为“局部MVP”。

总结一下,互联网B2B领域的小微创业公司经常遇到的场景是团队擅长产品与研发而不擅长开拓市场,却又需要在成熟市场发掘切入机会,此时,本文所说的执行方案或许对创业团队的产品部门和研发部门有一些启发。以上均是泛泛而谈,并没有涉及到具体行业或产品,有兴趣的同学可以私下交流。下一篇文章,我将与大家分享重中之重的“市场与运营”方面的思考。

第三篇《ToB创业的获客运营》

海阔天空

2021年5月

上一篇文章《ToB创业的产品与研发》,我跟大家分享的是产品部门和研发部门如何执行创业想法的思考。本篇文章,我将分享有关市场部门和运营部门如何促成交易和提高利润的思考。

对于一家互联网B2B领域的小微初创公司,MVP产品研发出来之后,需要市场部门将产品推给目标客户,同时需要运营团队通过数据分析、客户使用产品后的反馈等信息找到产品升级的方向以及提升利润的办法。如果产品是私有云方式部署的(软件安装在客户侧,客户购买),那么市场部门的重要性要更高;如果是公有云方式部署的(SaaS,客户租用),那么运营团队的价值更大。

做B2B产品的小微创业公司如何把产品推给目标客户?通常有三种方法:一是陌生客户(含熟人推荐的客户)拜访,二是成为大公司的分包公司,三是与上下游公司合作争取订单。其它方法(比如:参与公开竞标、搜索引擎关键词广告等等)效果不佳,不太适合小微企业,这里不做介绍。

第一种方法是靠自身的力量去寻找客户,用这种方法找到的客户,粘性高、利润高但是数量较少;第二种方法是借助外力获取客户,虽然利润低一些、粘性一般,但是获客成本低,客户数量大,适合多尝试;第三种方法需要与上下游公司默契配合才能顺利争取到订单,利润低、粘性低、数量也少,值得探索,但不能过于依赖。

对于私有云产品,客户经理通常会带着实施工程师一同去客户现场,一旦客户有意向,实施工程师就可以现场帮客户做好软件安装和调试的工作并指导客户使用(既包括运维,也包括界面功能和接口对接)。客户经理最重要的任务是精准把握客户的需求、突出我司产品与客户需求无缝匹配的地方以促成交易,必要时,可承诺一定量的免费定制开发。

对于公有云产品,客户经理只需要做好平台(SaaS产品)的标准化功能介绍,突出平台的差异化竞争力,相比私有云产品,由于公有云产品的运维成本可控,所以在价格方面有较大的让步空间,容易促成交易。当然,必要时也可承诺一定量的免费定制开发。至于客户在数据安全性以及稳定性方面的担忧,则需要在合同条款中加以约束,打消客户顾虑。

无论是私有云产品还是公有云产品,如果客户只是购买或租用标准化产品,那么客户经理(和实施工程师)就可以完成任务;不过,B端产品,通常客户都会提出一些个性化的需求,此时就需要售前支持工程师与客户沟通,收集并分析客户的个性化需求,然后产品和研发再针对客户的需求做少量的定制开发来满足客户。

以上我们提到的是客户经理工作,下面我们来说一说运营工作。

对于私有云产品,最大的压力在于实施与运维,实施工程师不但要做好安装、调试、培训的工作,还需要定期或不定期地拜访客户,帮助客户升级软件、迁移软件、清理数据,以确保客户持续拥有较好的产品使用体验,同时也能从现场获取到运营部门所关心的数据报告。运营部门从这些数据中可以分析出能够提升利润(提高收入、降低成本)和改进产品的因素。

对于公有云产品,运维工作集中在云端,成本可控,最重要的工作就是运营分析。因为所有客户都集中到云端了,所以获取客户的运营数据相对容易,运营团队可以实时获得整体的数据报告,得出的分析报告更加准确、及时、全面,有利于及时向产品团队反馈来调整产品策略或方向。

总结一下,互联网B2B领域的小微创业公司遇到的最大困难是获客。自己找客户和借助大公司获取客户是两种比较有效的获客途径。一旦获得了客户,实施团队、开发团队、产品团队都要万分珍惜,全力以赴地服务好客户,运营团队要定期分析数据及时发现可以推动利润增长或产品升级的点。以上均是蜻蜓点水,并没有涉及到具体行业或产品,有兴趣的同学可以私下交流。下一篇文章,我将与大家分享“产品成熟期的发展方向”方面的思考。

第四篇《ToB创业的长期发展

海阔天空

2021年5月

上一篇文章《ToB创业的获客与运营》,我跟大家分享的是市场部门如何促成交易和运营部门如何提高利润的思考。本篇文章,我将分享有关产品进入成熟期后的思考。

像其它公司一样,B2B互联网创业公司将创新产品推向市场,产品在经过了“投入期、成长期”之后,也会进入到成熟期,此时,应该考虑下一步的发展方向了。

B端产品的投入期一般在一年左右,这段时间内,通常公司还没有形成稳定的盈利,创业团队比较团结。成长期差不多两、三年,这段时间内,因为公司开始盈利了,创业团队之间容易出现权力和利益的纷争,能力贡献与权力利益不对等的情况较多,适合在成长期的开头阶段就做一次开诚布公的重新安排,由能力强贡献大的股东掌握公司发展方向和核心资源并拥有更多股份(当然是要拿钱买的)。也就是说,经过三、四年左右的探索和高速发展后,产品将不可避免地进入成熟期。成熟期差不多会持续三年,这期间,由于团队稳定、利润稳定,所以创业团队有充足的时间和精力去思考下一步的发展方向了(也必须要去思考了,否则一旦产品进入衰退期,利润会下降,大家不再有那么好的心态去思考了,非常容易造成团队分歧)。

公司的下一步发展,大体上来说有以下几个方向:一是改变产品形态,创造出一片新的市场;二是改变销售模式,获得更大规模的客户数量;三是拓宽产品能力,更接近客户的原始需求。

第一种情况,可以将产品形态从私有云部署升级为公有云部署(对客户强调运维便利性),也可以反其道而行之将公有云部署改为私有云部署(对客户强调数据安全性)。

第二种情况,可以将一次性收费模式改为按年付费(向客户强调售后服务的价值);或者将标准化产品免费,只对个性化定制开发的功能收费(对客户强调定制开发的价值);或者将客户范围扩大(比如在国内短信业务的基础上拓展国际短信业务)。

第三种情况,可以将产品在横向上拓展,比如在短信业务的基础上叠加语音短信、彩信、5G消息等业务,这样可以在平台架构基本不变的前提下快速拓展更多市场;也可以将产品在纵向上拓展,比如在短信业务的基础上叠加OA、CRM等功能,将业务向前延伸,贴近客户的原始需求(客户希望打包采购CRM和短信),这样可以接触到更多的客户(相对于短信供应商来说,CRM供应商离客户更近)。当然,如果团队自研新业务的能力不足,也可以通过收购的方式快速提升团队实力(公司现金流充足,为什么不用更快的方式补充短板呢?)。

第一种和第三种情况,主要是产品的重大升级,对产品团队和研发团队提出了更高的要求,需要整个团队保持积极向上、勇攀高峰的心态;第二种情况,主要是销售模式的重大升级,市场部门需要针对客户心理的微妙变化,随机应变调整销售模式,此时,不强调快速扩大客户规模而是强调准确把握市场的动态变化,灵活应对。

为了公司的长期发展,靠一个一成不变的产品或者一个一成不变的销售模式打天下,“一招鲜吃遍天”的懒惰想法是不可行的。创业团队不但要根据市场动态灵活调整销售模式,更要下功夫升级产品甚至研发新产品去维持现有市场并开拓更广阔的市场,从而增加公司的利润增长点,保持健康的现金流。总之,开拓进取是创业公司永恒的话题。

总结一下,互联网B2B领域的小微创业公司经过几年的发展会进入成熟期,此时,本文所说的执行方案或许对创业团队的市场部门和产品部门有一些启发。以上均是点到为止,有兴趣的同学可以私下交流。下一篇文章,我将与大家分享单项能力之“售前支持”方面的思考。

第五篇《ToB创业的售前支持》

海阔天空

2021年5月

上一篇文章《ToB创业的长期发展》,我跟大家分享的是关于产品进入成熟期后公司长期发展的思考。本篇文章,我将分享有关单项能力之“售前支持”的思考。

售前支持是公司发展到一定阶段后出现的细分岗位。如果公司的销售代表既懂市场又懂产品和技术的话,那么是不需要售前支持的。现实情况是创业公司很难招聘到全能型的销售代表(就算有幸招聘到了,也很难长期干下去),所以有必要为销售代表配备售前支持工程师(下文一律简称“售前”)。通常,一个售前可以服务于3~5个销售代表。一旦有了售前的帮助,销售代表就可以专注于市场和产品,甚至可以只专注于市场(产品也是需要熟悉的,但不必太深入了)。

售前可以归到产品部门,是产品部门中最懂技术、最懂市场的人,他的主要工作内容是:一、在销售代表向客户推销产品时,帮助其向客户介绍产品的深度玩法,协助销售代表促成交易;二、当客户提出个性化定制开发需求时,收集、分析客户需求并提出合理方案,所谓合理方案,是指既能满足客户需求,又能让研发成本最低的方案(即双方都满意的方案)。

在做第一项工作时,售前既要聆听客户的需求,又要关注我方销售代表的销售倾向,在需要的时候讲解产品的深度玩法。需要注意的是,售前只要讲那些“客户关心、销售代表希望其去讲”的产品功能,不要脱离双方需求照本宣科,即一定要有针对性地深入介绍产品,阐明客户需求与我司产品的高度匹配性,合适的才是最好的,要配合销售代表说服客户,让客户觉得这正是他想要的产品。

在做第二项工作时,售前要试着引导客户说出真正的需求(而不是表面的需求),这是产品经理的一项主要能力,然后先要想办法利用标准化产品的功能组合来满足客户需求(零研发成本),如果标品实在不能满足,那么要想方设法给客户一个简单的、可理解的(这也是产品经理的一项能力),并且是我方研发成本最低的方案(研发成本最小化,这需要懂技术)。这样,在赢得客户的同时也不会造成我方成本的不可控,从而为公司创造了利润空间。注意,销售追求的是成交量和高销售额,售前追求的是低研发成本,两者默契配合即可让销售额最大化的同时也能让研发成本最小化,达成公司的理想销售目标。

无论是第一项工作内容还是第二项工作内容,都需要售前既能准确把握客户需求又能用公司的标准化产品的对应功能或最低成本的开发方案来无缝匹配客户需求,因此,该岗位不但要懂业务,也要懂产品和技术,而且需要有较强的随机应变能力(客户在任何时候提出的任何需求,售前都需要应对自如,快速找到最佳方案)。总结起来一句话,售前的核心工作是出方案。

总结一下,互联网B2B领域的小微创业公司需要售前协助销售去说服客户达成交易并控制研发成本。本文所说的内容或许对创业团队的市场部门和产品部门有一些启发。以上均是点到为止,并没有涉及到具体行业或产品,有兴趣的同学可以私下交流。下一篇文章,我将与大家分享单项能力之“现场实施”方面的思考。

第六篇《ToB创业的现场实施》

海阔天空

2021年5月

上一篇文章《ToB创业的售前支持》,我跟大家分享的是关于售前支持的思考。本篇文章,我将分享有关单项能力之“现场实施”的思考。

如果B端产品是采用私有云方式部署的,那么现场实施(下文简称“实施”)则是一个关键岗位。实施的工作内容通常包括到客户现场安装/调试软件、客户培训(对客户的业务/运维/客服/开发等岗位做培训)、故障排查、软件迁移/数据库迁移等等。

由于该岗位所需要具备的能力涵盖了运维、开发支持、客户服务等多个岗位的职能,而且是不允许犯错的,所以该岗位的重要性极高,对从业人员的综合能力要求比较高:既需要在不同的软硬件环境下工作,又需要在客户现场面对各种人员的质疑。

首先,实施的运维能力要过硬:需要在各种客户的软硬件环境下完成软件安装/调试任务。客户现场是千变万化的,有一千个客户就有一千种运维环境,实施需要在去客户现场之前充分模拟客户环境演练软件的安装过程,确保每一步都能顺利通过,不能放过任何一个细节,只有做好充分准备才能有充足的信心前往现场,有时候即使经过充分演练也可能会出现意外情况,比如客户可能临时改变环境,此时,实施需要随机应变快速适应环境变化完成软件安装/调试任务。

其次,实施的培训能力要达标:软件安装后,要对客户进行培训,参加产品培训的客户人员包括运维、客服、市场,如果客户需要做业务集成的话,还会包括技术。面对不同的人员,需要提前准备好不同的培训材料,在客户现场完成安装/调试后要有针对性地进行培训。培训工作类似于教学工作,是双向互动的,不但要会讲,还要注意听取客户反馈,客户提出的问题就是客户关注的工作内容,要记录下来并给予详细准确的答复,必要情况下还需要发邮件给客户以便引起客户重视及回查。

再次,实施的解决问题能力要超强:在发生故障时要能快速排查定位出故障原因,向客户负责人反馈情况并提出解决方案,经过客户同意后再执行双方认同(如果客户提出的要求难以满足,要及时将现场情况反馈给我司领导并得到领导授权)的处理方案。要提高在客户现场解决问题的能力,先要提高发现问题的能力,这里需要大量的经验积累,有经验的实施可以从一两个表面现象就能直接定位出故障原因。通常情况下,遇到客户报障,实施可以先将应急方案告知客户,让客户暂时处理一下,让故障的负面影响控制到最低,然后再去客户现场排查故障原因,找到原因后向客户负责人反馈,经过其允许后执行故障处理方案,如有争议则向我司领导反馈,经过双方协商后再执行方案。需要强调的一点是:排查故障原因时应该从最严重的点先排查(因为要先保障核心业务正常运转),然后再逐一排查次要的点。这就像医生给病人诊断病因,先要排除掉最严重的病因,然后再慢慢排查次要的病因。这其实是哲学上“抓住事物的主要矛盾”在工作中的一种实践。在客户现场排查故障的能力是建立在对客户现场环境熟悉、对我司产品熟悉、对客户使用方式熟悉的基础之上的,三大基础缺一不可,这需要在平时就加强积累,对三大情况都了然于胸,遇到问题时才能驾轻就熟地解决掉。

最后,实施的解释能力要过关:面对来自客户不同部门(市场与业务部/技术与运维部/客服部等等)对我司产品的质疑,要冷静应对、科学说明、合适解释,达到“既能帮客户解决问题,又能让客户继续放心使用我司产品的”目标。实施在客户现场处理完一个故障后,需要面对客户的各种质疑。客户质疑是合情合理的,因为客户迫切地想知道“这类故障是怎么发生的?以后该如何避免?遇到故障应该如何应对?”等等关系到客户切身工作的问题的答案。面对质疑,实施一要冷静应对,告诉客户问题的性质,将客户过度的担忧打消;二要科学说明,告诉客户问题的来龙去脉(涉及到商业机密的部分不要泄露);三要合适解释,告诉客户问题的严重性(尽量归因于产品之外的因素,比如:环境、使用方式等等),明确故障处理方案的有效性和今后的应急处理方案。

根据客户运维部门的要求,实施有时候还会负责软件迁移,甚至要参与数据库迁移的工作。这部分工作不常见,并且是由客户运维部门主导的,实施做好配合工作即可。

以上描述的是实施在客户现场要做的事情以及对应的能力要求,回到公司后还需要将所有情况(尤其是跟产品缺陷或优化有关的情报)反馈给我司的其它部门,为产品的升级迭代提供依据;产品有版本升级的话,实施也要及时跟进,掌握产品最新版本的每个特性,按需给客户升级软件。

对于私有云方式部署的B端产品,实施的意义极为关键,既是接触客户、提高客户满意度的关键,又是接触产品、推进产品升级迭代的关键。无论是对外还是对内,实施的重要性都不言而喻。

总结一下,互联网B2B领域的小微创业公司,如果产品是私有云方式部署的,则需要现场实施工程师。实施岗位的重要性极高,关系到客户满意度和产品升级迭代,因此要加大投入,做好对实施的全方位培训工作。本文所说的内容或许对创业团队的研发部门和产品部门有一些启发。以上均是点到为止,并没有涉及到具体行业或产品,有兴趣的同学可以私下交流。下一篇文章,我将与大家分享“创业公司的测试与运维”方面的思考。

第七篇《ToB创业的测试与运维自动化》

海阔天空

2021年11月

上一篇文章《ToB创业的现场实施》,我跟大家分享的是关于现场实施的思考。本篇文章,我将分享有关单项能力之“测试与运维”的思考。

由于我之前有几年的开发经历,所以在负责公司产品的测试与运维工作时会尽可能地加入技术因素,让测试与运维向自动化方向发展。

我们先讲测试,ToB的产品一般向用户暴露的有WEB界面和HTTP接口。对于开放接口的测试,自然是开发一套测试软件来验证接口的各项功能、性能是否达到接口使用说明文档中所宣称的内容。而用户在WEB界面的操作通常包括“输入参数、前端校验参数合法性、前端调用后端接口、前端获得后端返回结果并在页面上回显”等环节,这些环节可以分解为两类,一类是前端不与后端交互(前端对用户输入参数的校验以及对后端返回结果的回显),另一类是前端与后端交互(即前端调用后端接口)。这样,对于用户操作的WEB界面的功能测试,就可以分两阶段来测试:第一阶段是自动化执行的,目的是测试后端代码,具体做法是:编写测试程序,模拟前端用户操作行为,直接调用后端接口,来验证输入参数(这阶段测试时,要让输入参数合法有效)与输出结果是否匹配(需要覆盖所有业务场景做测试);第二阶段是手动操作的,目的是测试前端代码,具体做法是:人工使用WEB界面执行业务操作(也可以使用一些成熟的测试工具),对输入参数做合法性校验以及对第一阶段的返回结果在WEB界面进行友好显示。其中,WEB界面功能测试的第一阶段工作是用测试程序自动化执行的,可以将那些需要反复执行的业务流程固化(下次再测试的时候,直接运行这个测试程序即可),提高整体的测试效率,如果第一阶段的测试完成得好(输入和输出匹配正确),到了第二阶段,测试重点就可以放到前端代码上(输入参数合法性校验及返回结果友好显示)。根据我的经验,测试工作,能自动化的部分尽量自动化,这样可以全面、快速地展开多轮测试。以上只是初创公司在没有专业测试团队的情况下的选择,如果有专业的测试团队,则可以使用LoadRunner之类的成熟测试工具。

前面讲的是用测试自动化来提高测试效率的方面,下面再来讲一下测试的另一个重要方面,即如何安排优先级来提高整体测试效率。测试工作就像开发工作一样,都是有任务优先级的,很多测试人员并没有意识到测试优先级的重要性,总是习惯性地从第一个软件功能测试到最后一个软件功能,这样做,一来没有突出测试工作的轻重缓急从而导致在重要软件功能的测试方面投入不够而未发现那些隐藏得很深的Bug,二来测试的整体效率不高,无法及时将测试结果反馈给研发团队,从而影响了整体的开发/测试的进度。正确的做法是不但要编写测试用例,而且要突出各项测试任务的优先级和所需投入的工作量,其中,核心功能点的测试任务要加大投入并考虑使用多种方法或多种工具去全方位地深度地验证该功能是否存在潜在的Bug。根据我的经验,测试一个软件产品时,首先要能跑得通整个业务流程,在此前提下,核心功能的方方面面都测试一遍,非核心功能则可以适当忽视细节(当然,后期有时间的时候可以再慢慢补充测试)。

关于运维工作,和测试工作类似,我也推崇能自动化的部分尽量自动化,再辅以人工运维,从而确保软件、网络和服务器的正常运转。

我们上线一个软件项目时,同步会开发并上线一款对应的运维监控软件,该监控软件包括的基本功能有:监视服务器和网络的主要运行参数(比如:CPU占有率/内存使用率/磁盘空间/网络带宽占用率等等)、监视软件工作情况(比如:记录业务异常/出现软件停服重启软件等等)、监视连接数据库服务器的主要运行参数(比如:IOPS/内存使用率等等)、发送告警信息(以上异常情况发生时发送邮件或短信告警通知)。运维工程师收到异常告警通知时人工介入排查故障并恢复软件正常运行。这样,可以在保障软件服务正常工作的情况下尽可能地减轻运维压力,节约运维成本。通常,云服务提供商(比如阿里云、腾讯云、华为云等)都会提供应用服务器和数据库服务器等设备的状态监控API,建议尽量云服务提供商提供的API来监视设备健康状态,涉及到自身业务的个性化监控则需要自定义开发监控软件。目前,市场上有大量的云资产代运维的专业公司,如果初创公司使用的云资源数量较多(8个设备以上)或者使用了多家的云资产,那么建议选择这些云资产代运维的公司来打理众多的云资产,这样既经济又专业。

现在举两个运维中遇到的意外情况的例子:

2019年2月份,公司需要将阿里云上SQLServer数据库里的数据迁移到阿里云MySQL数据库上,目的是为了降低数据库租用成本(因为相同规格下,MySQL比SQLServer要便宜很多),而阿里云不提供异构数据库迁移工具,我只能从网上找,最后找到一款名为SQLyog的软件。在本地服务器上测试了一下,将一个表的数据(数据量大约有300万行)从MySQL迁移SQLServer需要1小时左右,但将该软件安装到阿里云ECS上迁移数据的速度却只有100万行/小时。在走投无路的情况下,我只能尝试自己开发一个软件来做异构数据迁移的工作,经过几天努力,异构数据迁移工具软件(我命名为DBTransferTool,Github地址是https://github.com/SmilyZhu/DbTransferTool)开发完毕,在阿里云上实测的迁移速度达到2000万行/小时,是SQLyog的20倍,这仅仅是单线程执行的速度,如果继续优化做成多线程执行的话,我相信可以达到5000万行/小时甚至更快,不过,这个自研工具已经达到我的预期目标,就没有再去优化了。这是开发能力在运维工作中起到的巨大作用。

2019年8月,在一次清理历史数据时,误操作删除了阿里云RDS实例中一张表里的全部数据(应该只需要删除过期的数据),发现问题后立即做了如下处理:停止软件服务,先找到误操作发生的准确时间点,然后从binlog文件恢复数据,再做好老数据与新数据的合并,最后启动软件服务。

以上描述的是创业公司在软件测试和服务器运维时值得注意的重要方面,即尽量让测试和运维工作自动化,减轻人的压力;另外要关注重点,对核心任务要多加投入,解决主要矛盾。

总结一下,互联网B2B领域的小微创业公司,在测试、运维等岗位很难投入专职人员,所以工程师需要尽量让这些工作变得自动化,降低对人力的需求,节约公司运营成本。本文所说的内容或许对创业团队负责测试和运维的人员有一些启发。以上均是点到为止,并没有涉及到具体行业或产品,有兴趣的同学可以私下交流。下一篇文章,我将与大家分享“创业公司的管理”方面的思考。