大厂开源社群运营问题分析
一、背景概述
1. 文章信息
A. 来源
文章标题:大厂开源之殇
作者:tison(夜天之书)
发布时间:2023-04-13
B. 核心主题
本文深入分析了大型企业(大厂)在开源实践中面临的认知失配问题,探讨企业研发团队、市场运营团队与用户开发者之间的常见矛盾。
2. 研究背景
A. 开源策略演进
开源策略循序渐进分为三个阶段:
- 使用开源软件
- 参与开源社区
- 发起开源项目
B. 大厂开源现状
发起开源项目实践的主要力量:
- 打着开源旗号的创业公司
- 大型互联网企业(大厂)
3. 问题定义
本文聚焦于大厂发起的开源项目共同特点,讨论围绕这类开源项目聚拢起来的各方角色之间常见的认知失配问题。
二、核心问题分析
1. 用户不买账:我要怎么用起来?
A. 问题根源
大厂开源的软件离开内部需求和重度集成的基础平台后,难以为其他用户场景产生价值。
B. 内部依赖问题
大厂开源软件特点:
- 源于基础架构团队剥离的服务核心
- 面向企业内部业务特定需求开发
- 边际成本随集成程度增强而降低
典型内部场景:
- 配置中心:所有软件启动时默认环境里有配置中心
- 监控系统:日志上报和分析逻辑侵入到其他组件
- 标准化部署:内部平台提供统一服务
C. 全家桶式开源
大厂开源常采用全家桶式套件:
典型案例:
- 字节跳动的 CloudWeGo:Golang 和 Rust 微服务中间件套件
- 阿里巴巴的 SOFAStack:Java 微服务中间件套件
- 腾讯的 TARS:C++ 为主的微服务中间件套件
- 字节跳动的 KubeWharf:云原生应用管理套件
使用痛点:
- 很难单独运行其中一个组件
- 需要部署全家桶才能使用任何功能
- 用户选择时需评估每个被带进来的软件
D. 价值匹配困境
用户选择套件的决策链:
- 每个组件都要较好解决对应领域问题
- 通过内部审查关
- 满足定制化需求
- 可扩展性强
大厂套件的现实:
- 针对大厂内部需求开发
- 难以满足外部用户定制化需求
- 高度集成导致高耦合
- 扩展性差
- 包含用户不需要的资源消耗组件
E. 运维难题
运维成为阻止用户使用的另一重要原因:
- 内部部署流程经年累月磨合
- 融合了康威定律的结果
- 历史经验在其他用户那里不存在
F. 解耦难度
为何不做好依赖解耦和模块化?
失败案例:字节跳动的 ByConity
- 基于 ClickHouse 改造的云原生数仓
- 核心架构依赖 FoundationDB 和 HDFS
- 编译和部署手册复杂
- 用户难以真正运行起来
- 几乎是火山引擎云原生而非云原生
失败案例:阿里巴巴的 PolarDB-X
- MySQL 魔改版本
- Wiki 只讲技术设计和参数
- 缺少如何跑起来的说明
- 功能在阿里云上已集成
- 开源版本用户价值不明确
G. 成功案例特征
案例一:阿里巴巴的 Dubbo
- 充分的组件化和插件化
- 核心足够小
- 无硬性依赖其他软件服务
- 用户可先解决特定问题
- 逐渐添加或开发集成增强
- 扩展和集成需求回流上游
- 形成正循环
案例二:腾讯的 ncnn
- 完整的 HowTo 列表
- 告诉用户各种环境下如何运行
- 生成用户内容传播人气
- 在解决用户问题中打磨成熟度
案例三:Apollo 和 Kvrocks
- Apollo 孵化于携程
- Kvrocks 来自美图
- 脱离大厂开源体系独立运营
- 面对真实用户需求
- 得到用户信赖
- 拥有源头活水
2. 开发者晕头转向:我该如何参与?
A. 预期与现实的落差
大厂开源的预期:
- 项目一呼百应
- 开发者蜂拥而至
- 社群生态一片繁荣
现实情况:
- 门可罗雀
- 只有公司员工提交代码
- Commit 从内部同步出来
- 堪称只读开源
B. 社群增长的双重阻碍
阻碍一:缺乏源头活水
- 未回答软件对用户的价值
- 用户不知道如何使用
- 从根本上失去参与动力
阻碍二:内外流程失配
- 企业内部流程不透明
- 外部开发者无法参与
C. 共享工作流缺失
核心问题:需要建立内外共享的工作流
失败实践:
- 代码公开但开发流程在企业内部
- 非企业员工根本无法参与
- 设计开源方案时未考虑共享工作流
D. 开发者参与体验
良好实践:腾讯的 InLong 项目
- Apache 流程模板加持
- 官网详细记录参与和发布文档
- 腾讯内部系统跟随开源版本发布
- 紧急问题内部 hotfix
- 信息脱敏公开到社群
- 公共改动 upstream first
良好实践:谷歌的 Protobuf
- CI 流程依赖内部系统
- 结果报告到 GitHub PR Check Status
- 开发者可知道自己是否通过测试
- CI 日志可公开访问
- 可自己读测试日志排查问题
失败实践:TiDB 项目
- PR-39440 尝试在 TestCase 加内部系统 ID
- 外部参与者完全不可理解
- 工作流设计未考虑开源协同
- 假设所有人都是同事在同一上下文
极差实践:许多大厂开源项目
- 开发过程与开源协同不沾边
- 不在开放平台进行
- Commit 神秘同步出来
- 无任何解释
- 无从参与
E. 可以做什么的问题
开发者参与协同的两大问题:
- 知悉工作流(解决怎么做)
- 可以做什么(价值创造)
大厂开源现状:
- 按原先产品计划和研发流程进行
- 未想过社群如何参与
- 未想过如何借助社群力量
错误假设:
- 开发者是不用发薪水的员工
- 应当服从公司安排
- 接受任务指派
- 按时按量按质完成工作
正确认知:
社群成员不是免费员工,他们为开源软件和社群努力,而不是为公司努力。
F. 正确引导参与
良好实践:ClickHouse
- 每年发布 RoadMap
- 告诉开发者今年要做什么
- 新想法和设计尽可能分享到社群
- 打开沟通渠道
- 允许参与者留言评论
- 理解需求来龙去脉
价值创造定位:
- 社群成员不能代替功能设计
- 企业开源项目仍是企业项目
- 企业团队把控项目方向
社群成员规模化产生价值的领域:
- 功能交付后的场景打磨
- 易用性改进
- 准确性改进
开启社群飞轮:
- 告知社群成员完成的功能
- 说明预期效果
- 激励试用
- 试用中发现问题
- 引导解决这些问题
G. 开发者信赖感缺失
开发者离开社群的原因:
- 不知道能做什么
- 提交简单改动搞不清楚流程
- 对 PR Review 和合并无预期
- 对社群无信赖感
3. 过度营销:KPI 导向的恶果
A. 问题本质
开源项目 KPI 导向的过度营销,反过来妨碍了最初的影响力目标。
B. 三种过度营销
类型一:夸大软件产品价值
表现:
- 软件未解决普遍用户问题
- 重度依赖内部业务假设
- 重度依赖内部基础平台
- 用户用不上
- 鼓吹解决大厂内部问题
- 自大地认为能降维打击
结果:用户嗤之以鼻
类型二:零门槛打卡任务
背景:
- 工作流不透明
- 产品发展方向仅内部可见
- 不满足共同创造价值前提
- 社群参与度门可罗雀
表现:
- 为了 star 数和参与人数指标
- 推出改拼写、改 linter、改空白符等活动
- 发小礼品和大肆宣传
- 真正想投入的开发者耻与之为伍
- 起到反向宣传作用
类型三:形式主义流程和机构
背景:
- Apache 和 Kubernetes 等成功项目有 PMC、Governance、Ambassador
- 抄一套机构是否也能成功?
本质:船货崇拜(Cargo Cult)
表现:
- 软件价值未证明
- 参与路径不清晰
- 搞出委员、委员长、秘书长、主席
- 项目团队的角色扮演游戏和自我感动
用户视角:
- 开源软件社群?生产软件好用起来做反馈?
- 官僚主义严重的团伙?主要职责是开会和弄文件?
反省案例:BeyondStorage
- 在为用户提供价值之前
- 沉迷于设计各种流程和机构
- 漩涡在 BeyondStorage: why we fail 中做了深刻反省
三、解决方案:开发者关系
1. 问题诊断
上述三类问题的共同特点:
- 都跟软件产品研发团队相关
- 用户场景问题需要产品定义
- 开发流程需与内部研发流程协同
- 市场营销需结合开发者特点调整
2. 组织架构方案
A. 开发者关系团队
先驱者践行的实践:在企业中设置开发者关系团队。
对于有许多开源或待开源项目的大厂:
- 需要开源办公室处理安全、合规和治理
B. 团队定位
开发者关系团队充当开发者和产品研发部门的信息枢纽。
graph LR
Dev[开发者社群] -->|反馈| DevRel[开发者关系团队]
DevRel -->|开发者反馈| R&D[产品研发部门]
R&D -->|产品信息| DevRel
DevRel -->|技术内容| Dev
R&D -->|RoadMap/文档| Dev
Marketing[市场运营] -->|营销策略| DevRel
DevRel -->|开发者内容| Marketing3. 核心职能
A. 产品信息枢纽
开发者关系团队:
- 了解开发者特点
- 掌握社群开发者关注内容
- 向产品研发部门提供开发者反馈
- 共同制作开发者友好的 RoadMap
- 共同制作开发者友好的使用说明
成功案例:StreamNative
- 开发者关系团队与研发团队紧密合作
- 推动 Apache Pulsar 网站改造
- Getting Started 章节改造
- Landing Page 改造
- 用户更好了解 Pulsar 如何解决问题
- 用户更好了解如何快速启动和试用
B. 工作流优化
开发者关系团队:
- 熟悉开发者工作方式
- 关注和协调社群开发活动
- 不断改进工作流
- 促进消息流通
- 提升社群飞轮产生价值的速度和质量
量化成果:Pulsar 社群
- 主仓库 Open Issue 减少 1000+ 个
- PR 减少 200+ 个
- Issue 首次响应时间预期收敛到一周以内
- 使用型问题正确流转到核心研发
- 迅速得到解答
- 易用性问题补丁更快合并
- 不再因不够重要被长期搁置
C. 内容出口差异化
市场运营团队 vs 开发者关系团队
| 维度 | 市场运营团队 | 开发者关系团队 |
|---|---|---|
| 面向对象 | 潜在客户(2B)或大众(2C) | 开发者(2D) |
| 内容特点 | 商业营销 | 技术内容 |
| 目标 | 获客、品牌曝光 | 技术品牌建立 |
开发者关系内容形式
- 场景应用指南
- 软件使用教程
- 样例程序
- 线下会议
- Workshop
目标:在开发者心智中建立起务实有效的技术品牌。
四、关键洞察
1. 核心矛盾
大厂开源的根本矛盾:
- 企业内部的产品化研发流程
- 开源社区的分布式协作模式
两者在目标、节奏、沟通方式上存在天然差异。
2. 认知失配的三方
A. 企业研发团队
- 关注内部业务需求
- 遵循企业研发流程
- 面向内部用户场景
B. 市场运营团队
- 关注 KPI 指标
- 面向潜在客户或大众
- 传统营销思维
C. 用户开发者
- 关注解决实际问题
- 需要清晰的参与路径
- 期望透明的协作流程
3. 成功要素
从失败案例和成功案例中提取的关键要素:
成功开源项目特征
产品化能力
- 充分组件化和插件化
- 核心足够小
- 无硬性依赖
- 用户可快速上手
文档完善
- 清晰的 HowTo 指南
- 完整的部署文档
- 多环境支持
工作流透明
- 内外共享工作流
- 清晰的贡献指南
- 可预期的 PR 处理流程
价值导向
- 解决真实用户问题
- 而非内部需求外溢
- 持续打磨易用性
独立运营
- 脱离大厂体系
- 面向真实用户需求
- 灵活响应
4. 开发者关系的价值
开发者关系团队的核心价值:
- 弥合认知鸿沟
- 翻译需求语言
- 优化协作流程
- 建立技术品牌
五、实践建议
1. 对于大厂开源项目
产品层面
- 确保软件解决真实用户问题
- 做好依赖解耦和模块化
- 提供完整的使用文档
- 降低用户上手门槛
流程层面
- 建立内外共享工作流
- 提供清晰的贡献指南
- 确保流程透明可预期
- Upstream first 原则
运营层面
- 避免 KPI 导向的过度营销
- 不搞形式主义的机构和流程
- 专注产品价值打磨
- 建立开发者关系团队
组织层面
- 设置开发者关系团队
- 建立开源办公室(如有多项目)
- 让 DevRel 成为信息枢纽
- 市场运营与开发者关系分离
2. 对于开发者
选择开源项目
- 评估项目是否解决真实问题
- 检查文档是否完善
- 了解贡献流程是否透明
- 观察社群活跃度
参与开源社区
- 从小问题开始贡献
- 理解项目 RoadMap
- 积极参与讨论
- 帮助改进文档
3. 对于开源项目维护者
社群建设
- 发布 RoadMap
- 分享设计和想法
- 建立沟通渠道
- 响应 Issue 和 PR
飞轮启动
- 让开发者知道你做了什么
- 激励试用
- 引导解决问题
- 形成正循环