如何评估Web开发项目
正确估算一个 Web 开发项目的耗时取决于两点:能够将项目分解成小块,并根据经验了解每个块的耗时。在本文中,我将分享实现这两个目标的方法,以及在没有经验可借鉴的情况下应该采取的措施。
当你需要估算时
如果您的计费是基于时间的,那么估算项目所需时间非常重要。您可能会认为,如果按小时(或周或月)计费,就不需要估算时间了。这或许没错,但大多数客户都希望了解项目的总成本。
如果您收取与项目所需时间挂钩的固定项目费用,那么估算至关重要,以确保您至少能获得最低时薪,并有望在此基础上获得利润。如果您估算的项目实际完成时间只有一半,这意味着您的时薪现在只有最初计算的一半。没有什么比不得不从事一个已经远远超出最初估算的固定费用项目更令人沮丧的了。
如果您根据价值来定价项目,您仍然需要至少粗略估算所需的工作量。这可以让您根据实际情况核实您的定价,确保您至少达到最低时薪。基于价值的定价应该可以大幅提高您的有效时薪,但是,如果您尝试承接对客户价值较低的项目,最终可能会以非常低的时薪完成工作。随着经验的积累,您会自然而然地知道哪些项目您可以承担,哪些项目对客户的价值不够高,不值得承接。
要深入讨论项目定价,请查看我的《自由职业 Web 开发定价终极指南》。
分解
大多数项目在接到时都过于庞大,难以估算。项目是由许多独立任务组成的。相比于估算整个项目,你更有可能完成其中任何一个任务并准确估算其耗时。请分别记录这些任务,以便分别估算每个任务的耗时。
让我们看一个例子。
示例:让我的 WordPress 博客更快、更便宜!
一位客户带着一个高流量的 WordPress 网站来找我。这个网站速度很慢,而且托管费用昂贵。客户希望我帮忙解决这些问题。我提出了一个想法,让网站适配GatsbyJS,这是一个基于 React 构建的静态网站生成器。这样客户就可以将网站以静态单页的形式提供,使其速度超快且易于托管。客户很喜欢这个主意,但提出了一个令人头疼的问题:“要花多少钱?” 😱
要回答这个问题,我们首先需要了解这需要多长时间。为了便于举例,我们假设该项目的定价是基于完成所需的时间,因为在这种情况下估算至关重要。让我们将其分解成几个部分。
顶层细分
- 将 WordPress 主题适配到 GatsbyJS
- 将内容迁移到 GatsbyJS 网站
- 让用户轻松添加内容、构建和部署网站
现在,我们完成了一个项目——将 WordPress 网站迁移到 GatsbyJS——并将其拆分成三个部分。不过,这些部分仍然太大,难以估算。“将 WordPress 主题适配到 GatsbyJS”需要多长时间?我不知道。“让用户轻松添加内容、构建和部署网站”需要多长时间?同样,我不知道。这意味着我的部分不够小。让我们再试一次。
主题改编细分
- 将 WordPress 主题适配到 GatsbyJS
- 查找 WordPress 主题中使用的字体
- 迁移全球印刷样式
- 调整标题
- 调整内容区域
- 调整页脚
- 调整侧边栏
在思考如何分解主题适配的过程中,我意识到网站上有些页面没有使用全局页眉、内容区域、页脚和侧边栏。这些页面是使用构建器自定义构建的。我需要手动构建它们。
- 重新创建自定义 WordPress 页面
这是分解项目带来的一个令人愉悦的副作用。你会发现一些原本可能被忽略的项目细节。
思考内容迁移
- 将内容迁移到 GatsbyJS 网站
当我看到这个的时候,我意识到我需要做一些决定。Gatsby 有一些插件,允许我从许多不同的来源提取内容。我需要决定哪个来源适合这个项目。
如果我愿意,我可以从现有的 WordPress 数据库中提取数据,但这意味着客户仍然需要将数据库托管在某个地方。这样我的客户就能在 WordPress 仪表盘中创建内容,而他们已经习惯了这种方式。我不确定这有多重要。这或许是问客户的一个好问题。
如果我想彻底告别 WordPress,我可以使用其他 CMS,比如Contentful。不过,这仍然会给我们带来一笔不小的 CMS 费用。由于我的客户担心价格,我不想走这条路。在与客户讨论这个问题时,我了解到他们更倾向于使用Markdown,所以我会选择 Markdown 来处理内容。
我做了一些研究,发现这个决定让当前的步骤变得非常简单。我找到了一个工具,可以把你的 WordPress 文章转换成 Markdown 格式,并为 Gatsby 创建合适的目录结构。我可能应该测试一下,确保它能正常工作,但如果不行,我可以写一个命令行脚本帮我完成转换。如果万无一失,我可以估算一下。如果现有的工具能用,那对我来说就是额外的福利了!
无论如何,我认为我现在不需要进一步细分这一点。
自动化构建和部署
- 让用户轻松添加内容、构建和部署网站
- 从 Markdown 源生成页面
既然我已经决定使用 Markdown,我知道我需要这一步来允许我的客户添加新内容。不过,我不太确定我到底想做什么来构建和部署。最简单的开发方法是编写一个简单的命令行脚本来构建和部署,但这并不适合所有客户。甚至很多开发人员都不习惯使用命令行,更不用说普通人了。😉 进一步研究后,我发现了Netlify CMS。这是一个用于编辑 Git 存储库中文件的精美前端。我找到了一个 Gatsby 入门套件,它包含了通过 Netlify CMS 添加新内容后构建和部署网站所需的一切。同样,这项宝贵的研究使这篇文章变得更加直白易懂。
- 从 gatsby-starter-netlify-cms starter 开始工作
最终分析
- 将 WordPress 主题适配到 GatsbyJS
- 查找 WordPress 主题中使用的字体
- 迁移全球印刷样式
- 调整标题
- 调整内容区域
- 调整页脚
- 调整侧边栏
- 重新创建自定义 WordPress 页面
- 使用转换工具将内容迁移到 GatsbyJS 网站
- 让用户轻松添加内容、构建和部署网站
- 从 Markdown 源生成页面
- 从 gatsby-starter-netlify-cms starter 开始工作
现在,我终于有了一些可以准确估计的块。
估算零件
关键在于:给每项任务都加上数字。你可以参考以下两个方法之一来计算数字:
- 你过去做过同样或类似的事情的经历。如果你只记得一些事,那总比什么都没有强……但也没什么用。理想情况下,你一直在追踪时间,可以回顾历史记录,了解这项任务在过去实际花费了多长时间。
- 你最好的猜测。这很悲哀,但却是事实,但科学和事实只能帮助你估算到一定程度。希望你对此有所依据。即使你没有完成你正在估算的任务,也许你以前学过类似的事情,并且真的做到了。完成这件事所花的时间可能和现在做这件事所花的时间差不多。
但我没有任何/足够/正确的经验!
当你还是新手时,你会发现自己更依赖猜测而不是经验。没关系。
你肯定会搞砸的。你会严重低估某些东西,把那个项目的时薪降到8美元。你甚至可能会重复两三次(甚至更多)。
您用这些损失的收入换来的,是下次做出更精准估算所需的经验。您添加的数据点将会影响到您下次的项目估算。请务必以某种方式记录这些数据,以免浪费您的资金。
你甚至不会想到的事情
客户沟通
客户对沟通的期望是什么?他们希望每天还是每周与您见面一小时?他们会把这留给您决定吗?无论如何,您都需要花一些时间与客户沟通。请务必在预算中考虑到这部分时间。
修订
这个问题可以在合同中解决,规定如果出现大范围修改,必须重新协商条款。但几乎每个项目都可能需要至少进行一些小修改。请务必考虑到这一点。
旅行
大多数 Web 开发工作不需要出差,但有些工作需要你到办公室工作,或者只是签到或参加会议。这些出差需要时间,你应该将其作为项目的一部分收取费用。
如何开始
如果您是自由职业新手,以下是入门的分步指南。
- 尽可能地把项目分解。你需要把各个部分分解得足够小,以便于估算,但也要避免在这一步花费3-4个小时,把所有东西分解成细小的碎片。
- 找出你最不了解的部分。对每个部分进行一些研究,直到你对它们需要多长时间有了更清晰的了解。再次强调,要在这里取得平衡。你当然可以直接进行项目,以消除所有的猜测,但这有点太过了。
- 尽力做好每一项任务。我知道你经验不足,但要充分利用你已有的经验。如果你遇到一项你完全不知道从何入手的任务,那么这份工作可能不适合你目前的自由职业发展阶段。告诉客户这个项目不太合适,并推荐其他人来做,这没什么不好。你仍然可以成为英雄,帮助客户找到解决方案。
- 将所有估算翻倍。 至少翻倍。Web 开发人员非常乐观。你会发现,你原本以为基于“最坏情况”的估算,实际上只是介于所有可能结果之间的某个值。通过在几个任务中模拟实际的最坏情况,你就能发现这一点。将所有估算翻倍意味着你不会在这些任务上倾家荡产,而你在进展顺利的任务上获得的额外缓冲可能让你仍然能够达到项目的总体估算。
如果你从这篇文章中能学到一点什么,那就是无论你是新手开发者还是资深顾问,你都难免会搞砸这件事。不要浪费大量时间试图做到完美。
花一两个小时把事情分解开来,做一些研究。尽可能接近目标,然后继续前进。记录实际发生的情况,并在下次的过程中将这些信息输入到你的流程中。最终,你会发现低估的次数会比接近目标的次数少得多。这真的是你能期待的最好结果了。
我在我的新书《自由职业网页开发定价》中倾囊相授了关于自由职业网页项目定价和估算的所有经验。购买本书,学习我关于项目估算、定价、合理定价
以及赚取更多收入的所有技巧。💰