I've worked
in IT as a programmer for a while now and have spent quite a bit of time
working as an employee, consultant, and contractor. I thought it would be fun
to talk about the differences between them in case anyone out there is
considering a change from one to the next.
A couple
things to note before I get started:
- I've been working primarily as a computer programmer for about eight years now, but for about six of those years I've been trying to be about more than just writing code. I really think of myself as a problem solver who happens to write code, but I live in a world where businesses expect their programmers to have the attitude of "tell me what to build and I'll build it". As a result, until recently I never really felt like I fit into most of my positions, which may have altered my perceptions a bit.
- With a few notable exceptions, most of my employers and clients were small companies. The smallest was a music store that had 5 full-time employees after a couple of rounds of layoffs and people quitting, and the largest was (and is) a software company around 130. While I did have one contract and a couple of clients at large multi-national firms, my focus in this post is on my experiences with small companies.
- All of my contracts were as a W2 employee and I worked through a placement firm - none as a 1099. I had set up a business so I could have done a 1099, but due to circumstances I don't need to get into here I ended up either working as a W2 employee or going on full-time at all of the companies I wanted to contract with. That also means that I didn't have to worry about doing the self-employment paperwork that 1099 contractors have to do.
Life as a
contractor
How do I
define "contractor"? In my case, I was paid by the hour by a placement
firm that took care of employment paperwork for me, but I essentially worked
for a company. I had a typical interview process, I was onsite at the company
all the time, and I had little-to-no interaction with any other contractors
with the placement firm. All of my contracts had a fixed length, but all of my
contracts could have continued longer if I wished. As I mentioned above, since
I worked as a short-term employee through the placement firm rather than being self-employed,
I didn't have to pay self-employment taxes or file tax paperwork.
My day-to-day
life as a contractor was fairly easy - people generally expected me to do what
I could while I was there and no more. Some of the contracting companies
allowed me to work overtime when I wanted, but none of them forced me to since
they all had salaried full-time employees they could lean on for that. (Sad,
but true....) When I did work overtime, I didn't mind nearly as much as I did
working as a consultant or employee, since I got paid extra for the extra work.
(It's only fair, right?) I also found that as a contractor, I didn't get as
stressed about my environment as I might have as a full-time employee, since I
knew that my contract would end at some point and I could choose not to renew
if necessary. Finally, working at jobs on a short-term basis really allowed me
to see a wide variety of companies and approaches and to meet a lot of people,
and these have helped shape my opinions about what works and what doesn't. And
as a short-term contractor, more employees opened up to me in ways that they
might not have if I were going to be there long-term, giving me even more
insight into how the company was and wasn't working well.
On the other
hand, as a contractor, since I typically wasn't invited to company meetings, I
often found myself out of the loop when it came to process or personnel
changes, even when they affected me. I often had to ask the full-timers to fill
me in on what happened when I started noticing changes in my surroundings.
Since I was clearly a temporary employee, I often got put on the more difficult
and/or unpleasant assignments, and rarely was given the responsibility to
complete them on my own. Career development was also completely on my own; I
had to spend my own time learning new technologies and tools, and I had to
create my own leadership opportunities. Perhaps the most frustrating part for
me was that I hate looking for jobs, but being a contractor meant that I
basically always had to have an eye on the job market.
Overall, I'd
say that the contracting life is great if you're not sure where you want to go
and just want to try out a few different experiences. It's also pretty good if
you want to have a lot of control over which types of opportunities that you
work on. It's a lot of work, though, even if you go the W2 route and skip the
self-employment paperwork.
Life as a
consultant
When I say
"consultant", I mean that I worked for a single company, but that
company would assign me to various projects for third parties. As a consultant,
I didn't have to go through an interview process for a new project, but I also
had less control about which projects I could take. While some consulting firms
encouraged their employees to work on the client sites, I typically spent most
of my time at my employer and called my clients (sometimes daily) when I had
questions.
My
day-to-day life as a consultant varied greatly depending on the project I was
on. One month I'd be on a project where the clients were fairly tech-savvy and
all I would do was implement their designs, the next I'd be on a project for a
non-tech-savvy client and I would be leading a lot of meetings, and the next
I'd be teaching a client about a technology with which they weren't familiar.
Sometimes I'd be put on a project where everything was set up well and
basically I wouldn't have to screw up, others I had to put in super-human
effort and the project still failed because of decisions made long before I got
involved. Either way, most of the time I knew I'd only be on a project for a
short period of time.
Most of the
time, though, as a consultant you are surrounded by people who really know what
they are doing. They eat and breathe technology, so I rarely ran into a problem
where one of my peers didn't have an answer. (Unless it was a problem for which
I was the resident expert, in which case I was out of luck.) In such an
environment, nearly everyone had energy to tackle new problems, and it was very
hard for your skills to atrophy.
The hardest
part for me being a consultant is that I had an incredibly hard time moving
beyond pure code-writing, MBA or no MBA. As anyone who reads my blog knows, I
think that chasing technology is a losing proposition (both from an individual
standpoint and the standpoint of the business that cares about profitability)
and we as technologists need to become experts in business areas as much as
technology stacks. In other words, I didn't really have an opportunity to learn
the skills and gain the experience necessary to become a leader of providing
true value to clients until I left consulting to get experience as an employee.
The other difficult thing is that you're forced to be on the cutting-edge of
technologies, and for the most part you have to spend your free time to do it.
If you're
straight out of school, consulting is a great experience because you're
surrounded by knowledgeable people, and you can get a wide variety of
experiences in a relatively short amount of time. Or if you were a
stereotypical "tell me what to build and I'll build it" developer and
you really loved working with the latest and greatest, consulting would be a
little slice of heaven for you. Don't expect to get a lot of quality leadership
and management experience, though, and when you do you'll need to learn mostly
by trial and error. If you do like working with end users and problem solving,
you may need to get some experience elsewhere and go into consulting as a
pre-sales engineer or target a firm that really focuses on problem solving, not
technology implementation. (If you find such a company, please let me know.)
Life as an employee
When I talk
about being an employee, I'm referring to experiences where I was essentially a
staff member hired to support internal personnel. I am currently working for a
company that employs programmers to work on a software product, but my job is
to support the internal software needed so that they (and others) can do their
job. As an employee, the company that sees the most benefit from my effort is
also the one that signs my paychecks, which is not the case as a contractor or
consultant.
More than
either contracting or consulting, the quality of life as an employee varies
greatly with the environment you are in. Contractors can take solace in a bad
job by saying it's only temporary. Consultants can bury themselves in a
project, or patiently wait for the next project. For better or worse, employees
are stuck in their current situations for the foreseeable future. (Remember,
I've worked primarily for small companies. I would guess that large
multi-nationals would have more opportunities to move around within the
company.) That means that it's incredibly important to ensure that you get into
the right position in the first place. What makes it tough to decide whether a
position is right for someone is that we all have different needs and wants. To
say that "I liked this place because it was a good place to work" is
pretty useless. To prove this point, recently I changed contracting jobs and
found someone moving from my new firm to my old one. We each were much happier,
and our personalities much better suited, to our new jobs.
The thing
that I like most about being an employee is that I have an opportunity to
really dig down into the cause of an issue and am able to be an active part of
creating a long-term solution. I really get to use my leadership skills to do
more than merely shape the technological underpinnings for a piece of software.
As a result, I get to work together with a wide variety of people to solve a
wide variety of problems, but since they're all for one company, I get to see
how all of the problems are interconnected. As a bonus, my employers past and
present were willing to help develop skills, both related to technology and
not.
Perhaps the
hardest part about being an employee is that people don't respect my time as
much. When I was a contractor or consultant, people knew I was being paid by
the hour, so they looked to minimize the amount of time I spent in meetings or
performing activities they could do, like configuring software. As an employee,
I get dragged into a lot of meetings and projects that aren't necessarily the
best use of my time.
So which
situation is best?
If you're
just starting out in IT, I'd recommend going into consulting for a few years.
You get to see a wide range of projects, work with a number of different technologies,
for a variety of company types. This experience allows you to hone in on what
works for you.
If you're
experienced, your mileage will vary depending on your goals. If all you want to
do is play with cool technologies, it's tough to beat the environment that a
good consulting firm is able to provide. If you're looking for a lot of
flexibility and aren't looking for career growth, contracting may be the way to
go. If you're looking for stability, or if you're looking to develop your
leadership skills, looking for full-time employment is probably your best
option. As for me, I'm happy in my current situation as an employee, because
the particular role fits me. If I do start looking again, I'll probably look
for all three types of roles and focus on finding the best situation for my
unique focus within IT.