Photo by John Schnobrich on Unsplash
John Schnobrich在Unsplash上的照片

A decade ago, when I signed up on Upwork (formerly Odesk), I was surprised how low rate programmers ($5/hour) snatched every project.

十年前,当我注册Upwork(以前称为Odesk)时,我很惊讶低利率程序员(每小时5美元)抢夺每个项目。

Every time I asked someone about ridiculous rates, I received some variation of:

每当我向某人询问荒谬率时,我都会收到一些变化:

“There are way too many freelancers.”

“有太多的自由职业者。”

“They are mostly from China, India or Philippines.”

“他们主要来自中国,印度或菲律宾。”

I have personally bid on projects to build Google search rival in $10000.

我亲自竞标过以10000美元打造Google搜索竞争对手的项目。

(I didn’t win it — thank your stars. And no, it doesn’t exist, at least in my knowledge — again, thank the stars.)

(我没有赢得比赛-谢谢你们的星星。不,至少在我看来,它不存在-再次感谢星星。)

Clients come to Upwork not just for cheap programmers.

客户来到Upwork 不仅是为了廉价的程序员。

Photo by Artem Beliaikin on Unsplash
Artem Beliaikin在Unsplash上的照片

A few months into freelancer hustle, I talked one of my clients into it. He said:

进入自由职业者的几个月后,我与一位客户进行了交谈。 他说:

“Clients come to Upwork not just for cheap programmers. Yes, cheaper than hiring them in-house, for sure. But there is another reason for paying 20x-25x low.”

客户不仅要为廉价的程序员而来Upwork。 是的,肯定比在内部租用便宜。 但是还有另一个原因要付出20到25倍的低价。”

“And that reason is?”

“那是什么原因?”

“Don’t get me wrong, but we don’t expect quality work when we come to markets like this.”

“不要误会我的意思,但是当我们进入这样的市场时,我们并不期望高质量的工作。”

“Tell me what I don’t already know.” I replied.

“告诉我我不知道的事。” 我回答。

“Let me rephrase it: Our first hire mostly gives us a skeleton. Our next hire fixes bugs. The third one, if we are fortunate enough, polishes it — to the point that we can show it to our potential investors. That’s where any possibility of bringing in some real bucks begins for us. Sometimes, the end product is owned by someone who is 2–3 levels above us. We are just layers.”

“让我改写一下:我们的第一份工作主要是给我们提供了一个框架。 我们的下一个员工修复了错误。 第三个,如果我们足够幸运的话,可以加以完善-以便可以向潜在投资者展示。 这就是带来一些真正的钱的可能性开始 我们 。 有时,最终产品归我们之上2–3级的人拥有。 我们只是层层。”

“And you have already paid 3x for the same product — x being an Upwork programmer’s price.”

“而且您已经为同一产品支付了3倍的费用-x是Upwork程序员的价格。”

“Exactly. While this is still 6x-7x cheaper than hiring a native dev, it’s not 20x-25x as you imagined. Plus, we don’t make money off of it. The only advantage is that we save on time, we get quick investor/in-house feedback on the viability.”

“究竟。 尽管这仍然比雇用本地开发人员便宜6到7倍,但它却没有您想象的20到25倍。 另外,我们不会从中获利。 唯一的优势是我们节省了时间,我们可以快速地获得投资者/内部对可行性的反馈。”

“If every contractor goes like this, how come we programmers see so many requirement changes? After all, you are anyway going to polish it with someone else.”

“如果每个承包商都这样,我们的程序员怎么会看到如此多的需求变化? 毕竟,无论如何,您都将与其他人一起擦亮它。”

“Because we hope that this guy will get it through somehow, and we won’t have to go through all the explanations with hire#2. Many a times we are right. When we are not, nasty disputes arise.”

“因为我们希望这个人能以某种方式解决问题,并且我们不必在hire#2上进行所有解释。 很多次我们是对的。 当我们不在时,就会出现令人讨厌的争执。”

“But you saved serious money by making him revise the requirements.”

“但是,通过让他修改要求,您节省了大笔资金。”

“Yes, we save money, and if the guy’s attitude was good, we make up for it in our next project by retaining him.”

“是的,我们可以省钱,如果这个人的态度很好 ,我们会在下一个项目中通过留住他来弥补这一点。”

