Also, once you get good rates, you ask for a higher rate from the next customer. If it is higher than their highest rate they tend to tell you what their highest rate is which gives you a great place to negotiate from. Like, maybe I'll take less if I can work remote 2 days a week.
I - then working as a freelancer programmer for a few years - once had a (German company) customer where the person that I was supposed to work with was so unpopular and known as "difficult to work with" inside the company that the manager that had hired me for the job apologized profusely, especially that he had to place me in the same room with that person. All the people I had contact with were similar.
Why was he never fired? Well, because he was so good, you could say he was perfect. So they gave him a room for himself - usually it was about four people per office and accepted the rest. And I say that with decades of job experience in many software companies in the US and in Germany. The documents describing what he wanted down to the last detail were just.. perfect! I ended up doing two programming jobs for them a year apart and both times I simply took the documents and worked on it from top to bottom until it was done. I never had to ask a single question, there never were any changes. Sometimes I had to explain a few things I did, but that was just usual communication, there never was anything unclear.
And also, I never had any issues with that guy myself, even during the time we shared a room. He "merely" expected everybody to be on his level, other than that he was fine. Once a female colleague came into the room to ask him something, and in an exasperated tone he told her that he had already described everything she asked for in paper X in section Y. And he was right, what she had asked was right there. As always, he had everything perfectly planned and documented well in advance. Of course, that's no way to gain any social points and that woman was almost ready to cry (I had quite a few chats with people working in the other rooms and the women disliked him the most, but the men did too), but for better or worse, he was just too perfect and expected the same perfection from everybody.
That was the first and only time I ever had such an experience, everybody else apart from that one guy is just working normally. Right now I have the exact opposite experience, I program for people who only have very fuzzy ideas what they want. Works too - you just have to treat it differently and have a different mind set. That one job is one of my most memorable experiences, including the social drama.
As I think about it, it gets to what's wrong with the idea of expecting to be friends, or to always get along congenially with co-workers, when in fact the reason for interaction in a business is to produce something of value.
No doubt this unpalatable person was impressively productive in both yours and OP's stories, and in a business environment, I wish that could weigh heavier than the difficult personality...
Don't think I have a point, but am genuinely curious why having a diagnosis for the behavior makes it easier to accept
It eliminates malicious intent. If you know they can't help it, you still might think it's not worth working with them. But you know that it's not personal.
What it doesn't do is justify the process drag introduced by designers who aren't domain experts or design for the sake of design.
So at the risk of having opinions that overreach the context I was given here, I'll argue that the materials were not "perfect", no matter how thorough.
In fact, I think it's possible to edit what you wrote a little and make the word "perfect" ironic. If someone is making colleagues emotional, that's a red flag that the approach to documentation leaves room for improvement, for instance. Good writing requires empathy for the audience.
I'm questioning the value of just shipping docs without following up that they meet their purpose(s). That's what I mean by empathy.
I can't imagine that approach working on any domain that isn't completely understood by the documenter - it simply leaves no room for learning.
And are you saying there were zero changes in requirements?
Scope changes aren't scary if you write a good contract. As a consultant, that's truly one of the most important skills, writing a well defined scope for contracts. That way when it changes, you're covered by change order fees.
There's a clause that says the scope of the project is defined in an addendum document, and any changes to that may incur additional fees that must be agreed upon by both parties. There's also a clause that the deposit is 100% non-refundable once I have begun work in any manner, and that I'm not obligated to turn over anything until the final payment has been made. This way they have skin in the game, and can't try to pull a fast one with a huge change expecting me to do it free or lose the contract.
I'm also very happy with hourly billing, but the last time I saw a similar topic, the whole comment section was insisting that per-project billing is the only viable way to make money in consulting. Oh well..
Generally, when someone gives you advice that's supposed to be 100% right in all cases, they either stand to gain from it personally or have no idea what they're talking about.
In this case, the difference between the two approaches is mostly a question of who ends up with what risks. My wife and I run a two-person development contracting business, and we've done projects with both approaches. Both have worked well for us, but for the type of work we tend to do, most projects would not be suitable for fixed price billing.
The reason is that most of our work consists of "deep dives" for figuring out if something is possible at all. (Or more precisely, possible within a reasonable amount of effort.) So what usually ends up happening is we'll agree on a capped research budget, and dig into the problem up to that number of days. If we find a solution before that time, great; if we find a fatal blocker before that time, well, not great but it's a result. Otherwise, we'll hopefully have found some leads to pursue in that time and can give a better estimate for how much more effort it'll take.
Maybe it's possible to do this sort of project on a value-based basis, but I certainly haven't found one that seems fair, or that a client is likely to accept. The author of the original article likes to claim that with value based pricing, interests are aligned. Well, for this sort of project, one of the parties is likely to lose out massively if you agree a fixed price up front.
And as for the author's assertion that your income is capped: you have one variable you can tweak: your rate. Charge more! We charge more than his "optimistic estimate". Sure, we're still not rolling in it, but we also don't work anywhere near 40 hours a week. And the implication that our incentive is to drag out projects to get more billable hours - well, I have a stronger incentive to make all my clients super happy so that they keep coming back for repeat business. This way, we have more requests coming in than we can feasibly accept.
Of course, only touch open ended projects for savvy clients. The nature of our particular specialty means we work with tech companies who understand the nature of big unknowns in projects.
$240k would be a highly respectable income pretty much anywhere in almost any field. In most of the world, doctors are paid less than that while routinely working night shifts and constantly making life and death decisions about their patients, and you’re seriously complaining about being paid $2k/day for fiddling about with stuff on a computer?
No one pays you because they like your face. They pay you because you make them money.
No one works when they have rivers of cash flowing in their direction. You trade your time for their money: a slice of your life, in the most literal sense.
What is the value of your life?
Know your worth. Take every dollar. You will get precisely what you can negotiate, nothing more, nothing less.
But to be in that position you first need to build a stable revenue stream and that happens more easily with hourly consulting.
It isn't unlike tying your contract to the behavior of a poorly documented remote API provided by another company that won't respond to any of your requests.
The risks include: the hardware being flaky. The hardware being undocumented. The hardware having no run control. The function relying on another piece of hardware or environment not provided.
I once spent two weeks looking for a single bit not-so-helpfully labelled "WinCE" in Texas Instruments' documentation.
But then again I'm at this very moment doing a board bringup for a Tegra AGX system and I wouldn't advise anyone on doing that on a fixed price contract!
In any case, all it takes is one project with one unreasonable customer who demands extra work and then doesn't pay, to wipe out the gains from lucrative projects.
Also, in the long term you accumulate responsibilities like mortgages and families that makes that low-risk monthly revenue stream so important.
I'm trying to get started with freelance work as a college student, and I've experienced the opposite. People want project-based billing because they don't trust me, or my ability to work "as quick as an experienced programmer".
(For context, when I say starting I mean starting. I'm currently working on my second contract ever. I have no non-internship work history. My first was for $50 for what ended up being 4hrs, my current was $300 for what I expect will take at most 20hrs. Then Upwork takes 20% for making the match and providing insurance against my not delivering.)
I don't know the exact nature of your work - is this just doing generalized programming work, or do you specialize in something (e.g. setting up a Wordpress site)? If what you do is repeatable enough, at some point you'd make good money working per project because you'll become much more effective. Of course it's more difficult to pull off when you do generalized work.
This however has one very significant exception, and that's when dealing with a corporate client which would lead to more work.
You see, any company that's larger than 20 employees separates the financial management from the technical staff. That means that if you've made it through negotiations and contract work setting an hourly framework with the financial side of the company, you're now another tool at the disposal of the technical people which could utilize you almost on a whim.
With a project based setting you need to go almost to square one and renegotiate all the way down every time you want more work. It's not just a hassle for you - it's a hassle for the engineers who'd love to use your help.
This, eventually, is what builds you a recurring revenue stream; making yourself available to the technical people at minimal friction. I've been responsible for a pretty significant corporate operation where my team was responsible for procurement of products and services the size of a respectable startup A round, and dealing with vendor onboarding, scope of work, legal approvals and financial signing at the VP/CFO level were a huge time waste. Contractors who billed hourly were much simpler to work with - waste time once and be on your merry way for months at a time. I try remembering that now when I crossed sides, back to consulting. Try make the life of the people who need your services as easy as possible - usually you'll have mutual interests.
> I don't know the exact nature of your work - is this just doing generalized programming work, or do you specialize in something (e.g. setting up a Wordpress site)?
I have no idea. I'm just applying to every doable looking short job on Upwork posted a by client that doesn't scream sketchy or terrible to work with (eg they've hired more than five people and rated every one less than two, or they say they want to run deploy code to other people's computers remotely but will only give details over another channel).
By doable I mean looks like I'll only have to learn two or three new things. For example, I just finished figuring out how to make a basic Netlify cloud function that will take data from the Google Sheets API (two new things) but the next step, parsing the cells and plugging it into a template, is something I've done before.
I'm thinking of becoming a Shopify specialist because the dev experience seems so pleasant, but I wonder if I'd be better off learning something more unpleasant to work with because there might be less competition.
Plenty of fish in the sea, plenty of clients who are a pleasure to work with and want to build a long term partnership with their freelancers.
Likewise, if you aren't desperate for cash today try making a plugin for a marketplace somewhere, or some library or product you can be an expert in. Also consider whether companies might want a part time intern during the year or other opportunities. I think freelancing works better after you've been on a successful team and can replicate that success on your own. It's a lot of moving parts if you're just beginning to learn your trade.
I absolutely don't need the work to survive. I'm aiming to get around 200 hours of contract work over the course of a semester with good references to be more competitive for jobs and internships this summer.
Also, I didn't even bother applying to the jobs that had those quotes I mentioned. I doubted very much they'd leave a positive review, and with only one review a negative review would make it much harder to get the next job. Those quotes came from the proposals they posted for freelancers to apply to be interviewed for, not private communications.
I'm going to college in a small town in Connecticut, where I can't get a programming job, and I don't think many places would take on a remote intern. In the summer I'll be staying with family in the Bay Area, so options will be better.
Your advice to build a plug-in sounds like a great idea. I think I might try to specialize in Shopify, get a feel for what people want, and then generalize what I'm building for people (of course being transparent that I would retain ownership of code).
I totally agree with you that it doesn't make sense to jump into a career in freelancing. It does look like a nice option once I get more experience, thought.
And while there may not be so many remote internships out there, tossing a resume at a remote-friendly company and seeing what happens can't be any harder than upwork :)
Personally, I was lucky in this regard. I landed myself an internship summer after my sophomore year in college doing web/db work on an intranet site at a Fortune 500 back in 2001. Paid decently, started at around $15/hr. When I left 3 years later, was making around $20/hr. Worked fulltime during summers, but was able to keep working through the school year. I was also able to largely work remotely during the school year, so I was able to put in 20-30 hours per week while only going into the office once a week.
The internship was a great experience. I was working for the DBA team, so I got a lot of hands on experience and knowledge working with them on several RDBMS's including DB2 (mainframe), UDB (Unix/Windows) and SQL Server. Things that I had no course to take in college at the time.
The internship also set me up well for getting my first fulltime job. The hiring manager was stunned at the uears of professional experience I had straight out of college and the level of self learning I showed (worked ar first in ASP/VBScript and Javascript, then ASP.Net/C# in the 1.0/1.1 days - all self taught). They had me take Brainbench exams for C++ (which is what they were looking for) and C#. I was abysmal at the C++ exam at the time, something like 65th percentile, but scored above 95th in C# at the time. The manager took a risk and hired me, expecting that Id be able to grow into the position. This at a firm known for hiring only from top Ivy League schools and culling the bottom 10% every year. Lasted a bit over 9 years there, before I decided to move on.
Definitely this. I moonlighted as a consultant while at a full time salaried day job. Job was billed as some minor enhancements to a data processor and a website for one of their clients. What it quickly devolved into was badically me being the scapegoat for everything that was wrong and expecting me to to answer rather impolite and unprofessional emails from their client (this was in finance). Even billing at 150/HR, it wasnt worth it and I quit after a few months.
The little extra per week just wasnt worth the stress and hassle.
Edit: grammar
I find it funny how often I hear, "it's just..." Really? You hired someone else because of your lack of knowledge/experience but suddenly miraculously you have complete clarity on what it's going to take?
Care to explain ? don't accept overwhelming changes without adapting the cost ?
The thing is that managing inevitable scope changes is an art and a science. Some changes get accepted as part of the project, others are scoped as fixed price updates and others are very hard to scope so may be hourly. In any case this involves identifying the changes, scoping the work, estimating the work, pricing the work and then negotiating with the client to accept the pricing on the change. All of that takes time, often has little to do with the actual development and adds additional risk. That change control is the delicate balance of pleasing the customer while continuing to make money without taking on too much risk.
I understand it's tricky and can be overlooked or swallowed painfully though. Negotiation is a life critical skill.
I work for a small consulting firm, and we keep bidding on very aggressively-timed projects with technical challenges and high skill requirements. Things like directory system mergers, mail migrations, complex infrastructure builds, etc...
The conversation always goes like this:
"How long would it take your to do it?"
"Physically? 2 weeks of button-pressing time."
"With change control and stuff?"
"6 months."
"What!? That's crazy, the customer won't accept that!"
"Well, tell them to stop adding 2 weeks of change control management paperwork for a no-risk 5 minute task in a green field environment with zero data and zero users and then we can do it in 2 weeks."
"They have processes! You know that!"
"Their processes are stupid, that's why it's going to take a chunk of a year and cost an order of magnitude more."
"Fine, we'll promise we'll do it in 4 weeks and then bill them for anything over that if we're slowed down by change control"
"So now I have to do both the change control paperwork and I'll have to track everything internally so we can charge the overheads back? It'll take one year."
"You're wrong! You'll see! It'll be 6-8 weeks at most."
... one and a half years later...
"I told you."
The customer of course signs off on the 4 week estimate, thinking they got a good deal, and the final bill is like 95% overruns and paperwork overhead, but we make a much bigger profit so we don't care. Why would we? We get paid at consulting rates to sit around and fill in boring, simple paperwork. The customer doesn't care either, because they see the costs as "unavoidable", and it's not their money. It's either the taxpayer footing the bill, or it is some huge department's budget at MegaCorp. The decision maker never gets any personal penalty for this kind of thing.
This is why 90% of larger government IT projects have cost "overruns". It's not really an overrun, it's just how these things play out.
PS: This really does happen this way. At a recent project the minimum lead time for any change of any magnitude was 2 months, which was negotiated down from a proposed 4 months. If anyone forgot a firewall rule somewhere we all had to put tools down and twiddle our thumbs while one guy on the team filled out the paperwork and jumped through the hoops to convince the powers that be that yes, server applications really do need networking.
PPS: I have seen change control stop a bad change going ahead exactly once in twenty years. Once. That's because I rejected the change, and this caused an argument and then eventually they did the change anyway and broke stuff. I'm convinced that change control is 99% pointless. The 1% benefit is dwarfed by the overheads and costs. Change my mind.
99% of the time their packaging and/or deployment systems can't track changes to the degree their change control setup claims anyway.
Thought experiment: run an "upgrade" command on your package manager. Even with a modest system, there are dozens (possibly hundreds) of "things" (executables, configurations, daemons, modules, etc.) that change. Often those things are rebuilds incorporating updates from their dependencies. So if a change management system wants to track exactly why each update happened, that appropriate stakeholders were in the loop, etc., you're actually stuck.
No [1] release system has that level of detail. You'd need a directed graph of all the reasons for all these changes top to bottom.
[1] Yes, I've seen safety critical situations before. No, the paperwork isn't at that level of detail there either. System-wide requirements (the whole system has to be fast in specific ways) don't map to particular lines of changed code like that. At some point, the paperwork gets to be gratuitous.
One important aspect of it is simply sharing that a change is going to be made. It stops a few of those 'if only you had told me first' conversations.
Is this not common?
I've struggled with this myself. I am firm on my rate, but I also haven't really considered that it might make sense to reduce it in the case that someone else is finding the clients.
The few hourly projects I agreed to when I first started were always a challenge because I had an incentive to not go full speed which then ended up killing the enjoyment of loving what I do.
I agree, you should push clients away from hourly billing, but sometimes it's not possible and it's not worth losing an opportunity over.
You can propose to "sell" a fixed number of hours every two weeks or month, then allocate those hours when you estimate, without forcing you to keep a timer open while you work.
Yes, it's a compromise, you're not selling value, but you're not exactly selling time either and you have sufficient incentive to be productive.
Please let's not pretend that there is an infinite amount of opportunities out there and it's just a matter of your grabbing the right one. You need to keep money rolling in every month and you take what's in front of you, making the best of it.
Aren't there services to help with that?
It varies from place to place, but in the NYC metro area it is common for companies to only staff up through agencies so there is no chance to go directly to companies unless you know someone inside the company already.
It will help me, so thanks in advance.
Lessons from 20+ years as a solo consultant:
- Customers rarely know what they want.
- Customers always change what they want.
- Change control in fixed bid work is vastly more important than how smart or productive you are.
- It takes an extraordinary amount of effort to find customers.
- One gets customers by searching, networking, having other good customers and mastering useful technologies.
- What matters long term is consistently making money every month.
If you truly want to be a solo consultant:
- Maintain good relationships with your customers.
- Bill hourly and get paid no later than monthly.
- Be willing to work with consulting agencies and accept their markup on your rate.
- Always be learning and using new technologies.
- Always be looking for the next opportunity.