你需要一个英雄:项目经理

已发表: 2022-03-11

这篇文章是为你这个勇敢的企业家准备的,你心中有一个应用程序的想法,还有一点银行里的现金。 你在鸡尾酒餐巾纸上乱涂乱画的图表会扰乱整个世界,装满钱的自卸卡车已经派到你家了。 为了确保他们准时到达,这里有一些简单的建议可以让您的生产周期顺利进行。

为什么首先需要项目经理

“计算机程序是人类制作的最复杂的东西,”Douglas Crockford 说。 你可能以前没有听说过这个名字,但他以程序员而闻名。 他目前是 PayPal 的高级软件架构师,他开创了各种超出本文讨论范围的超酷技术。 他是一个非常了解大型项目的人。

至于我自己,我已经编程了 13 年,即使是现在,在某些时候,每个项目都会带我进入未知领域。 那里有很多不同的技术,并且正在以如此惊人的速度设计新技术,以至于我从未觉得自己完全掌握了正在发生的事情。 虽然每个项目都有其独特的挑战,但也有一些不变的因素:

  • 该项目有时间压力。
  • 预算比我想要的要小。
  • 我比客户想要的贵。
  • 我不像客户想要的那样完美地倾听。
  • 客户没有像我想的那样完美地解释事情。

显然,我们需要一个保姆。 必须有人介入以建立基本规则,让每个人都诚实,并确保我们不会忘记任何重要的事情。 必须有人促进各方之间的沟通。

这个人,这个英雄,是项目经理。

项目经理促进所有利益相关者和团队之间的沟通。

项目经理促进所有利益相关者和团队之间的沟通。

当我开始写这篇文章时,Toptal 没有与项目经理签订合同,但他们现在这样做了。 协同作用! 我只能想象那些被阅读以下建议并意识到他们错过了一个很好的机会的权力。

为什么程序员不能成为优秀的项目经理

撇开项目管理协会的认证不谈,项目经理能带来的最重要的东西就是经验。 结果,许多程序员会成为相当不错的项目经理。 我们在技术项目方面的经验比其他任何人都多,而且我们的分析头脑擅长编目信息和设定具体目标。

天知道,你付给我们的钱已经够多了,所以期望我们能管理好自己而不是强迫你也为别人的时间买单似乎是合理的,对吧?

好吧,对于初学者来说,你付钱给我们编码。

当我们从编程的迷茫中走出来决定优先考虑什么,或者争论这周实际上要完成多少工作时,代码并没有被编写出来。 然后至少需要 10 分钟才能回到“区域”,尤其是当我们对刚刚进行的对话感到压力时,如果我们正在争论功能优先级,这很可能会发生。 嘘,我知道,但这一切都是为了最有效地利用昂贵的资源。

最重要的是,我们真的不能只见树木不见森林。 如果你从这篇文章中什么都不带走,请理解这一点:当我整天盯着一些特定的错误时,我的大脑会失去对大局的追踪。

当我修复这些错误时,我的大脑会奖励我,并且我认为我已经做了很棒的事情并且现在可以去玩电子游戏了。 当有人提醒我主页仍然损坏时,这完全是一个惊喜,因为我花了一天时间让我的大脑对整个项目的一小部分非常详细的了解,而忘记了其余的部分。 我的大脑就是这样工作的,许多其他程序员也有类似的心理构成。

编程和项目管理可以是完全不同的思维方式。

项目经理确保不会丢失大局。
鸣叫

为什么客户不能成为一名优秀的项目经理

那么,如果我们程序员不想承担完成项目管理工作的责任,那么它必须落到你这个客户身上。 是你的钱。 这是你的愿景。 无论如何,你最终要对整个事情负责。

然而,你也有很多事情要做。

许多客户像我们其他人一样只是从事日常工作的凡人,有些人甚至因拖延或健忘而闻名。 虽然这不一定描述您,但请考虑拥有一个专业记忆者的想法,以便您可以回到保持整个项目活力的重要工作。

如果您曾参与或监督过类似范围的技术项目,那么您确实可能会成为您项目的优秀经理。 如果您还没有,请不要低估可以预测可能出现的问题的人的价值。 时间估计总是只是估计,错误往往会在最不合适的时候出现。 让另一个(如果只是兼职)员工知道流程的哪些部分需要或可能需要最多关注的人是值得的。

