Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Best practices for hiring software contractors?
80 points by ajudson on Dec 22, 2019 | hide | past | favorite | 42 comments
I'm interested in any guide to this - what I need in the contract, how to protect myself, how to find good contractors, etc.

Here is a stock agreement template to get you started. It has some language which attempts to provide limitation of liability, but your particular state may have specific language or case law which you'd be better speaking to a lawyer about.


As for finding good contractors, that is arguably the real challenge. You can do this yourself, or work with a recruitment agency. In either case, you tend to get what you pay for -- especially with contractors, where you are not necessarily going to be providing training, as in the case of an employee.

If you choose to forgo using a recruitment agency, there are many places you can look for developers, LinkedIn being a good place to start. You can either post a job opening there, or actively search for and contact potential candidates (this is the typical domain of a recruiter -- a dog eat dog world.)

PS. This may sound obvious, but please don't expect to treat a contractor like an employee. In general, a contractor gets to decide when, where, and how the job gets done. If you expect to micromanage your project, then you should consider hiring an employee. The exception to this would be if you contract through an agency, in which case your "contractor" is really "someone else's employee."

Yegor Bugayenko (yegor256) gives the most direct advice I've ever seen about hiring remote programmers, generally remote teams. The advice could be scaled down a bit for an individual developer. The general thrust is to keep things incremental: demand access to source at all times, one click build processes, regular independent code audits, change the team regularly so no one becomes essential to the process, demand a list of risks be updated regularly, etc., etc.

[0] https://soundcloud.com/yegor256/shift-m15-how-not-to-trust-p...

[1] https://www.slideshare.net/YegorBugayenko/how-to-avoid-outso...

[2] https://www.youtube.com/watch?v=DLk_5BmgTVk

That depends of the scale of your project though.

If you have $10k dollar, you may have to choose between the one click build process and some features or documentation.

Regular audits and updating list of risks have a cost and affect the deadline.

Change the team regularly ? Do you know the cost of introducing anyone new even to the best made project ?

What if you are an individual ? What if you are a start up ? What if you are a small company or an NGO ?

I'm not saying those are not good to have.

But I would put much more simple and basic things prior that. Nobody has unlimited time and resources.

Yegor has direct and extensive responses to each of your points, and many more. Not that he is always correct, but he never avoids the questions you raise, and is happy to engage in discussions. Since he himself ran a development shop in Ukraine for many years, he is pulling back the curtain and sharing tips to stabilize a difficult process, especially for non-technical customers. He even has his money where his mouth is, with patents and a startup implementing many of the principles he lays out in a scalable system called Zerocracy[0].

And just as a counterpoint to your $10k customer needing to choose between things, there are hundreds and hundreds of customers who lose every penny of their $10k and start over from scratch. (That is what is in the podcast episode, if you have yet to listen.) By imposing the extra process and expense at the beginning, the customer can guarantee some forward progress toward their goal instead of trusting the dev shop to deliver everything by the end in a big bang delivery.

[0] https://www.zerocracy.com/

On the "one click build process", I recall once talking with a friend of mine who worked on a fairly large Java project back when Java was first developed. There was no build system that was associated with Java and for reasons that I don't quite understand the development team were very unhappy using proven solutions like make. So they had this very fragile set of scripts for building the application. After about 2 years (!!) of development, the startup ran out of cash and they were rather desperate to ship a product. It actually worked quite well. The only problem? Nobody could build the whole thing and make a single image! The company exceeded their runway before anyone could figure out how to ship. It's stupid, but it happens. Whenever I start a project I remember this and consider that that absolute top priority of any project is to be able to ship. You should do that first. (As an aside, it's pretty weird that your first story is often to ship nothing).

I think if you have a $10K project and you know that you are going to be really, really tight on resources, you don't skimp on the build process. Rather you back up and choose tools that are proven and reliable. If you can't get your 1 click (or equivalent) build process up an running in a day for a $10K project, then you have selected tools that are much too risky. That's my 2 cents, anyway.

> don't skimp on the build process

Another advantage of a "one click" build process is that it documents, perfectly, the product. What lives where, maps to what and how, how each element is configured, etc. That "one click" is your way into the whole project.

It's very much like finding a good carpenter or plumber. You talk to prev customers. Look at recent work. Then converse with the person respectfully. Then set mutual expectations, likely formulated as no BS 1 page agreement.

Quite an open ended question. What are your objectives in business and technical terms?

Best question of the entire comment section.

I'm jealous I wrote my huge text block and didn't even realized I forgot to ask that.

I just wrote a post[0] about contracting, from the contractors perspective, and why I left my safe job for it.

IMO, developers that like a challenge and like dynamic work make good contractors. A lot of times having ambition and a passion for programming is a good sign. Many people I know do software to make a living and could care less about architectural decisions, best practices, and self-motivated skill growth.

I would be happy to help you evaluate a few contractors if you want some guidance:-)

