1. What it was like working for Gitlab (yorickpeterse.com)
在GitLab的工作经历总结
工作历程回顾 (2015-2021)
作者于2015年10月加入GitLab,成为第28号员工,至2021年12月离职。在公司从约30人增长至约2000人的过程中,其工作经历了几个关键阶段:
2015-2017:性能挑战与工具建设
- 初始挑战:GitLab当时性能极差,几乎每周都有宕机,用户抱怨“GitLab很慢”。公司缺乏有效的性能监控基础设施。
- 核心工作:作者的主要任务是提升性能。他首先构建了性能监控工具,后来该功能成为GitLab官方的“GitLab性能监控”。他还开发了“Sherlock”性能分析器。
- 文化阻力:性能并非公司的首要优先事项,资源分配不足。公司存在“在Hacker News上匿名抱怨比通过内部渠道提建议更有效”的玩笑。
- 团队组建:公司意识到问题的规模后,成立了专门的“性能”团队,作者开始向专业经理汇报。
2017-2018:关键贡献与重大危机
- 重大成就:团队更名为“数据库”团队,预算增加。作者开发了数据库负载均衡器,这对GitLab的性能和生存至关重要。该负载均衡器能透明地将读写请求导向主库或从库,并处理“写入后粘性”的问题。
- 严重事故:2018年1月31日,作者在解决一系列问题时意外删除了生产数据库。由于备份系统长期失效且无警报,情况危急。最终依靠他数小时前为其他工作复制到暂存环境的数据进行恢复,但损失了约6小时的数据,恢复过程耗时约24小时。
- 技术分歧:团队基于数据分析(如读写比约10:1)认为分片是不必要的过度设计,但管理层多年间反复推动数据库分片。
2019-2021:流程改进与离职
- 角色转变:作者转入新成立的“交付”团队,致力于改善混乱的发布流程。当时代码从提交到部署至GitLab.com平均需数天,最长达三周。
- 关键项目:推动合并了GitLab社区版(CE)和企业版(EE)的代码仓库,以简化发布流程。经过努力,部署时间从最差三周缩短到约一天。
- 公司文化变迁:公司聚会从注重员工的轻松活动转变为更商业化的“峰会”。管理层推动安装具有监控功能的笔记本电脑管理软件(如SentinelOne),引发了员工对隐私的担忧。
- 个人冲突与离职:作者因工作节奏变化、个人生活问题及与新经理的冲突,被列入“绩效提升计划”。他对此过程感到不满,认为其不够公平。最终,在GitLab上市后,作者出于税务考虑于2021年12月离职,专注于个人项目Inko。
主要经验与反思
基于在GitLab的经历,作者总结了以下核心教训:
- 可扩展性应融入公司文化:GitLab的主要收入来自自托管企业版客户,而非SaaS版的GitLab.com,这导致对SaaS版面临的扩展性问题投入不足。
- 团队应更数据驱动、开发者驱动:决策过多依赖产品经理,而非直接由了解技术的团队负责人与用户互动后做出。应减少层级,赋予团队更多自主权。
- “最小可行产品”离不开数据支撑:缺乏对用户需求的深刻理解,导致构建了许多无人问津或功能不全的功能(如无服务器平台、有问题的Kubernetes支持)。
- SaaS与自托管模式难以兼顾:两者在部署速度、架构需求上存在根本冲突。专注于一种模式能提供更好的体验。
- 人多未必力量大:增加开发人员数量不一定提高生产力。大多数公司可能只需20-50名开发者,超过100人则应反思产品范围是否过大。
- 对Ruby on Rails的复杂看法:Rails的便利性(如ActiveRecord)也容易引入性能问题(如N+1查询)。Ruby的元编程特性在大规模项目中增加了难度。尽管如此,尚无更优的替代框架能完全匹配Rails的生产力。
- 部署速度至关重要:快速部署(理想在1小时内)能提高事件响应效率并提升团队士气。GitLab花了约四年才接近这一目标。
- 基于地理位置的薪资具有歧视性:对于全远程公司,为相同职位和职责的员工因所在地不同而支付差异巨大的薪水是不公平的。作者支持像0xide公司那样,基于职位而非地点支付统一薪资。
结论
作者在GitLab的经历充满成就感与挑战。他为自己参与构建的关键系统(如性能监控、数据库负载均衡器)感到自豪,但也对公司后期的文化走向感到遗憾。尽管存在缺陷,他仍认为GitLab相比许多其他公司表现更好,并会推荐他人在此工作。