“But then,” he went on to add, “It’s not exactly requirement revisions that you just described.”

他接着补充说:“但是,这并不是您刚才描述的需求修订。”

“It’s the way those products should have been built, but somehow he missed it in the first place, and we didn’t have time to explain.”

“这是应该构建这些产品的方式,但是他首先以某种方式错过了它,而且我们没有时间解释。”

To which I said:

我对此说:

“Unseen obvious turns unforeseen changes to him.”

“看不见的明显转身给他带来了无法预料的变化。”

“If you say so.” And he went offline.

“如果你这么说。” 然后他下线了。

不断变化的需求是每位软件自由职业者的噩梦(以下是解决方法): (Changing Requirements Is Every Software Freelancer’s Nightmare (And Here’s How To Fix It):)

Every software agency/freelancer on earth has gone through this problem. Some take it as an opportunity to build up their long term relationships, some question it and deliver up as-is, some quarrel their way up until the client / they end up getting penalized by the platform.

地球上的每个软件代理商/自由职业者都遇到了这个问题。 有些人将其作为建立长期关系的机会,有些人质疑并按原样提供,有些人争吵直到客户/他们最终受到平台的惩罚。

In majority of the cases, poorly documented requirements are to blame. A spec clearly describing all user actions and all screen layouts is every programmer’s dream.

在大多数情况下,应归咎于记录不充分的要求。 明确描述所有用户操作和所有屏幕布局的规范是每个程序员的梦想。

In days of lean startups and Agile methodology, that dream is unachievable even for in-house developers. Gone are the days for well-written documentation, lucid flowcharts and cleaner prototypes.

在精益创业公司和敏捷方法论的日子里,即使对于内部开发人员来说,这个梦想也是无法实现的。 编写完善的文档,清晰的流程图和更简洁的原型的日子已经一去不复返了。

The urgency and budgetary constraints in a freelance project makes it almost impossible for the client to come up with the docs.

自由项目的紧急性和预算限制使客户几乎不可能拿出文档。

80% of the freelance work outsourced into freelancer marketplaces is for demos. It is not meant to make money, but to raise money.

外包给自由职业者市场的自由职业者中有80%用于演示。 它不是为了赚钱,而是为了筹集资金。

New freelancers who have yet to create their portfolios are doomed to trudge through requirement-less projects, or worse, ambiguous requirements.

尚未建立自己的投资组合的新自由职业者注定要经过无需求项目,或更糟的是模棱两可的需求。

So here goes some actionable tips on how to avoid those changes, and make the most out of your every project to sharpen your portfolio.

因此,这里有一些可行的技巧,说明如何避免这些更改,并充分利用每个项目来完善您的投资组合。

#1:提出简洁的问题: (#1: Ask Succinct Questions:)

This step assumes you have already asked for specs, prototypes or documentation, and have been turned down. If any of that exists, you can have better estimates based off of it. Again, if it’s gargantuan, you must go back to renegotiate and save some unnecessary toil.

此步骤假定您已经要求提供规格,原型或文档,并且已被拒绝。 如果存在任何一个,您可以据此获得更好的估计。 再次,如果是巨大的,您必须返回重新协商并节省一些不必要的工作。

Here is the list (better keep it saved in a Google/Dropbox doc):

