views:

1054

answers:

13

I'm a college student who's had several internships and consider myself a decent programmer. I have a friend who does consulting work and who wants me to help him with one of his projects. Since I've never done any contract work before, what are things I should be aware of and watch out for?

+21  A: 

Invaluable advice: learn to say NO.

Many times you'll find yourself in a position in which a customer asks for some extra features or many projects to quote at once. A good book I'd recommend is The power of a positive No.

You must learn to say NO when appropriate: if you can't take more jobs because the day's just 24 hrs long, then decline them or clearly specify you could do them starting in, say, 1-2 months time; if some client insists in you doing something out of scope, say NO (unless it's a very important client and you see further opportunities through him, of course).

Consider what you'd gain and what you'd lose by accepting and rejecting jobs, clients, etc. That way you'll see clearly what to do each time.

Finally, charge what you should, no more no less, and for every single piece of work. If you're a good programmer and are good at understanding clients' needs, they will value that more than the money they pay.

Seb
I wish I could upvote this more than once. I'm terrible at saying no, so I'm constantly doing way more work than I'm getting paid for.
mabwi
+1  A: 

I would never in my opinion try to do work for money with a friend because when money is involved you must treat them as a regular customer. Money can make your friend treat you as a real product price instead of a friend when things don't work as expected. So they would expect for you give them as much time as you would a usual customer.

TStamper
Wrong use or "contract" here. Jared is asking about "programming on a contract"...
dmckee
Nice recovery, BTW.
dmckee
+18  A: 

Do you really trust your friend? Because as soon as money gets involved friendship usually is a burden more than a blessing. Make sure that you do have a written contract which explicitly states that your friend can not sue you over the software you are going to write for/with him.

Of course the same is necessary for the actual party that will buy the software. You should make it absolutely clear that you are not backed by a company and that you therefore have to insist on a clause that prevents suing.

Tobias Hertkorn
He's not a close friend so I'm not worried about ruining a friendship. If it were a best friend I probably wouldn't work with them.
Jared
So true, and it goes beyond just trust. Your friend can act in good faith, but can still make a blunder that lands you in trouble. Relative responsibilities need to be understood, well defined, clearly documented, and signed off. This is a major difference between contract work and moonlighting.
Shane MacLaughlin
+1 for the contract. Having a contract is absolutely necessary and it also frees you up to concentrate on the work because everyone's responsibilities are already defined.
VirtuosiMedia
+3  A: 

Depends where you're working from. Here in Ireland, and in most of Europe, you're better setting up a limited company and contracting yourself from that. Basically the issue here is that if something goes wrong, the company (with it's limited liability) can get sued, but not you personally. 'course given that you are a decent programmer, it's never going to happen ;) Still, one to consider.

It's about 20 years since I've done any contracting myself, but the one thing I used to come unstuck on in the early days is pricing. Programmers often think of projects in terms of how long they take to code; you actually need to think in terms of how long you take to code, test, adequately document, install and train. You also need to price up the inevitable ongoing support.

Lastly, signed license agreements between you and your client, that limit you or your companies total liability to the amount of money paid out to you, i.e. no consequential loss. Similarly, bugs are limited to failures in explicitly defined test cases, not vaguely understood / ambiguous requirements.

Best of luck in your endeavours!

Shane MacLaughlin
No no, pricing should be based on value, not cost.
Stephan Eggermont
Buys *choose* on the basis of (percieved) value. Sellers should price based on what the market will bear, but must understand their costs to know when they can't afford to sell.
dmckee
@Stephan Eggermont, for most experienced buyers pricing will normally fall somewhere between value and cost. If you have no competition, it will tend towards value, if you do it will tend towards cost. If you don't understand your own costs you are in trouble.
Shane MacLaughlin
@Stephen Eggermont - also, in these recessionary times, most people face some competition and few have unique abilities. I should know, I regularly hire contractors, and their prices are falling (though perhaps the value of their work is too).
Shane MacLaughlin
A: 

I bought this book - http://www.amazon.com/How-Succeed-as-Independent-Consultant/dp/0471469106 - How to Succeed as an Independent Consultant

there is a huge list of things to consider and strategies to employ. worth it, plus you can write it off ;)

BPAndrew
A: 

I wouldn't do business with friends. If you want to be a consultant - go with government or big corporate to start to get the ropes. Either that or use something that has a escrow/arbitration system like rentacoder.com

BPAndrew
A: 

From a recent post from Scott Berkun,regarding "Should I quit my job now?" It contains some good inputs on consultation.

Start looking for clients. Ask around. Of your network, who are the five people most likely to need your services. Talk to them. Ask them if you were a freelancer if they’d be interested. Talk to other freelancers in your field - buy them lunch and ask for advice. Do they like being on their own? Why? Why not? Before making the leap become a student of freelancers in your field and sort out if your fantasies about it approximate the reality. Start working your network and building it now. Start a blog about your expertise: it creates a home for your knowledge and if you go on your own, your business.

Get your first client fast: work for free . A good referral is worth much more than payment for a new independent. Be willing to work for free, on the basis it’s a limited time only arrangement, in exchange for a good referral or use of a client’s network. If you can’t find someone willing to let you work for free, be worried. You can do this on weekends or when off from your current job. Get projects under your belt now, while you have almost no risk. If after two weekend projects you hate it, you’ve learned, before quitting, freelancing isn’t for you.

Value life experience. When I quit it helped me to accept that even if I fail I’d have learned a great deal about myself, my industry and life in general. I was convinced there were lessons I’d learn I couldn’t buy any other way, and I got strength from this (It turned out I was right, but I didn’t know this when I quit). I was convinced on a personal level I could not lose, and if I planned #1 and #2 the financial risks were small. Worst case I’d take those experiences and return to the kind of career I’d had before.

He also suggests to read Million Dollar Consulting: The Professional's Guide to Growing a Practice (Paperback)

Sarath
A: 

A simple tip, but no matter who you are working with, get a written agreement stating what you will do and how long you expect it to take and make sure both parties have signed it. Doesn't have to be complicated or legalese, but you need to have it absolutely clear what you will do and what the success criteria will be by which your work will be evaluated and you will get paid. That way everyone knows where they stand.

glenatron
+17  A: 

Whoo boy. Down this road lurks madness.

The most important piece of advice given your situation: define everything in writing. The most important information you need is as follows:

  • How much are you being paid and by what metric? If it's hourly you still need to know when you get your actual check. Is it after the project launches? What happens if the project fails? Do you still get paid?

  • Are they handling the payment of your taxes or are you? (The answer is almost always that you are.)

  • Is there a maximum amount of billable hours you can rack up? What happens if you reach it and aren't done?

  • What equipment will you be coding with? If they aren't providing computers then run. You should not be using a personal computer for professional development; it creates all kinds of ownership muddiness for the other code you write on your own time.

  • What software will you need? Don't use personal copies of software to do professional work. Especially not if it's your cracked version of visual studio or whatever.

  • Who will provide graphics, layouts, etc? Are you expected to create graphics and layouts? If so, with which software? Be careful of systems that include google-image-searched widgets, etc. You could end up co-liable for infringing software.

  • How will support for the product be handled? Are you required to provide knowledge and training? How will you be paid for said knowledge and training?

  • What are your liabilities? If something goes wrong with the code or it turns out to have a bug 3 months down the road, are you required to fix it? What are the support parameters? You don't want to end up getting sued by a company in 6 months. Make sure your friend is liable.

  • You need a clean design spec for the code you're writing. It's not enough to know what it's supposed to do. I repeat, "I want a shopping cart to sell my shoes online" is not a design specification. You need a solid feature set explained in detail. You need your part of the work clearly delineated, and you need solid documentation of any greater frameworks, etc. that your code has to work with.

And this is just a start. Welcome to the world of contracting! This is what it's like when you aren't work-for-hire under a corporation's legal umbrella! :-D

Jason L
Good information... "favorite answer" if I could give it. :-)
Andrew Flanagan
The contract should specify who owns what, what rights everybody has to the software, and when any transfer takes place. (That takes care of the issue of personal software.) I've seen several questions about that here on SO.
David Thornley
A: 