[0] https://www.towardssoftware.com

> from ... C# to ... Clojure & React

that seems like a downgrade to me :) Do you find it easier to go self-employed with dynamic languages?

Hey! Missed this. Hmmm, to be honest, I don’t know yet. My first gig is with React and Node. I also am still working with C# too. In about 5 or 6 months I’ll have a better answer!

I'll leave the legal stuff to others. In terms of how to find good contractors the key - before you start looking - is to be clear about:

- what you want

- what you actually need

- the priorities within those lists

- what level of service / availablity

- your budget (and how realistic it is in the context of the previous points).

Most ppl new to such efforts - and even many of the experienced - have unicorn ideals in mind, and a fast food budget.

p.s. Also be ready and willing to sharpen your communications. Assuming they'll know all their is to know about your effort isn't going to get you far. Unless you're able to hire a mind reader ;)

Software or otherwise, the best way to find a good contractor is to get referrals from people who had a positive experience for similar work. That can be somewhere between hard and impossible though.

Failing that, and if you need to go out and just evaluate contractors you find through other means, the most qualified person for evaluating a contractor is another experienced contractor who is not competing for the work.

Hire somebody experienced, for a nominal but fair fee, to help you review your project plan and advise you through the sourcing process for its fulfillment. This is a different role than a recruiter, and in fact, be wary of anyone who wants to simply hand you off to someone they know without assessing other options. You want a personal advocate, not some contractor's sales agent.

Then, consider retaining them after the contract begins to double check the work as it proceeds, and to bring issues to your attention if things smell fishy.

Basically, if you are asking this question on HN and don't have access to a good referral, you're about to throw a huge bunch of money at a stranger that you don't know how to evaluate. Written guidelines won't be enough help. Because of your own inexperience, you're almost certain to either trust them too much, or distrust them too much, and either one is going to strain your project and cost you money and time.

Having an experienced advocate on your side, who has a different incentive structure than your contractor, can make all the difference. And unlike the implementing contractor that you'll eventually hire, you can successfully evaluate the advisor yourself. Their role is about communicating things to you, and advocating for you, and these are actions that you are totally qualified to judge. Plus, it's a smaller and more ad hoc role that doesn't have the sunk cost issues that you'll face with your implementation contractor. If you find that they're not doing a good job being your advisor and advocate, you can drop them without sending the project into crisis.

Besides myself, I don't know a lot of people who advertise this role directly, but I think many independent contractors would take it on if you pitched it to them. I think many working developers and development managers would too, as a side gig, although they may not know the norms and pitfalls of contracting quite as well. They'll at least be able to vet your project plan, review candidates for technical merit, and perform code reviews. Even just those tasks can make all the difference for you.

So long story short: before you hire a contractor, go poke around for a paid advisor who you think could help you hire one better. It's really worth it.

One thing you have to figure out is if you want to contract freelancers directly (or through a recruiter), or work with a software development agency who can provide you with a full team and also offer other services like project management or hosting. See e.g. https://www.quora.com/Is-a-software-agency-or-an-individual-...

Agency here with a remote team.

We get all our hires through referrals. We keep things simple, our clients are not protected in a particular way when hiring us. We use a general contract - we only had problems once, when the hiring company went bankrupt and failed to pay our last invoice.

Client relationships are stable, none turned to another software contractor for the past 8 years of existence.

The company is registered in Romania.

As I have been a contractor for a while, I wrote a blog post from my point of view. I hope it answers some of your questions. https://www.stefanschick.eu/posts/hiringsoftwarecontractors/

I've done 65 hires on Upwork and spent $20k+ on the platform, though not all were software contractors. I've had some fantastic hires from the platform, but I've also had lots of duds that wasted my time and money.

There’s one underlying maxim that governs my hiring philosophy for any skilled position:

