Friday, September 24, 2010

How to Be a Contract Programmer

Technically, I'm really not a
contract programmer. I'm more
a web developer than anything
else.

However, I've chosen the term
contract programmer for
its generality. In fact, a contract
programmer will usually be a developer
of some kind. For example, a Perl
developer or a C/C++ Developer or
a Java Developer.

By contract programmer, I mean anyone
who writes code or updates code based
on a contractural agreement. I've done
this many many times for many years.

Disclaimers aside, I just got an email
from someone who would like to do what
I do. He wanted to know how much money
I make.

The answer is very little. I've never
been wildly successful. One of the reasons
for starting this blog was to answer my own
question, How to be a contract programmer.

Here are some of the things I've found to be
true:

I have found it much easier to make money
as an employee than on my own.  Since I
repair websites and website repair is so
general, I tend to get a lot of small jobs
coming in.

I used to teach programming languages at a
college.  That was a far better source of
income than what I do now. Fixing websites
has been hard for me financially but has
been an adventure otherwise.

One problem I run into as a sole proprietor
is that I've never successfully specialized
to the degree that I need to.  It's hard
to make money if you are always learning
something new.

Of course, you need to go into the art of
study and learn something new at one time
or another. Yet, learning new things
cannot dominate your time.

Where possible, strike the right balance
between learning new things and working
on things that are old and familiar. You'll
make most of your money doing things you've
done many times before.

I've been at this eight years. Here's what
I would do if I were starting out today:

I would look for parallel economic opportunities
that feed each other. In other words, any work
you do on websites on an independent basis will
help you get a job. The vice versa is also true.  
You can use job experience to help you get work
as an independent contractor.

Develop a business model where, somehow, one
thing feeds another.  In other words, look for
natural synergies.  As a human being, you only
have so much time and energy.

This guy has the right idea:

So You Want to Be a Consultant

I would say stay light-footed and go with any
opportunities that come up.  Be careful of one
thing, though.  Any job that is poorly defined
is no job at all.

By this I mean, don't work for anyone on an
independent basis unless there is a clear
agreement as to what is to be done and how
you are to be paid.  When you start working
with people, you'll be amazed at how vague
people can be.

People often ask me to bid on a website
fix prior to telling me the address of
the website or what the problems are.
I've often been asked via email, Can
you fix my website and how much will
it cost?
Imagine! Wanting me to
bid on an existing website I've not yet
seen.

Keep asking questions until all your
questions are answered. Don't cave.  
Don't ever let someone bully you into
not asking questions. It's easy to be
misled into feeling stupid for asking
questions. Ask all the questions you want.

Good questions are often simple questions.
For example, Why do you want this?
is an excellent question. If you know why
someone wants something, you are well
positioned to offer a better solution if
it is available.

Also, never start work unless the job
is defined and the customer has given
you everything you need.  Never.  If
someone cannot clearly tell you what
they want, move on.  Why?  Because if
they don't know what they want, they
will be unhappy with what they get.  
People who don't know what they want
are unhappy people.

When people are unhappy with what
they get, they don't want to pay
for it.

Many of these problems can be solved
by understanding the software development
cycle. Here's an article:

Software Development Process

For small jobs, I might simplify this
process to these steps:

  1. Find out what the customer wants.
    This is harder than it sounds. Often
    this is the most time-consuming step.
  2. Find out what the customer needs.
    Often this is not what they want.
  3. Find a balance between what they
    want and what they need. You can't
    always give people what they want and
    they don't always want to hear about
    what they need.
  4. Make sure that what you will be
    doing will be of some use to the
    customer. It is very hard to work
    on poorly defined projects that have
    unrealistic goals and that will ultimately
    benefit no one.
  5. Don't ever do something stupid for
    someone, no matter how badly they say
    they want it. It's OK to do marginal
    things. However, if something crosses
    the line into total stupidity, thank them
    for considering you and suggest that
    there's someone else out there who could
    do the job better than you could.
  6. Don't take on projects that are bigger
    than you are. Never offer to recreate
    Ebay, Facebook, or the
    Monster Job Board. You'd be amazed
    at how many people want things like this.
  7. Scale is important! Pay attention to
    scale. If a project is going to take you
    an entire year, get hired as an employee.
    Or get paid every 2 weeks. Do something
    to protect yourself against projects that
    are risky because they are too big for you.
    Strongly consider walking away from the
    opportunity if you can't figure out a way
    to manage the risk.
  8. For mid-size projects, break the project
    up into deliverables. In other words, have
    something you can show the customer as soon
    as possible and as often as possible.
  9. For mid-sized projects, negotiate to be
    paid a certain amount for each deliverable.
    If you can't do this then work by the hour.
    If you can't get hourly, then don't work
    for this customer. Be firm!

If I were to simplify these steps further,
I would say be sure you are on the same page
as your customer. It is so easy for a project
to get off track.

The instant you sense that your understanding
of the project is slightly different than the
customers, get on the phone and work it out,
no matter how small the issue. Most of your
work is not technical work, it is finding out
what the customer truly wants and needs.

I've talked to many many people who were unhappy
with their previous web developer or web designer.
In most cases it was because what they thought
they were going to get and what they actually got
were so very different.

Most unhappiness is caused by people being out
of touch with reality. When everyone can agree
what reality is, you likely have a happy situation.

I'll take this a step further. Most people who
are out of touch with reality do not know how to
get along with other people. There's a human
side to all of this.

Believe it or not, most successful business
relationships are, in a general sense, love
relationships. Not in the romantic sense
but in the human sense.

If your customer is happy to get on the phone
and talk to you at any time and you are the
same way with the customer, you have a business
relationship that is a platonic love relationship.

Not that you have to be crazy about each other.
However, you do need to care about each other
enough to be willing to talk about things that
come up.

When people don't care about each other, and are
unwilling to communicate with each other, is when
you have problems. At the root of every successful
relationship of every kind is at least a little bit
of brotherly and sisterly love.

That's the best thing you can do for your business.
Love what you do and love the people you work for.


Ed Abbott

No comments:

Post a Comment