以下是列表(最好将其保存在Google / Dropbox文档中):

  • What is the purpose of my deliverable? Is it a demo for team / investor / customer? Is it something you are delivering to another client of yours? How much time sensitive is every feature, and in what order?

    我的交付物的目的是什么? 它是针对团队/投资者/客户的演示吗? 这是您要交付给另一个客户的东西吗? 每个功能需要多少时间敏感度?顺序是什么?

  • What is my deliverable? A faster algorithm? A passing test? A properly aligned web page(s)? Or a completely missing feature (payment gateway)?

    我的交付物是什么? 更快的算法? 通过测试? 正确对齐的网页? 还是一个完全缺失的功能(支付网关)?

  • (Ask specific questions based on all possible answers to the above)

    (根据上述所有可能的答案提出具体问题)

  • How to deliver the deliverable? Do you have your own source control, or do I share on DropBox? Do you need furnished executable / Apk? Trivial, but not so trivial. It would be great to come up with your own alternatives before client has a chance to suggest it. It would show your professionalism and experience.

    如何交付可交付成果? 您是否有自己的源代码管理,还是可以在DropBox上共享? 您需要附带的可执行文件/ Apk吗? 琐碎,但不是那么琐碎。 在客户有机会提出建议之前,想出自己的选择是非常好的。 它会显示您的专业水平和经验。

  • If the goal is to clone Instagram, it would be absolutely necessary to narrow down the scope to screens and features before going about building it. Next: A search in clone marketplace wouldn’t be out of question.

    如果目标是克隆 Instagram ,那么在构建它之前绝对有必要缩小屏幕和功能的范围。 下一步:在克隆市场中搜索毫无疑问。

  • (Optional) Ask any time / budget related questions, or scope specific questions that conflict with both of them.(可选)询问与时间/预算相关的任何问题,或范围特定的问题,并与它们两者冲突。
  • Make sure your questionnaire is not more than a word doc page, or you may lose the client. At the same time, read it twice to ensure you clearly described what you need.确保您的问卷调查不超过单词文档页面,否则您可能会失去客户。 同时,请阅读两次以确保您清楚地描述了所需内容。

#2:准备好您的工具包: (#2: Have Your Toolkit Ready:)

In 9 out 10 software projects that get delivered, the date format on the screen looks like 01/25/2001 (mm/dd/yyyy). Clients come back asking for 25th January, 2001.

在交付的10个软件项目中,有9个项目的屏幕上的日期格式看起来像2001年1 25日( mm / dd / yyyy )。 客户再次要求2001年1月25日。

Rookie developers fret over the said requirement changes. It almost consumes their entire day. Not the date conversion, but fitting it under the screen boundaries.

新手开发人员担心上述要求的变化 。 它几乎消耗了一整天。 不是日期转换,而是将其置于屏幕边界下。

Same goes for currencies, decimal separators and country codes.

货币,小数点分隔符和国家/地区代码也是如此。

Having primary knowledge about the end products in your area tremendously helps. Before a project is even taken, you would do well arming yourself with all sorts of data formats and conversion techniques. Your toolkit should be able to convert any data format into string, vice versa as necessary, and much more.

对您所在地区的最终产品有基本的了解会极大地帮助您。 甚至在进行项目之前,您都需要做好各种数据格式和转换技术的准备工作。 您的工具箱应该能够将任何数据格式转换为字符串,必要时反之亦然,等等。

For UI adjustments, it would be good to have some templates handy, and figure out how they are made, before jumping onto specific client scenario.

对于UI调整,最好先准备好一些模板,并弄清楚它们的制作方法,然后再转到特定的客户端方案。

If you add animations (even the most basic ones — entry, emphasis, and exit), you are on your way to deliver over-the-roof freelance product that can consistently get you 5-star rating without overworking your weekends.

如果添加动画(甚至是最基本的动画,即进入,强调和退出),则说明您可以提供屋顶自由职业者的产品,该产品可以持续为您提供5星级评分,而不会使您的周末过劳。

Keep that reusable project toolkit on your GitHub, and optionally also make a demo project off of it to show to your future clients.

将可重用的项目工具包保留在GitHub上,并有选择地从中制作一个演示项目,以显示给将来的客户。

If you are a digital nomad, and often visit poorer Internet zones, also keep a copy in a USB drive, to carry it along.

如果您是数字Nomad民 ,并且经常访问较差的Internet区域,请将副本保存在USB驱动器中以随身携带。

#3:从不错过默认值: (#3: Never Miss The Defaults:)

I have witnessed umpteen websites showing NaN when something goes awry. A poorly written Java/Javascript.

发生问题时,我目睹了无数网站显示NaN 。 编写不良的Java / Javascript。

Poor user, if he doesn’t know programming. (Worse, if he does. If this is a browser, he will almost check the source)

可怜的用户,如果他不懂编程。 (更糟糕的是,如果这样做的话。如果这是一个浏览器,他几乎会检查源代码)

StackOverflow)StackOverflow )

Freelance projects are often delivered overnight, which may result into such disasters. Only robust, consistent coding habits can save you from such disasters.

自由职业者的项目通常在一夜之间交付,这可能会导致此类灾难。 只有健壮,一致的编码习惯才能使您免受此类灾难的影响。

