
Ask HN: Best practices for hiring software contractors? - ajudson
I&#x27;m interested in any guide to this - what I need in the contract, how to protect myself, how to find good contractors, etc.
======
robgibbons
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.

[https://www.docracy.com/6285/independent-developer-or-
contra...](https://www.docracy.com/6285/independent-developer-or-contractor-
agreement)

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."

------
tacon
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...](https://soundcloud.com/yegor256/shift-m15-how-not-to-trust-
programmers-right)

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

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

~~~
BiteCode_dev
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.

~~~
tacon
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/](https://www.zerocracy.com/)

~~~
mikekchar
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.

~~~
bobongo
> 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.

------
avip
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.

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

~~~
BiteCode_dev
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.

------
elamje
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](https://www.towardssoftware.com)

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

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

~~~
elamje
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!

------
chiefalchemist
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 ;)

------
swatcoder
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.

------
toupeira
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-...](https://www.quora.com/Is-a-software-agency-or-an-
individual-freelancer-better-for-outsourcing-software-projects)

------
emmasz
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.

------
rails
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/](https://www.stefanschick.eu/posts/hiringsoftwarecontractors/)

------
mtlynch
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.

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

------
th0pe
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.

------
jv22222
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.

------
timwaagh
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.

------
BiteCode_dev
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.

~~~
iudqnolq
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?

~~~
BiteCode_dev
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.

~~~
iudqnolq
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.

------
zerr
You get what you pay for.

~~~
coding123
There are expensive outfits that deliver piles of shit too.

[https://www.oregonlive.com/politics/2016/09/post_183.html](https://www.oregonlive.com/politics/2016/09/post_183.html)

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