* Talented people choose their employers selectively

Some employers force freelancers through tedious and time-consuming hoops without pay. They assume that contractors are so desperate for work that you can demand anything you want from them by dangling the mere potential for a job, but they're actually just filtering out talented candidates.

Maintain expectations that it will take you several months to save time by hiring a contractor. The more complex the work, the longer it will take before you come out ahead on your time investment. The easiest jobs I've outsourced have been for UI tasks, where it's either correct or not. Finding a general skills developer is much harder. Outsourcing requires a lot of up-front effort in the form of writing job postings, writing thorough, clear specifications for what you want, interviewing candidates, and reviewing work. Once you find someone good and find a good rhythm with them, it's a great way to save yourself time, but you're likely to find a lot of bad candidates first.

The #1 thing I look for in any candidate is communication. Miscommunications are extremely expensive. Avoid candidates who ask vague questions or need re-explanation of things you've explained clearly. The best people I've hired tend to be people who are highly specific and detailed in their communication.

Take ratings with a grain of salt. On platforms like Upwork or Fiverr, most of the people are hiring for things they don't know how to do themselves, so a terrible freelance programmer might have a 4.9 rating because their clients can't tell that they produce code that's hacky and unmaintainable. Similarly, some legitimately good freelancers have dings on their record from unreasonable clients who gave them a 1.0 rating because the freelancer refused to do extra unpaid work.

Resist the temptation to hire cheap contractors. You'll always get bids that are tantalizingly low (like $12/hr for "senior-level" Python development), but they often can't deliver what you ask for with reasonable quality. The freelancers who are good can command a good wage. With the bargain basement freelancers, you'll spend so much time managing them and fixing their work that you won't save time overall.

Finally, start small. Don't hire someone to build an entire mobile app from scratch; it's far too complicated. Start with a job that should take a few hours (and set a cap on their hours so there are no miscommunications). As you get into a groove of working well with your freelancer, gradually give them more hours and more complex tasks.

Have solid requirements, and expect them to change. Be upfront and treat the contractor like a professional when scope changes.

Get ready for the contractors as much as you can before on-boarding them. If you are hiring through a recruitment agency, put something in the contract for the right to hire to avoid headaches down the road.

Assuming you are a techie:

Find a few you like and hire each to work with you on a small task. Perhaps a screen share session.

Working with someone for a few hours will give you a lot of insight into who they are and what they can do.