My advice would be do the work, try and get paid as you go along - such as fortnightly so you don't get left hanging - and don't get too wrapped up in do's and dont's for your initial forays into the paid programming World. Contract programming isn't that different to any other job really.

Apart from that some other advice would be if the job is interesting to you be flexible around the price. If it's not interesting to you (and you're not desperate for the cash) bump up the price. The highest paid contracting job I have ever had was hacking javascript to work between Netscape and IE. I only lasted 4 months after which I'd made enough for a 3 month holiday but in a way I actually resent having wasted 4 months of my life dealing with such a mind numbing task!

sipwiz
A: 

I have had many "friends" ask for help on a project, ask to hire me as a consultant, and offer the sky with their "awesome" idea that they have no idea how to implement, what it will cost, and how they expect to pay me for my services.

These days when a friend approaches me with a great idea for a development project, I run. It is usually a "I will give you a piece of the profits/go into business with me" deal where I do all of the work and get very little if anything in the end.

I would question what your friend's role in the project will be, how you will be paid, when you will be paid, when the project ends, and don't write a single line of code until you have requirements on paper, as well as a contract you can live with.

Just my opinion...

A: 

Also consider the option of not working hourly. Some people consider this blasphemy, but if you can define the project well enough in the beginning, you can set a fixed price. As in "I will build a ruby program that does X Y and Z and you will pay me $800." I find that working hourly (and tracking time, and all that) adds more stress than it is worth to the job.

YMMV, obviously not every project has good definable goals. (Of course if your project doesn't have good definable goals you may be screwed anyway... :) I have had many fine projects working with friends (and even family!) so don't let that aspect of it scare you too much.

Eileen
A: 

It depends on what type of contract job you're friend wants help with.

Hopefully, it's a lucrative gig he has with an established company which is paying him for his services. In this case he can plug you in, pay you an hourly rate, and all is well in the world.

If the work is direct for your friend on his project, then I'd be careful not to jeapordize your friendship with a paying project etc. If your friend is contracted with a small company or there are any financial issues at that level, I'd also try to be a little bit careful about payment issues etc.

In general, have fun, learn from it, try to figure out if it is a flakey situation or there is a steady payment stream for the services being rendered.

In about 12 years time, I've very rarely had payment problems, the one time was doing work direct for a friend, and the schedule went over...so, it's probably easier to work by the hour than to try to estimate time/cost , especially as a beginner.

alchemical