Strongly typed languages like Swift have in-build mechanism to make coders question possible null-ness of every variable.

像Swift这样的强类型语言具有内置机制,使编码人员可以质疑每个变量的空性。

You must nonetheless make a personal check-lists, and go through it every time you transfer the data ownership: from REST to your data model, from your model to UI and so on. No matter what errors occur, data stored and presented must always be robust.

尽管如此,您仍然必须创建一个个人检查清单,并在每次传输数据所有权时都要仔细检查该清单:从REST到数据模型,从模型到UI等等。 无论发生什么错误,存储和显示的数据都必须始终可靠。

If you are working as team, such checklist can become even more valuable resource.

如果您以团队形式工作,则此清单可以成为更有价值的资源。

结论: (Conclusion:)

As a freelancer, you are rarely assigned a task to hack NASA. Or building the next mars mission.

作为自由职业者,很少给您分配黑客NASA任务。 或建立下一个火星任务。

Instead, you are loaded with tasks that are much more annoying and less satisfying. Most freelancers see them as problems.

取而代之的是,您要负担的工作繁琐得多,令人不满意。 大多数自由职业者将其视为问题。

The good thing is, since majority is plagued by them, you can win over your competition by fixing them before you begin your freelance contract.

好消息是,由于多数人困扰于他们,因此您可以在开始自由职业者合同之前解决这些问题,从而赢得竞争。

All you have to deliver is the universally obvious product.

您所要做的就是提供全球通用的产品

有关自由职业者软件开发的更多信息: (More on Freelance Software Development:)

翻译自: https://medium.com/the-innovation/how-to-avoid-requirement-changes-in-your-freelance-software-project-36b0ebbf01cf


http://www.taodudu.cc/news/show-4306569.html

相关文章:

  • htop 进程管理工具
  • 如何在Windows 7中管理操作中心
  • jira 史诗 故事 任务_史诗般的数据提取任务
  • 史诗般的数据提取任务
  • windows7 热键查看_创建快捷方式或热键以在Windows 7或Vista中打开任务管理器的“所有用户”视图...
  • 混频器选取简略
  • fpga实现dds和混频器
  • 算法与数据结构实验题 10.23 寡人的难题
  • 算法与数据结构实验题 10.23 寡人的难题——Kurskal算法
  • Text实例
  • K8S中的pod、services、容器的概念和区别
  • C/S,B/S与P2P架构
  • rancher2.6部署k8s集群示例
  • 感受一下大佬的气场: 背包九讲的作者: 崔添翼
  • 环迅支付深耕跨境支付,为跨境电商崛起添翼
  • 背包九讲之二:完全背包问题
  • 从MySQL Bug#67718浅谈B+树索引的分裂优化
  • 转载——背包九讲(原文链接已不可考)
  • 逐浪CMS2 x3.8新功能:定时执行C#代码让二次开发虎虎添翼
  • 背包九讲之一:01背包问题
  • [JMeter性能测试实战]之先从搭建测试环境开始
  • “英才添翼” 计划
  • 5G通信技术解读|波束成形如何为5G添翼?
  • 5G通信技术解读:波束成形如何为5G添翼?
  • [翻译]为EXPRESSION WEB 4添翼—如何支持HTML5设计开发!
  • 图像分类竞赛——添翼杯人工智能应用创新大赛——rank4解决方案
  • “添翼杯”人工智能创新应用大赛垃圾分类之模型部分
  • 背包三讲(感谢崔添翼 (Tianyi Cui)大佬的无私奉献)
  • 装上后这 10个扩展后,VSCode 猛虎添翼,无敌了
  • 宣武医院:让物联网为智慧医疗添翼