make sure they are easy to get rid of (don't contract them for a fixed time period) or consider working with an established it consultancy. they will do the vetting mostly for you. it's perhaps a bit more expensive, but rates are still competitive and the one who loses most from it is the contracted consultant, as most of his pay goes to the consultancy. as for fixed fees, im not a fan as situations change so it tends to lead to conflicts.

It depends a lot of you size and your project scale. But here are a few advices.

Do not pay by day/hour if you can avoid it.

Define small deliverables then objective tests to validate them and attach fixed price to each piece.

You don't have to come up with it out of thin air, the contractor is supposed to do that with you.

You don't have to define all of them up front neither. In fact, they will probably change during the project and the contractor will adjust the price knowing better about the project after the first few deliveries.

Do not let the definition of success be blurry. But don't set everything in stone.

Do include a clause about the code license.

If you have zero IT skill, get the help of somebody who does to do so, as well as set your expectations and filter the contractors. Sometimes it's best to hire a contractor... to hire a contractor. I know, I know.

In my book, a good contractor will:

- not sell you the moon, but will tell you what's possible, what's not given your constraints, and the relative cost of it. I regularly tell my customers to chose a better, cheaper solution than hiring me.

- help you set a priority list rather than a schedule. I'm not an oracle, I can't give you an exact delivery date for each component. But I will make sure we get them in the most valuable order.

- not give you answers right away, especially deadline and price. I can take several (sometimes billable) hours up to several days with a customer to understand the project and assess this.

- will tell you honestly "I don't know", "I will have to look it up", "It's not in my skill set, I'll need the help of X". I may tell a customer I'll need a designer, and a week to research a topic before starting to code.

- communicate clearly. Bad communication is a red flag. There are very good coders that are bad at communicating. As a contractor I don't just code, I extract your needs, wants and constraints to adjust the work regularly. This is what "agile" mean. Not tooling, scrum, or other gimmick. Regular proper communication, and adjustments.

- will not talk about good and bad, but cost/benefit ratio. You can request everything you want, the question is can I build it under your conditions.

- will talk about his preferences and specializations and advocate them when relevant. But will understand if a different technology is needed for the job. I love Python, and will advise you to use it. I don't like JS. I will code in clean proper JS for a Web UI.

- will be honest about their needs: schedules, payment, communication, ethics, channels or technology use. E.G: I don't do military/banking related contracts and refuse missions that use some languages such as Lisp, Haskell or PHP. You have the right to want them, there are other contractors that will do it for you just fine.

- not be cheap. Well, just like with lottery, you may be incredibly lucky. But I would not base my life choices on such hopes. I'm often booked for months in advance and know the market prices I can expect. I won't bother negotiating.

- will be interested in your project itself. Even when I don't work on something, I'm always happy to hear about what the project became 6 months later. I like my job.

You are not committed to anything until you sign something. So go shopping. Change your mind. We are used to talk to many customers, and only land a few jobs. That's also why we are expensive: we include that in the price tag.

I'm a student trying to get my first contracting job. I have very little experience, and and essentially no past work. I believe I'm competent enough to do some of the tasks I see on sites like Upwork, but I'm not having any luck. The jobs I'm applying for are basic things like write Google Apps script to send emails based on contents of a Google Sheet, not large projects.

I'm not going to lie about who I am and what experience I have. Do you think I have no chance getting a contract at this point?

Don't start your career as a contractor. Find a job first, even part time, if you can. Few people can get away with zero structure to shape them first.

Interesting. I've got a monthlong holiday break and want to get some work experience in it. My expectation is that no one will want to go through the effort of hiring me for that. I don't need the money right now, I'm trying to create a history of having reliably done something for money that I can point to in the future.

For example, a project I bid on was offering $200 to implement an email signature with two columns and basic styling from an image spec. Since it looked trivial and interesting I spent two hours learning a DSL for emails (MJML) and making it and then submitted a bid with screenshots of it in a few email clients.

I'm not trying to get a job creating something of significant scale or significant duration right now.

Your first few projects are essentially to build credibility. Don’t try to make money. You are trying to level up. Think of it like playing an RPG. You start with easy quests designed for newbies with no experience and eventually unlock treasure.

What can you do that takes you no time and is in demand? I figured out how to something that takes 4 hours in 15 minutes and charge flat rate for it based on the original 4 hours. There is a handful of annoying errors other techs make that I instantly fix without sharing my secrets. ;)

Context: I have first refusal rights in my territory as a field tech on another site. I bill $5000+/mo in gross receivables. It didn’t happen overnight. I started by doing a few unprofitable tasks.

Got it. Most of the projects I've seen are by people who want to bill hourly. Upwork provides some sort of "recommended" wage. How much would you discount that by? I'm afraid that if I'm too cheap even people looking for minimally skilled cheap coders won't want to hire me. Also, so far I'm zero replies for two proposals (a few hundred words each, not copy-pasted). Roughly what should I expect?

Don't know, but I would just apply until someone lets me work.

Your proposals are likely too long for easy stuff. Two paragraphs should be enough.

Good to know.

Your email?


Following this advice you will work with 0 competent developers. No developer of any worth will give you turn-key offer for a non-trivial project.

> No developer of any worth will give you turn-key offer for a non-trivial project.

Yes, I'm actually saying exactly that in:

> [a good contractor will] not give you answers right away, especially deadline and price. I can take several (sometimes billable) hours up to several days with a customer to understand the project and assess this.

How do you persuade a good contractor to take the several days to assess the project if you seem like you want to avoid paying an hourly or daily rate?

I usually spend an hour or two for free with the client, unless I feel they are not serious about it. If I assess studing the project will take more time, I give them a flat rate for it. It's my job to assess how long it will take, then use my daily rate to give the total.

I always include an escape clause in the contract in case they forgot to mention something very important that change drastically the price.

I also never quote the entire project, only the first deliverables. Then roll incrementally from that.

Most contractors around me are well paid, it's not a big deal to not be accurate at the begining. We adjust on the way.

You get what you pay for.

There are expensive outfits that deliver piles of shit too.


My guess would have been accenture. Oracle's practices arent far off.

Well, you don’t get what you don’t pay for, in any case.

At any rate don't pay for what you didn't get.

hear, hear

Applications are open for YC Summer 2023

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact