Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# 代码不是核心:从 XLink 项目看产品开发的决策层次

在正在进行的 1024 实训营中,我们团队开发了 [XLink](https://github.com/goplus/builder/tree/trailhead_sharing) 项目,一个旨在让 [XBuilder](https://xbuilder.com/) 分享更丝滑的产品。通过这个项目的实践,我深刻意识到一个被很多程序员忽视的真相:**在整个产品开发流程中,代码的具体实现往往是最不重要的环节。**

真正决定产品成败的,是前期的重要决策、系统架构设计和技术选型。代码只是这些决策的具体体现,是“术”而非“道”。

## 决策层次:为什么代码实现排在最后?

基于 XLink 项目的开发经验,我将产品开发的重要性划分为以下层次:

1. **第一层:产品定位与目标用户决策** — 决定做什么,为谁做;
2. **第二层:系统架构设计与技术选型** — 决定怎么做,用什么做;
3. **第三层:接口设计与开发流程** — 决定具体怎么协作;
4. **第四层:代码实现**(相对不重要) — 将决策落地。

这种层次划分不是说代码不重要,而是说**上层决策的错误,无法通过下层的优秀实现来弥补**。就像建房子,地基选址错了,再精美的装修也救不了这栋房子。

## 第一层决策:产品定位与目标用户决策

### XLink 的用户调研实践

在 XLink 项目初期,我们进行了大量的产品调研工作。我们的核心目标是让 XBuilder 的分享更加丝滑,提高用户分享意愿。

在竞品分析阶段,我们发现了一个非常有趣的机会点:**支持用户在 project 页面编程过程的录屏功能,并一键投稿到相关平台**。这个功能在现有的同类平台中都没有出现过,我们认为这将是一个极具创新性和差异化的特性。从技术角度来看,这个功能的实现路径也很清晰,技术实现并不复杂,这让我们一度比较兴奋。

### 关键决策时刻:目标用户的精准定位

然而,在深入分析目标用户时,我们面临了一个关键选择:

- **选项 A:面向编程教育者** — 他们需要录屏功能来制作教学内容;
- **选项 B:面向游戏创作者** — 他们主要关注游戏作品的展示和分享。

经过深入的用户画像分析和访谈,我们最终决定**将目标用户定位为游戏创作者,而非编程相关的教育者**。基于这个决策,我们放弃了录屏功能的开发。

### 决策的价值:避免产品设计的无底洞

这个决策看似“浪费”了一个创新点,但实际上体现了产品开发中最重要的原则:**如果不做好用户定位决策,产品设计会变成一个无底洞,陷入对“完美”的无尽追求。**

对于游戏创作者来说,他们更关心的是:1)游戏作品的快速展示;2)社区互动和反馈;3)便捷的分享渠道。

而录屏编程过程对他们来说价值有限。如果我们盲目追求功能的“完整性”,最终可能做出一个功能繁杂但核心价值不清晰的产品。

## 第二层决策:系统架构设计与技术选型

### 架构设计的核心原则

在模块依赖设计上,我们遵循三个核心原则:

1. **调用关系清晰**:明确定义调用者和被调用者的关系,避免循环依赖。

2. **模块独立性**:各模块保持相对独立,通过统一接口进行交互,降低模块间的耦合度。

3. **拿来就用原则**:确保调用者在调用其他模块时无需考虑过多细节,不将与本模块无关的逻辑加到调用者身上。

