---
title: "什么是软件探索阶段，为什么它要先于写代码？"
canonical: https://wavect.io/zh/software-development-guide/what-is-a-discovery-phase/
language: zh
description: "探索阶段是你在任何代码之前所做的工作，把一个粗糙的想法变成一份可构建的计划。结束时你会带走清晰的需求、一套拟定的架构、一份有范围的路线图，以及对你最大风险假设的一次检验。它是你发现自己即将做错东西的最便宜的地方。跳过它，是软件里最昂贵的捷径，因为每一个错误假设都会被烙进代码，日后再付钱。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

在你动手之前

# 什么是软件探索阶段，为什么它要先于代码？

探索阶段是你在任何代码之前所做的工作，把一个粗糙的想法变成一份可构建的计划。结束时你会带走清晰的需求、一套拟定的架构、一份有范围的路线图，以及对你最大风险假设的一次检验。它是你发现自己即将做错东西的最便宜的地方。跳过它，是软件里最昂贵的捷径，因为每一个错误假设都会被烙进代码，日后再付钱。

简短回答

探索阶段把一个想法转化为清晰的范围、架构和路线图，并在写下一行生产代码之前检验你最大的风险假设。

适合

- 有想法但还没有确定规格的创始人
- 即将为一次构建投入真实预算的团队
- 有某一个假设可能拖垮全局的产品
- 任何想要一个能信得过的固定价格的人
- 需要一份计划来对齐的利益相关方

不适合

- 对一个已有、且已被充分理解的系统做微小改动
- 范围已经完全界定并验证的工作
- 不管风险、第一天就想要代码的买家
- 没有生产前途的一次性实验

// 01

## 比较各个选项

先做探索，会改变什么。

| 维度 | 有探索 | 没有探索 |
| --- | --- | --- |
| 范围 | 构建前已界定并达成一致。 | 在构建中途才发现，那时改动很贵。 |
| 定价 | 能有把握地报出一个固定价格。 | 估算是猜的，还会一路往上漂。 |
| 最大风险假设 | 早早检验，趁出错还便宜的时候。 | 在生产里检验，出错代价高昂。 |
| 架构 | 针对真实需求刻意选定。 | 第一天就选定，之后再跟它较劲。 |
| 利益相关方对齐 | 所有人在同一份计划上签字。 | 代码出来之后，分歧才浮现。 |
| 典型结果 | 一次贴合需求的构建。 | 返工、范围蔓延和意外成本。 |

// 02

## Wavect 的立场

大多数软件不是被烂代码害死的。它们是被把错的东西做得很好害死的。

探索就是我们在它变贵之前把这一点查出来的地方。我们钉死需求、拟定架构、为路线图划范围，并检验那一个一旦错了就会拖垮项目的假设。这里花的几周，往往能省下日后的几个月。

它也让接下来的合作变得诚实。桌上有了清晰的范围，我们就能以 Werkvertrag 的形式报出固定价格并为之负责。没有探索，任何固定数字都是猜的。探索 EUR 3,500 起，是你为整个项目买的最便宜的一份保险。

// 03

## 成本、风险与周期

成本 EUR 3,500 起 只是整套构建的一小部分，却是让固定价格成为可能的那个输入。

风险 刻意前置 你趁错误假设还便宜修复的时候，就把它们找出来。

时间 以周计，而非以月计 短而聚焦。它会缩短随后的构建。

// 04

## 这里通常会出什么问题

- 为省几周跳过探索，然后用几个月在返工上还回去。
- 把探索当成写文档的差事，而不是去检验最大的风险假设。
- 第一天就选定架构，然后在整个构建过程里跟它较劲。
- 任由利益相关方一直不对齐，直到代码已经存在。
- 在没探索过的范围上报固定价格，然后眼看它漂走。
- 做了没人验证过的功能，因为那个想法从没被压力测试过。

// 05

## 检查清单

一次探索阶段应该让你带走以下这一切。

- 清晰、书面、你和团队都认可的需求。
- 一套为你真实需求而选、而非按默认而选的拟定架构。
- 一份带顺序和粗略工作量的有范围路线图。
- 对你最大风险假设的一次检验，早早进行。
- 一个清晰到足以据此报出固定价格的范围。
- 关于要做什么的、有书面记录的利益相关方对齐。
- 对什么还不确定、什么已经确定的诚实判断。

// 06

## 在我们的工作中是什么样子

在这些案例里，一份前期的清晰计划让一次快速构建成为可能。

### [PromptID](/zh/case-studies/promptid/)
- **Status:** 上线
- **Outcome:** 6周 - 从零到生产
- **Summary:** AI 原生评估平台，在压缩的市场压力下 6 周内从零到生产。
- **Stack:** NestJS, NextJS, LangChain

### [LivLive](/zh/case-studies/livlive/)
- **Status:** 上线
- **Outcome:** 1000+ - 并发用户
- **Summary:** AR-RWA 平台：通过产品募集 200 万美元+、1000+ 并发用户，整整六周。
- **Stack:** Solidity, Typescript, React

这些是精选项目，并非我们的全部作品。自 2018 年以来我们已交付 75+ 款产品。

// 07

## 什么时候适用，什么时候不适用

// 01

### 什么时候 Wavect 是合适之选

- 你有想法，但还没有一份敢押上预算的规格。
- 你想要一个事后真能信得过的固定价格。
- 你有一个该在写代码前检验的风险假设。
- 你想要会挑战计划、而不只是照单接活的创始人。