如何避免自由软件项目中的需求变更相关推荐

  1. 项目管理中的需求变更和解决之道

    一.令人烦恼的需求变更 作为一个软件项目经理,在项目开发进行中,你是否遇到过这样的问题:客户的一个电话,就推翻了之前你与客户.与你自己的开发团队,经过再三讨论而确认定下来的需求.之后你就重新开始了和客 ...

  2. 现代IT项目中的需求管理如何做?

    现代IT项目中的需求管理如何做? 领测软件测试网 我们知道现代项目管理的六要素是:时间.成本.质量.组织.范围.客户满意度,实际上,要满足这六个要素,计划一个良好的需求分析是实现这六因素的前提,如果我 ...

  3. 如何管理软件开发项目中,需求频繁的变更。

    在开发项目过程中,用户随时会提出一些新的需求,要求开发人员解决,这些需求的提出,有时在开发阶段中有时在开发阶段后.这种在需求分析的两个相邻子阶段中,或者在迭代周期的需求分析中,后一段或周期的需求分析结 ...

  4. 软件开发合同履行中的需求变更和交付调整

    基本案情: 上诉人(原审被告):山东某远重工有限公司("某远公司") 被上诉人(原审原告):浪潮世某(山东)信息技术有限公司("世某公司") 某远公司认为:(一 ...

  5. 项目中除了需求外还需要知道的问题

    1.客户对计算机的操作水平 2.客户计算机的硬件配置情况 3.客户使用计算机的环境 4.客户使用计算机的软件环境 5.直接使用软件的PC机网络环境 6.客户对所需软件的认知程度 7.客户使用计算机的习 ...

  6. 项目管理中的客户需求变更时需求分析和解决方法

    一.令人烦恼的需求变更 作为一个软件项目经理,在项目开发进行中,你是否遇到过这样的问题:客户的一个电话,就推翻了之前你与客户.与你自己的开发团队,经过再三讨论而确认定下来的需求.之后你就重新开始了和客 ...

  7. 设计 - 需求变更文档

    1. 软件开发项目中的 "需求变更"分析 和 "解决之道" " 需求变更",一旦提到软件开发项目进程中的需求变更,无论是项目经理还是程序开发 ...

  8. 项目积压需求项目计划_需求变更频繁,项目经理如何做好需求管理?

    项目实施过程中,项目经理常常面临一个重大挑战--需求变更.需求变更无处不在,市场条件变化.新业务出现.战略目标调整.客户需求修改.资源限制等,都会造成需求变更. 需求变更会影响项目的时间.成本和质量, ...

  9. 软件项目中需求管理工作的重要性

    开发一个软件项目,如果采用瀑布模型(或改进型瀑布模型)的话,通常会包括以下几个开发阶段,即:需求分析.系统设计.系统编码.系统测试.系统交付(及后续维护).在项目管理过程域中,主要包括:项目规划.立项 ...

最新文章

  1. 【Deep Learning笔记】卷积神经网络必须要掌握的知识(看不懂你来打我)
  2. cmake,CMakeLists.txt,make,makefile的关系
  3. 绝美自然风光风景壁纸,心旷必然神怡
  4. HSImageSidebarView
  5. 苹果mac智能手写笔记软件:GoodNotes 5 +iCloud同步
  6. 集成应用|契约锁与100+管理软件实现集成应用
  7. eclipse基础环境搭建(含Tomcat、maven)
  8. 资源分享 | 网易云课堂价值 399 的 office 三合一自学教程
  9. iPhone 13 投屏到 Windows 10 的办法
  10. 学校机房环境监控系统解决方案!
  11. ubuntu18.04在状态栏显示网速
  12. lopatkin俄大神精简中文系统 Windows 10 Pro 10240.16393.150717-1719.th1_st1 x86-x64 CN Tablet PC FINAL...
  13. 安卓案例-简单图片查看器
  14. 游戏主机转换器方案可适配土星/MD1/MD2/NGC/N64/SFC/SNES等主机
  15. Kettle的“增加序列”(自增字段)的使用
  16. Java生成PDF文件保存到本地磁盘
  17. 读张萌《人生效率手册》
  18. snmptrap 命令解析
  19. 组件化开发——支付中心
  20. mysql高可用集群MHA,PXC

热门文章

  1. 【名企面试经验-新浪-校招提前批】【数据平台研发工程师】
  2. 页面报错$injector:unpr
  3. 5W字穿透 ELK(史上最全):elasticsearch +logstash+kibana
  4. java.lang.ClassCastException: [Ljava.lang.Long; cannot be cast to java.util.List
  5. vb中msgbox用法
  6. discuz默认显示用户昵称
  7. mysql的双井号_C语言中单井号(#)和双井号(##)在宏语句中的应用
  8. python黑魔法指南_Python黑魔法大全
  9. Win10 笔记本 解决屏幕忽明忽暗,自动降低亮度问题
  10. 润乾报表echarts统计图省份地图设置