例如,三种分享方式的弹窗模块在调用第三方平台模块时,只需要关注平台模块返回什么就展示什么,无需编写额外的平台差异判断逻辑,所有平台适配工作都由第三方平台模块内部处理。详细的架构设计可参考 [XLink 技术文档](https://github.com/goplus/builder/blob/trailhead_sharing/docs/develop/share/index.md)。

这种设计让**新增分享平台或调整分享策略时,只需修改对应模块内部实现,而不会影响调用方的代码稳定性。**

### 技术选型的务实策略

在技术选型上,我们遵循“**够用就好,团队优先**”的原则,而非追求最新最酷的技术。以后端技术为例,我们选择:

- **七牛云自研 [yap 框架](https://github.com/goplus/yap)**:提供成熟的 HTTP 服务能力和中间件支持;
Copy link
Preview

Copilot AI Sep 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing space after colon in the bullet point. Should be ':' followed by a space for consistency with Chinese punctuation.

Suggested change
- **七牛云自研 [yap 框架](https://github.com/goplus/yap)**:提供成熟的 HTTP 服务能力和中间件支持;
- **七牛云自研 [yap 框架](https://github.com/goplus/yap)** 提供成熟的 HTTP 服务能力和中间件支持;

Copilot uses AI. Check for mistakes.

- **MySQL + Kodo + Redis**:形成完整的数据存储解决方案,MySQL 负责结构化数据,Kodo 负责文件存储,Redis 负责缓存和会话管理。
Copy link
Preview

Copilot AI Sep 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing space after colon in the bullet point. Should be ':' followed by a space for consistency with Chinese punctuation.

Suggested change
- **MySQL + Kodo + Redis**:形成完整的数据存储解决方案,MySQL 负责结构化数据,Kodo 负责文件存储,Redis 负责缓存和会话管理。
- **MySQL + Kodo + Redis** 形成完整的数据存储解决方案,MySQL 负责结构化数据,Kodo 负责文件存储,Redis 负责缓存和会话管理。

Copilot uses AI. Check for mistakes.


## 第三层决策:接口设计与开发流程

### 接口先行的开发模式

在开始具体编码之前,我们用 TypeScript 详细定义了所有模块间的接口规范和数据结构。这种接口先行的方式带来了几个关键好处:

1. **并行开发能力**:前后端可以完全并行开发,不需要等待对方的具体实现;

2. **架构验证机制**:迫使我们提前思考模块间的交互逻辑,避免后期的架构调整;

3. **集成风险控制**:接口契约确保了模块间的兼容性,降低了系统集成时的风险。

### 前后端协作的开发流程

以后端开发为例,在与前端确定接口后,我们按照既定的开发模板执行:从 API 接口定义到路由层、Controller 层、Model 层的标准化实现流程,确保代码结构清晰且易于维护。这种自上而下的开发流程,让前端可以基于接口文档进行并行开发,而后端则按照清晰的分层逻辑逐步实现功能。

## 第四层实现:代码质量的相对重要性

### 代码实现的正确定位

当完成了前三层的决策后,代码实现就变成了相对机械的工作。**好的架构设计会让代码实现变得更简单、更清晰**。在 XLink 项目中,由于前期的模块划分和接口定义到位,实际编码过程非常顺畅,每个功能的实现逻辑都很直观,职责边界清晰明确。

### 持续迭代中的接口演进

在实际开发过程中,我们也遇到了一些设计上的挑战。比如,最初设计的分享接口过于简单,无法支持某些平台的特定要求。这时候,我们没有在代码层面打补丁,而是**回到接口设计层面进行调整**。我们为分享接口增加了平台特定参数的支持,让接口能够灵活适应不同平台的个性化需求。

这种“向上修正”的方式,确保了系统架构的一致性和可维护性,避免了技术债务的积累。

## 实践心得:从 Code Monkey 到 Product Engineer

通过 XLink 项目的开发,思维上发生了以下转变:

- **技术决策的商业思维。** 每一个技术决策都不是孤立的,而是要服务于产品目标和用户价值。比如我们放弃录屏功能的决策,从技术角度看可能是“保守”的,但从产品角度看是“聚焦”的。

- **架构设计的前瞻性思维。** 好的架构设计不是一步到位的,而是在实现过程中不断验证和调整的结果。但这种调整应该基于架构层面的思考,而不是代码层面的打补丁。

- **团队协作的系统性思维。** 模块划分和接口设计不仅仅是技术问题,更是团队协作的组织问题。好的技术架构能够支撑高效的团队协作,这比单纯的代码优化更有价值。

## 结语:重新审视技术工作的价值层次

在 XLink 项目即将完成的这个节点,回顾整个开发过程,我最大的收获是重新认识了技术工作的价值层次。

- **代码是载体,不是目的。** 再精美的代码,如果承载的是错误的产品方向或混乱的架构设计,其价值都是有限的。

- **决策是根本,实现是枝叶。** 产品定位、用户需求、架构设计这些“决策型”工作,比具体的编码实现更能决定项目的成败。

- **工程师的成长,应该是决策能力的成长。** 从单纯的功能实现者,成长为能够进行产品和技术决策的工程师,这才是真正的价值提升。

在 AI 时代,纯粹的编码工作会越来越被自动化工具替代,但产品洞察、架构设计、技术决策这些能力将变得更加珍贵。XLink 项目让我明白,优秀的程序员不应该只是代码的搬运工,而应该成为产品价值的创造者。

---

## 附录:XLink 项目简介

XLink 是本期 1024 实训营中我们团队开发的项目,旨在让 XBuilder 的分享更加丝滑。通过深入的用户研究和产品设计,XLink 专注于游戏创作者的分享需求,提供了便捷的作品展示、社区互动和多平台分发功能。该项目目前正在持续开发中,预计将为 XBuilder 生态带来更好的内容传播体验。