// 02

### 什么时候我们并不合适

- 你的范围已经完全界定并验证。
- 你是在对一个你已经很熟的系统做微小改动。
- 你想第一天就要代码，并接受随之而来的风险。
- 你把规划看成开销，而不是保险。

花几周做探索，是你确认自己在做对的东西的最便宜方式。

// 08

## 相关服务与阅读

- [服务 MVP 开发](/zh/services/mvp-development/)
- [服务 软件开发](/zh/services/software-development/)
- [服务 分时 CTO](/zh/services/fractional-cto/)
- [指南 固定价格还是按工时计费](/zh/software-development-guide/fixed-price-vs-time-and-materials/)
- [指南 如何为 MVP 选择技术栈](/zh/software-development-guide/how-to-choose-a-tech-stack-for-mvp/)
- [指南 从 vibe coding 原型到生产](/zh/software-development-guide/vibe-coded-prototype-to-production/)
- [案例研究 PromptID：从 0 到生产用了 6 weeks](/zh/case-studies/promptid/)
- [案例研究 LivLive：从 0 到上线用了 6 weeks](/zh/case-studies/livlive/)

// 09

## 常见问题

### 探索就是写一份需求文档吗？

不是。需求是其中一部分，但重点是检验你最大的风险假设并拟定架构，而不只是把东西写下来。一份没人压力测试过的文档，不叫探索。

### 一次探索阶段要多久？

以周计，而非以月计。它刻意保持短而聚焦。产出是一份清晰到足以据此构建和报价的计划。

### 探索要花多少钱？

探索 EUR 3,500 起。它只是整套构建的一小部分，却是让一个值得信赖的固定价格成为可能的东西。

### 如果我们赶时间，能跳过探索吗？

可以，但这通常是你能选的最昂贵的捷径。错误假设会被烙进代码，再用返工来偿还。探索通常缩短整体周期，而不是拉长它。

### 探索之后我们拥有什么？

那些需求、拟定的架构、路线图，以及检验你最大风险假设得来的发现。它归你，无论带着我们一起往前走还是不带。

最近审阅: 2026-06-26 审阅人 [Kevin Riedl](/zh/team/kevin-riedl/) [wiki ↗](https://www.wikidata.org/wiki/Q139796365)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/software-development-guide/what-is-a-discovery-phase/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-06-26",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-06-26",
      "url": "https://wavect.io/zh/software-development-guide/what-is-a-discovery-phase/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/zh/software-development-guide/what-is-a-discovery-phase/#article",
      "@type": "Article",
      "about": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "author": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "dateModified": "2026-06-26",
      "datePublished": "2026-06-26",
      "description": "探索阶段是你在任何代码之前所做的工作，把一个粗糙的想法变成一份可构建的计划。结束时你会带走清晰的需求、一套拟定的架构、一份有范围的路线图，以及对你最大风险假设的一次检验。它是你发现自己即将做错东西的最便宜的地方。跳过它，是软件里最昂贵的捷径，因为每一个错误假设都会被烙进代码，日后再付钱。",
      "headline": "什么是软件探索阶段，为什么它要先于代码？",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-06-26",
      "mainEntityOfPage": "https://wavect.io/zh/software-development-guide/what-is-a-discovery-phase/#webpage",
      "mentions": [
        {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        {
          "@type": "Service",
          "name": "MVP 开发",
          "url": "https://wavect.io/zh/services/mvp-development/"
        },
        {
          "@type": "Service",
          "name": "软件开发",
          "url": "https://wavect.io/zh/services/software-development/"
        },
        {
          "@type": "Service",
          "name": "分时 CTO",
          "url": "https://wavect.io/zh/services/fractional-cto/"
        }
      ],
      "name": "什么是软件探索阶段，为什么它要先于代码？",
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "reviewedBy": {
        "@id": "https://wavect.io/team/kevin-riedl/#person",
        "@type": "Person",
        "name": "Kevin Riedl",
        "url": "https://wavect.io/team/kevin-riedl/"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          ".cmp-hero__headline",
          ".cmp-hero__lead"
        ]
      },
      "url": "https://wavect.io/zh/software-development-guide/what-is-a-discovery-phase/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/",
          "name": "首页",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/software-development-guide/",
          "name": "软件开发指南",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/zh/software-development-guide/what-is-a-discovery-phase/",
          "name": "什么是软件探索阶段，为什么它要先于代码？",
          "position": 3
        }
      ]
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不是。需求是其中一部分，但重点是检验你最大的风险假设并拟定架构，而不只是把东西写下来。一份没人压力测试过的文档，不叫探索。"
      },
      "name": "探索就是写一份需求文档吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "以周计，而非以月计。它刻意保持短而聚焦。产出是一份清晰到足以据此构建和报价的计划。"
      },
      "name": "一次探索阶段要多久？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "探索 EUR 3,500 起。它只是整套构建的一小部分，却是让一个值得信赖的固定价格成为可能的东西。"
      },
      "name": "探索要花多少钱？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "可以，但这通常是你能选的最昂贵的捷径。错误假设会被烙进代码，再用返工来偿还。探索通常缩短整体周期，而不是拉长它。"
      },
      "name": "如果我们赶时间，能跳过探索吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "那些需求、拟定的架构、路线图，以及检验你最大风险假设得来的发现。它归你，无论带着我们一起往前走还是不带。"
      },
      "name": "探索之后我们拥有什么？"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