以质量保证 (QA) 为例。 适当的质量保证对于从任何项目中获得您想要的东西都是必不可少的,而且它永远不会得到应有的关注。 一个好的项目经理会充分利用有限的 QA 资源,也会为你的程序员提供质量保证。 有时,我们超出了我们的深度,有时我们会犯错误。 您需要一个技术熟练的人担任监督角色,以确定您的程序员是否只是在休假,或者他或她是否实际上不适合该项目。 尽早解决人员问题可能意味着您的项目生死攸关。

最后,即使是您,客户,有时也需要一些检查和/或平衡。 这对我来说很难写,因为我们计算机程序员并不以直言不讳的天性而闻名。 可以说,我参与过许多项目,客户坚持认为一切都是重中之重,绝对是所有需要完成的事情。 虽然我毫不怀疑这是绝对正确的,但遗憾的是,这些客户无法控制一天中的小时数。 他们最终没有得到他们想要和/或应得的积极结果,我认为如果客户委托项目经理有权评估工作量并委婉而坚定地控制事情,这种结果是可以避免的. 很难做出大多数技术项目所需的冷静判断,因为这是你的想法和你的钱,而计算机不在乎你或我是否会哭泣和尖叫。 (我知道这是真的,因为我已经尝试过很多次了。)

管理技术项目的技术不完整列表

无论您是决定忽略之前的 1,000 多字词并自己管理您的项目,还是您打算聘请某人但希望对流程有更多的了解,这份清单都会对您有所帮助。 我从来没有(正式)当过项目经理,所以我不能说任何给定的项目经理会使用哪些工具,但我在所有这些技术上都取得了很好的成功:

里程碑

当开始一个新项目时,大多数人直觉地知道将项目分成更易于管理的块很重要,每个块的工作价值从几周到几个月不等。 在项目开始时,最好召开一次启动会议来建立这些里程碑。 可以对如何达到他们有点模糊,最重要的是在每个里程碑之后继续检查,以便从每个人对项目的增强理解中受益,并确保项目的里程碑仍然(大致)与最初认为的大小相同。

时间估计

我们程序员绝对讨厌估计,因为我们知道它们是错误的,而且我们知道它们会被用来对付我们。 他们错了也没关系,因为根据定义,它们是基于少数未知数的。 他们被用来对付我们也没关系,因为我们的工作很轻松,而且不时地鞭打鞭子并没有什么坏处。

因此,每当新的里程碑开始工作时,请随时询问估算。 您应该期望每个主要功能有一两行,以及该功能需要多长时间的粗略估计。 我通常做一个乐观的估计,然后加倍。 通常情况下,这段额外的时间会导致看不见的陷阱。

用户故事

用户故事是对应用程序中单个功能的简要描述。 它们作为重要特征的记录很有用,并且应该是一口大小,能够放在索引卡上,并且通常伴随着一点图画。 更重要的是,它们充当了客户想要的东西和程序员必须告诉计算机的东西之间的桥梁。 它们对您(客户)来说很简单,可以在几分钟内完成,但对我们(程序员)来说足够详细,可以咬牙切齿。

有关用户故事的一些快速信息,我发现 Mountain Goat Software 和 Roman Pichler 的这些教程质量高且简洁。 有关敏捷项目管理整个哲学的更多信息,请阅读这篇 Toptal 博客文章 Paul Barnes 的敏捷项目管理终极介绍。

组合物(样机)

这不是一篇关于为什么需要设计师的文章,因为我觉得大多数客户已经理解这一点,但它值得重复,因为如果你在你的程序员面前拍出一个具体的、经过深思熟虑的设计,你会看到巨大的生产力提升。 每次我们必须做出设计决定时,我们都必须离开“区域”,每次我们必须返回并更改某些内容,因为我们没有收到最终草案,好吧,你做数学......我'我不抱怨,因为设计很有趣,但根据我的经验,这是可避免的额外计费时间的第一来源。

大多数设计师在 Adob​​e Photoshop、Adobe Illustrator 或 Sketch 中提供合成,也称为合成。 如果您自己做,您可以使用无数在线工具之一,例如 Balsamiq 或 InVision。 comp 不必具有与成品相同的颜色和样式(因为这些可以在以后轻松更改),但请花额外的时间确保所有 UI 元素都存在并考虑在内。

