构建战略#
启动开源项目并不能确保其成功。成功的开源软件项目需要的远不只是可供访问的代码和协作意愿。那些最受欢迎且高效的项目背后,都有着深刻理解其合作伙伴及贡献者生态系统的社区,这些社区设定清晰目标,并基于这些目标精心构建协作体系。
换言之,它们拥有明确有效的策略。正如卡尔·福格尔在《开源软件开发之道》中所写[1]:
启动自由软件项目最困难的部分,是将私人愿景转化为公共愿景。您或您的组织可能非常清楚自己想要什么,但向全世界全面传达这一目标需要付出相当多的努力。然而,花时间完成这项工作至关重要。
本章将提供开展这项工作的相关资源。我们将提出项目领导者与维护者需要探讨的几个指导性问题,以便为开源项目制定战略框架。通过回答这些问题,可以明确项目的关键要素,帮助维护者确定实现项目成功的行动纲领(同样重要的是,规避不当做法)。
值得一提的是,部分开源项目最终会演变为开源产品——即在组织创收活动中发挥特定作用。这种情况下,指导其发展的战略会变得更加复杂,因为项目的成败既影响着商业决策,也受商业决策影响。因此本章还将探讨制定开源产品战略的额外工作,使追求商业成功的开源社区能获得更充分的准备。
何为战略?#
开源战略是一套全面且灵活的实施方案,旨在达成目标并克服可能阻碍目标实现的障碍。简而言之,您的战略就是构建、培育和发展一个成功开源项目的蓝图。
如今人们常过度使用"战略"一词,以至于其含义已略显模糊和泛化。项目战略绝非简单的技术能力清单、长期目标罗列或是社区对成功的愿景勾勒,而是基于缜密现状分析形成的协同行动计划。理查德·P·鲁梅尔特[2]在其战略思维奠基著作中,阐明了有效战略的三大核心要素:
诊断分析:解析团队或项目面临问题的本质特征,将其提炼为清晰可控的关键命题
指导方针:概括性描述应对上述诊断的核心策略框架
团队成员必须协调执行的一套连贯行动,以实现指导方针并见证其开花结果
鲁梅尔特将这些称为好战略的"内核",因为它们是任何成功配方中都不可或缺的要素。为一个开源项目识别优秀战略内核的工作可能充满挑战、耗时费力,并会在维护者、贡献者和其他项目利益相关方之间引发激烈辩论。但这项努力对于打造持久项目至关重要。因此我们将依照鲁梅尔特的三段式架构来组织关于制定开源战略的建议。
构建开源战略#
为开源项目制定战略涉及开源顾问 Emily Omier 所称的"定位[3]"工作。在她看来,开源项目定位需要"控制人们对项目的预设认知,并尽可能精确锁定潜在用户群体"(第 5 页)。当您为开源项目设计战略时,需要在一个(日益拥挤的)生态系统中明确您项目与其他开源项目的参照关系——既可能是协同共进,也可能是竞争对立。此外,您还需审视不同受众群体,精准识别那些可能(或不可能)使用您项目的各类人群。因此制定战略时,不仅需要评估技术能力,更要理清该项目在整个开源项目、产品和社区构成的宏大网络中所处的位置及其(现有或潜在的)关联。
后续章节我们将提供若干评估工具,包括项目维护者进行战略决策时应该思考的关键问题。
问题定位#
制定开源战略的初步工作在于识别问题。更准确地说,这其实是识别挑战的过程。软件使用者(无论是开发者还是普通计算机用户)常会遇到需要协助克服的挑战。理想状态下,你的开源项目能帮助他们应对这些挑战。但你的项目及其社区自身也面临挑战——即如何获得这些用户的认可、采用与支持。因此,在思考项目相关问题时,你需要从两个维度考量:
**项目解决的实质问题。**这是你和社区设计项目时要为用户解决的核心问题,通常属于技术性问题。
**项目推广面临的挑战。**这类挑战涉及如何让用户发现项目、接受并支持项目,通常属于社会性(有时是经济性)问题。
要制定有效的开源战略,你需要理清这两类问题。为了阐明你的项目既能解决又面临的问题,你需要形成如鲁梅尔特所言的"诊断"。鲁梅尔特写道,良好的诊断"能对现状进行命名或分类,将事实与模式联系起来,并建议某些问题需要更多关注,而其他问题则可减少关注"(第 79 页)。换言之,这就是对核心问题的解答:"现状究竟如何?"
哪些环境因素促成了你的项目诞生?它存在的首要必要性是什么?又有哪些力量或因素可能阻碍项目在开源生态系统的某个领域获得受众或发展动力?
回答这些问题对于设计成功的开源战略至关重要。但直接给出答案很困难。因此我们建议先回答更直接易懂的问题,例如:
这个项目是什么?
项目的用户群体是谁?
现有哪些可替代你们项目的方案?
这个项目是什么?#
这是个看似简单却暗藏玄机的问题。其答案往往并不简单。
开源项目常常使用许多潜在用户不熟悉的术语来描述自身,或者过于强调实现原理而非实际能解决的问题。在构思这个问题的可能答案时,应将重点放在项目如何帮助使用者上。试着提出这些问题:
这个项目解决了什么问题?
如何用最简洁的语言向潜在用户描述你的项目?
举个例子,假设我们询问一位 Istio 开发者什么是 Istio。最基础的答案是"它是一个服务网格"。但有人可能反驳说,大多数容器应用开发者并不完全理解"服务网格"是什么。因此这个简化描述——"它是个服务网格!"——并不能帮助新手判断是否或如何使用它。更好的解释可能是:根据谈话对象背景来描述 Istio[4]——对具有网络知识的人可以解释为应用数据平面和控制平面;而对完全不熟悉服务网格概念的人,则可以比喻为给应用组件分配交通警察的概念。
请根据社区需要提出更多后续问题,以便形成一种简单、直接的项目理解:不仅理解项目_如何运作_,也理解它_能做什么_。
项目的用户群体是谁?#
许多开源项目并不清楚谁在使用他们的项目,以及用户如何使用项目工具。可以考虑运用"用户画像"概念来刻画典型关键用户群体,务必从"待完成工作"的角度进行思考。
举例来说,您可以从以下几个标准来划分项目的潜在或现有用户:
该项目对个人还是组织更有用处?
您的项目是否在某个特定行业领域或业务范畴尤为实用?
什么规模的组织会认为您的项目最有用?您的目标用户是大企业的系统管理员,还是中小企业群体?
下载、安装和使用您项目的人员通常担任什么职位?他们是同一批人吗?或者说项目使用者与管理员是否为不同角色?
这些问题的答案将影响社区为构建项目、推广项目所制定的优先级,甚至会影响你们对某些功能投入的工程力度。例如,如果你的项目运行在数据中心或服务器集群上,受众通常是商业用户——专业从事 IT 运维的人(或是大学的志愿者)。对于移动应用或网页开发框架,大多数用户会在个人电脑、工作站或手机上运行你的项目。这些群体拥有不同的资源条件,驱动他们使用项目及工具的需求也各不相同。错误定位用户类别可能会给项目的推广带来挑战。
此外,任何对开源产品策略开发感兴趣的人都应当额外考虑项目用户与产品买家之间的关键关系。因此,如果策略涉及商业目标,你可能还需要思考这样的问题:
下载安装开源项目的人群与评估购买商业产品的人群之间存在怎样的关系?
企业采用开源的道路通常不会遵循从使用上游开源项目到转为企业级开源产品的直线路径。开源采用往往是"草根式"、自下而上的;而企业级开源产品则多为自上而下进行评估和采购。那些在公司内部采用开源项目的人员可以成为采购决策时极具价值的影响者——前提是他们与采购流程有联系,或者负责采购的人员知晓公司已经在使用该产品。
现有哪些可替代你们项目的方案?#
通过评估项目的竞争对手(或你认为项目将与之竞争的对手,如果项目尚未启动),你可以了解到很多关于项目的信息。通常,这需要关注你在分析上一步中确定的人员所使用的其他项目,这些项目用于完成第一步中确定的相同或类似任务。可以考虑提出以下问题:
如果你的项目没有任何竞争者,为什么会这样?
该项目是否属于新兴技术领域并发挥作用?
人们是否在使用类似项目以不同的方式完成本可以用您的项目完成的工作?
如果其他项目做着同样的工作,他们解决这个问题的方式与你有什么不同?
人们选择使用竞品的动机是什么?
如果你的项目存在开源竞争对手,能否考虑加入他们(而非与之竞争)?若不可行,原因何在?
分析竞争对手能帮助你初步评估项目所处环境及其扮演的角色。在项目战略规划初期回答这类关键问题,将为后续社区确定功能优先级和联系潜在用户(下文制定连贯行动纲领时将详述)提供决策依据。例如,你或许可以借助竞争对手技术爱好者现有的聚会场合,在那里传播你的项目理念。
如果你的战略涉及打造开源产品,你可能还要考虑市场竞争和客户相关的一些问题,例如:
如果竞争对手是市场现有主导者,你能了解到哪些关于他们及其客户的信息?
你的竞争对手的客户是谁?他们有什么共同点?
您的回答可能直接影响社区架构或市场推广策略。举例来说,若您作为新锐力量试图颠覆既有市场,目标与宣传可能需要围绕竞争对手展开,例如"更低价"、"开源替代方案"、"更简洁快速"等表述。若身处新兴市场且项目正处于"圈地运动"阶段,需要快速抢占市场份额,则必须注重信息传播效率——这意味着更高的营销预算、更激进的社区计划,以及更聚焦于向潜在用户阐明您能解决的痛点问题。
请谨记:所有软件都是针对特定人群痛点的解决方案。在分析项目成型环境时,首要任务在于理解该软件的本质属性:它解决什么问题(为谁解决)、与开源生态系统中其他项目有何关联,以及用户为何选择您的方案而非其他替代品。
Outlining your approach#
当你诊断出项目应当解决的问题以及在推广过程中可能遇到的挑战时,就会更清晰地认识到项目的独特之处、目标受众群体,以及它为何对该群体具有潜在的重要价值。同时,你可能也会意识到在项目建设和社区发展过程中需要克服的某些障碍。
因此,你的下一个挑战是建立将其交到用户手中并响应用户需求和关切的整体方法。选择开源你的软件为你和社区开辟了关键路径和机遇——但如果共同选择其中一条路径而非全部路径,你们将会取得更大的成功。
为开源项目制定恰当的战略方法,类似于阐述鲁梅尔特所说的指导方针。鲁梅尔特写道,有效的指导方针"引导行动朝着特定方向发展,而非精确规定具体执行内容"(第 84 页)。这种情况下,清晰的指导方针能通过帮助社区决定应该做和不该做的事项来聚焦其活动(更多关于协调行动的内容将在下一节详述)。正如鲁梅尔特所言,有效的指导方针要么创造优势来源,要么善用既有优势。"事实上,"他写道,"战略的核心通常在于优势。正如杠杆利用机械优势放大力量,战略优势能倍增资源和/或行动的效力"(第 85 页)。选择将软件开源能为社区(包括用户群体)解锁诸多潜在的战略优势来源。但您需要明确要发挥其中哪些优势。本节提供的问题将辅助您做出判断,包括:
你对该项目的目标是什么?
如何与周边项目协作?
你对该项目的目标是什么?#
选择以开源软件许可协议授权自己的发明绝非轻率或随意的决定,而应当是基于战略意图的审慎选择。你必须叩问自己:我选择开源软件的深层动因究竟是什么?
令人意外的是,许多项目团队难以回答这个问题。他们早已决定要将软件开源,却未深入思考背后的原因。对这些项目而言,"开源"似乎本身就是终极目标。但实际上,开源决策始终应当服务于更高层次的目标——它是实现若干潜在结果的特定途径。任何完整有效的开源项目战略,都必须明确清晰地阐释这些终极目标。
因此在决定创建和维护一个开源项目之前,先要明白为什么开源这个项目能帮助你、你的社区或你的组织达成某些目标。例如:
你是否在寻找工作的新视角?开源你的项目能让其他人评估你的成果、提供反馈意见,并以多种方式贡献力量——这些都将助力你成长为更优秀的软件开发人员。
您是否希望降低开发负担?开源项目能吸引他人在项目日益流行时参与开发和维护,承担关键角色。
你正试图让项目更安全吗?开源软件能让他人发现你或许未察觉的问题与漏洞。
回答这类问题可能需要一些自省。但这样做能帮助你与任何(现存或初生的)社区共同确定项目将如何设计、规划、架构及维护。
在商业环境中,"为何要开源项目"这一问题更为紧迫。制定开源产品战略时,你的目标是将开源软件带来的益处与具体商业目标相衔接。需明确的是,"开源"并非商业模式,而是旨在释放特定机遇的许可决策——例如与用户更协作地开发软件,或通过降低获客成本扩大项目潜在覆盖范围。只有当这些机遇与组织整体商业目标相关时,它们才有价值。
要理解使开源方法具有吸引力的商业逻辑,请考量这些经济学原理:
降低商品价格会刺激其需求增长。 对开源项目而言,降低获取成本能最大化需求,从而推动项目采用率。值得注意的是,采用成本不仅指金钱开销,还包括从现有解决方案迁移所需投入的时间与精力。
当一种商品价格下降时,其替代品的需求也会随之减少。 开源项目因能以更低成本便捷采用,可以削弱老牌专有软件公司的市场地位。这一原理阐释了开源如何成为市场颠覆的推手。颠覆意味着抓住替代品采用的机遇,从而培育另一个市场。
在其他条件相同的情况下,当一种商品的价格下降时,其互补品的需求量会增加。 所有成功的商业开源战略都基于这一原则。如果您的目标是收益,那么您需要确定将作为开源发布的软件的互补品。这些互补品应当为客户提供额外价值。
您是否希望:
开拓市场?
扰乱竞争对手?
推广一项标准?
提升产品组合中另一款产品的需求?
选择将你的软件项目开源,或许能帮助你实现上述任一目标。但每个目标都要求对项目架构和社区建设采取不同的方式。Mozilla 整理[5]了最常见的此类架构——即其所谓的"开源原型"——以更清晰地说明:组织对项目开源所设定的目标,将如何影响该项目的成型方式,以及社区需参与哪些活动来助力其成功。
理解项目开源的原因,有助于你、你的组织及社区明确实现目标所需的投入程度与类型。换句话说,这些认知对指导战略行动的整体政策至关重要。
如何处理相邻项目及其社区的关系?#
在研究用户群体时,你或许注意到用户经常将你的项目与其他不同项目搭配使用。又或许你发现自己的项目可能会吸引那些已采用不同方式应对挑战的用户。当出现上述任一情况时,这都是在项目初期扩大知名度并更好地理解用户需求的良机。
这里的目标是研究开源项目特定生态系统中与你项目"相邻"的项目。举例来说,Ceph 可以为 OpenStack 或 Kubernetes 管理存储;那么对 Ceph 而言,OpenStack 和 Kubernetes 就是相邻社区。
为相邻项目提供服务以寻找受众,可能会影响你的技术路线图、目标活动、在特定集成项目上的投入等等。相邻项目为你提供了一个潜在友好受众群体,他们面临着你的技术所能解决的相同问题,因此你可以参与一些联合市场调研或用户体验测试,或协调联合活动以接触潜在用户并与之互动。这也与了解竞争对手相关;对他们至关重要的社区对你同样重要。理解这些社区、其需求和动态,能帮助你在更大的生态系统中为自己的项目开辟空间并找到立足点。你的开源战略应包含对这些机遇的分析,而利用这些机遇应当成为指导你行动的总体策略的一部分。
明确你的行动#
到目前为止,您已经明确了项目需要为特定用户群体解决的具体问题,并规划了项目及所有参与者实现成功的整体路径。现在需要确定您和社区实际需要采取(及避免)哪些行动来落实整体战略。用鲁梅尔特的话说,您需要制定一系列可执行的"连贯行动"来实现成功。
明确这些行动至关重要,因为这将优化社区日常战术层面的工作——即让所有人专注于最有价值的事项。开源项目维护者通常难以与项目贡献者保持即时持续的沟通,更多时候会收到陌生人未经邀约的贡献,这些贡献者可能缺乏创始人共享的完整背景信息。项目维护者所能做的最佳实践,就是建立一套协作框架,帮助自主行动的志愿者以推进项目整体目标的方式开展贡献。
在制定开源战略时,我们建议从实际操作角度思考以下几个关键问题:
你如何与用户互动?
谁是你的关键利益相关者?
你如何与用户互动?#
当人们开始参与你的项目时,与他们互动是扩大项目用户群和社区的关键。你可以通过多种方式与用户互动,每种方式所需投入程度不同,产生的效果也各异。但确定应该集中精力在何处可能很困难,尤其是因为项目维护者最宝贵的资源就是时间。亲自与用户互动需要耗费大量时间。
随着战略方法日益成熟,盘点当前与项目用户互动的所有方式将有助于发现盲点与改进机会。不妨借鉴销售领域的术语,将互动技术划分为「低接触」「中接触」「高接触」三类:低接触方式中潜在用户与社区主导者互动极少,高接触方式则体现为一对一或一对少的深度投入。前者通常需投入大量时间进行前期部署,但一旦运转起来就较少需要人力介入;后者前期耗时耗力较少,但在执行阶段会给人手配置带来较大压力。以下是一些可归入此类别的典型事例:
低接触:网站、文档、在线培训、新闻简报、播客、博客
中等接触度:邮件列表、缺陷追踪系统、社区论坛、会议演讲、网络研讨会、用户小组
高接触度:电话沟通、一对一或小范围培训、会议交谈、社区聚会
这种模式或许对思考参与度活动和项目目标的社区有所裨益。例如:
低接触度的活动有助于提高项目的知名度,吸引人们初次关注。确保网站和其他材料能清晰传达项目功能、如何帮助用户以及贡献者如何快速体验和上手,这一点至关重要。同样,通过完善网站、文档和宣传材料,可以让新用户自主行动,无需社区资深成员过多协助。
中度互动活动非常适合为您的项目打造一个"引力中心"——不仅让与用户的沟通成为可能,还使这些用户能够互相帮助(有望产生网络效应)。您的错误追踪系统、邮件列表和论坛为社区成员提供了参与社区、提出问题及提供反馈的平台。这类活动能让您更深入了解人们如何使用您的项目。
高频互动活动对于与核心社区用户建立联系、收集社区案例研究以及帮助更大群体高效利用项目并成为其倡导者具有显著效果。培训会议、展位驻场及后续跟进、面对面交流等高投入活动在一对一互动中极富价值,但这些方式难以规模化推广。
理想情况下,项目应合理融合这些要素。设计潜在参与路径时需重点考虑[6]:一个不熟悉项目的人如何开始使用它,并随着时间的推移在项目中获得资历,最终成为核心贡献者。
谁是你的关键利益相关者?#
当你确定了最能帮助项目取得成功的关键行动后,就需要确保配备合适的人员和工具来执行这些任务。我们把这些人称为"利益相关者"——他们是最关心项目成败,并愿意将(毋庸置疑相当可观的)才能倾注其中的人。
开源项目会涉及多方利益相关者:包括监督管理项目及统筹资源的维护者、向项目贡献代码及其他物料(文档、技术文章、社交媒体公告等)的开发者,以及为项目提供反馈并提交发现问题的使用者。成功项目自然离不开所有这些角色。更重要的是,你需要确保这些群体里包含具备执行关键行动计划所需技能的人才。例如,若你项目的目标是推进新技术标准,而策略是专注于为目标市场开发者提供程序库——这就要求根据特定技术标准编写大量文档——那么你就需要确保社区中有经验丰富的文档工程师(若尚无此类人才,则需投入足够时间和精力去寻找并吸引他们加入项目)。
对于带有商业目的、由供应商支持的开源项目,你的利益相关者通常还包括组织内部的人员——工程负责人、产品管理团队、产品营销团队以及一线代表(现场工程师、销售人员)。你可能还需要将内容服务或支持部门的成员以及产品安全代表纳入其中。这个群体正是你需要定期向其汇报以准备利益相关方审查的对象,应每 6 至 12 个月召集他们一次,共同审视项目进展,并就目标及实现这些目标所需的投入达成共识。与组织内的利益相关者合作时:
在早期阶段参与人数过多与从一开始就确保多元化群体认同之间取得平衡。
采用逐渐扩展的同心圆模式组织利益相关方。确定一个核心团队,频繁分享草案提案,并与更多群体接触以了解他们的关注点或限制条件。提早让这些利益相关方参与进来,有助于尽早发现和解决关键问题。
确保所有利益相关方都理解你们工作要解决的问题,以及整体方法将如何以对组织有益的方式解决该问题。简而言之,务必让相关方理解项目战略及各自在其中扮演的角色。
记录你的战略#
正如为开源项目制定战略同等重要的是,您需要将该战略撰写成文并发布在当前及未来的用户、开发者和维护者都能查阅的地方。毕竟,即便是最出色的战略,若无人知晓、理解并遵循,也将毫无价值。社区中的每位成员都应知晓项目战略,并明白自己的工作如何推动其实现。
幸运的是,如果您已按照本章提供的框架草拟战略,那么您已经开始以有助于他人视自身为战略组成部分的方式阐述战略。您将收获:
对你的项目及其为用户解决的问题的简明(且准确)描述
说明您的项目如何以其他项目无法实现的方式解决该问题
清晰阐述为何对该项目采用开源方法具有优势
了解参与项目的用户、开发者和维护者群体构成
一系列旨在提升项目知名度并降低参与门槛的活动
可以考虑将这些材料作为项目文档的一部分发布,让其他人能开始理解你们的战略——并为之贡献力量。但这只是起点而非终点,战略表述仅仅是第一步。
**持续关注并沟通项目目标的实现进度。**如果你们社区的目标是培育多元化的共同开发者群体,那么应当为新参与者的贡献喝彩,并在每月简报中加入增长数据。
**资源配置要为实现目标创造可能。**若你们的目标是将整个行业从专有竞争对手转向开源项目,却只安排一名兼职人员推广开源项目,那么成功几率将十分渺茫。
**确保你的战略是一份活的文件。**定期与关键利益相关者共同审视,以保证开源战略始终保持时效性和相关性。
此外,若您在商业机构中负责制定并传达开源产品战略,我们建议您起草一份包含以下要素的文档:
项目简述,即对开源项目目标的高度概括性描述,并简要说明该项目如何使发起企业受益。每个项目的目标各不相同,因此任何两个项目的产品战略都不会完全一致。
商业逻辑,即描述社区项目的成功如何转化为公司或产品团队的成功。例如:"该项目的广泛采用将帮助人们从我们的其他产品中获得更多好处",或者"标准的开源参考实现将鼓励多家公司采用该标准,从而为基于该标准构建产品的其他企业带来网络效应。"
高层执行计划,或你计划采取的行动列表,包括对衡量成功至关重要的关键绩效指标(KPI)。项目目标会提示这些 KPI。例如,若你的目标是实现被广泛采用的事实标准,则可衡量分发符合标准实现的供应商数量;若目标是市场教育,则入门文档、学习路径、教程和杂志文章的成效将成为成功指标。
当整个组织都理解项目目标及其与组织商业抱负的关联时,在预算和资源分配方面达成共识就会容易得多。
结论#
本章阐述了为开源项目制定战略的重要性,概述了有效开源战略的构成要素,并提出了一系列可供您和社区成员探讨的问题,以完善各自开源项目的战略规划。通过富有成效的战略规划会议后,您的团队或社区应当对项目解决的问题(及其受益群体)达成共识。您将能用潜在用户熟悉的语言传达项目的价值主张,清楚认知项目在整个开源生态中的定位及其发展目标,并识别出能够推动项目成功的关键利益相关方。本章还阐释了优质的开源产品战略如何明确目标市场定位,确立技术开源带来的商业优势,阐明项目在整体商业战略与产品组合中的角色,并确保通过正确的衡量标准来评估项目成效。