相关:聘请前 3% 的自由 UX 设计师。

站立会议

长时间的会议有时是不可避免的,但你真的不想让你的程序员超负荷或占用他们不必要的时间。 我的一些客户似乎希望我记住在两个半小时的会议中所说的一切。 他们非常失望。 站立会议通常限制为 15 分钟,并且习惯上站立持续时间。 站立方面应该确保每个人都参与,并保持会议简短。

在站立会议期间,每个人都围成一圈提供一份简短的状态报告,让所有团队成员随时了解彼此的最新进展。 您可以在 ExtremeProgramming.Org 找到有关站立会议的更多信息。 如果你们都在远程工作并且不想让每个人每天都使用 Skype,那么您可以尝试使用 15Five 等有趣的工具来替代站立会议。 15Five 让团队成员在他们方便的时候提供他们的意见,它会提示他们调查问题,以梳理出更深入的回答。

票务系统

虽然任何人都可以维护一个便签系统和 Google Docs(每个人的任务以不同的颜色突出显示),但这真的没有必要; 很多人都试图为你解决这个问题。 Basecamp 和 Trello 以其易用性而闻名,而 Pivotal 则试图将整个“敏捷”理念封装到一个非常巧妙的包中。 无论您选择什么,一个好的票务系统至少可以让您:

  • 创建任务
  • 分配优先级和截止日期
  • 链接任务和子任务
  • 分配不同的解决方案,例如“完成”或“测试失败”
  • 显示分配给特定用户的所有任务

当项目经理向您展示 40 张全部在同一天到期的鲜红色优先票时,您将真正了解这个项目鸟瞰图的价值。

客户并不总是有正确的视角来管理他们自己的项目。

您可以利用 Trello、Basecamp 或 Wrike 等工具来跟踪项目进度。

源代码控制

您甚至可能永远不会查看项目版本控制系统中的代码,但源代码控制(或版本控制)是我们可以使用的最重要的工具之一,是可以想象的最强大的备份系统。

大多数现代项目都使用 Git,尽管有时您在处理已经存在了一段时间的项目时会遇到 Subversion (SVN)。 Github 允许您免费托管无限的公共存储库(此外,它包含世界上大多数开源项目),而 Bitbucket 允许您托管无限的私有存储库,因此是商业项目的首选。

无论您选择哪种版本控制系统,它都会远程存储我们的代码以防万一发生任何事情,并且每次我们“提交”代码时都会跟踪它,同时迫使我们写一条描述我们正在处理的内容的小消息。 这可以防止不同的开发人员覆盖彼此的代码,它让我们可以看到在给定时间段内所做的所有更改,它让我们可以创建新的代码分支来存储不会立即上线的功能。 它甚至有一个名为“责备”的命令,可以显示谁对给定的代码行负责,以及何时提交。

源代码控制是最大的。

测试驱动开发

这是一种相对昂贵的做法,这意味着它不经常用于预算仅限于几个自由职业者的项目中。 所以你,作为一个创业者,不应该为不这样做而感到难过,但我必须把这个想法摆在你面前,因为它提供了对错误的终极防御。 基本上,您的程序员会花费额外的宝贵时间编写测试(小代码块),以确保应用程序的某些部分以特定、可预测和可重复的方式运行。 例如,我可能会编写一个测试断言,当单击“登录”按钮时,会打开一个包含用户名字段的弹出窗口。

测试的美妙之处在于,一旦我编写了它们,我就可以用一个命令来运行它们。 如果我编写了 200 个测试,我可以在发布应用程序的新版本后运行它们,以确保这 200 个功能中没有引入任何错误。 它并不完美,但它已经尽可能接近保证无错误(至少是 bug-lite)的应用程序。

包起来

这就是我对项目管理的所有了解。 我不确定这其中有多少会在项目管理学院通过,但这些都是我在过去十年中从事网络项目时学到的东西。 当然,我建议您雇用某人以从他或她的经验中受益,但我希望这些信息对您有所帮助,即使那不是您能够做到的。 你将是这个项目的最终权威,所以你对它的内部运作了解得越多,你就越有可能带领它走向胜利。