I started out, and spent much of my career, doing contract programming. But I have been an employee at times.
Like most thing in this section, your career direction should be driven by what feels best for you. Some people are more comfortable as contractors, some as employees. I’ll tell you what I’ve experienced, but you’ll need to decide which pros and cons fit best for your personality and skills.
Before going into details about being a contractor, I want to give you my definitions of contracting and consulting.
To me, a contractor is an implementer, someone who does the work. In this case, writing code, setting up networks, creating a new UI, etc.
Sometimes, a contractor has the title Consultant. I don’t worry much about titles (I’ll get into that later) but realize there are two different types of work.
To me, a consultant is an advisor. Someone who creates a strategy, plan, or does training for the people who will be doing the implementation. Being a consultant usually requires a lot of skill and experience implementing, plus the ability to train or advise others.
It’s not likely you’ll be a consultant until you have over a decade of experience. But it is possible to be a contractor as your first job.
The biggest thing I enjoyed about contract programming was the constant learning. Programming is a great career for people who want to continually learn, and contract programming amplifies the need to learn.
As a contractor, I work on projects from a few months to two years. After finishing a project, it’s time to move to a new one. The new one will be doing something different. A different industry, team, libraries, platform, etc.
When you’re exposed to many tools and techniques, you become a better programmer. With your future projects, you’ll have a better idea of what will work and what is likely to lead to problems – because you’ve seen that somewhere else. This applies to everything from coding style to project management.
For example, I was at one company that needed to get data from two separate SQL Server databases.
The initial plan was to create an API for the second database. That would have required a good amount of effort – due to things around funding, scheduling, and project management. However, I had previously worked on a project that did this by doing a simple linked server connection.
I was not the person who created the linked server in the previous project. However, because I had seen it, I was able to use it in another project.
If you’re an employee at a company, you’ll probably work with a small number of programs. You’ll work with the same people every day. This limits the number of new things you’ll learn.
But, like almost everything, there is the opposite side to think about.
Constantly learning new things can be stressful. You get thrown into a new environment and want to deliver value as quickly as possible. But, you have much to learn. This can lead to feeling “stupid” and worrying if you’re good enough.
There’s a good chance you won’t have time to become highly skilled at something. As a contractor, you’re almost forced to become a generalist. There can be something good about being an expert in a particular tool or technique.
If you’re interested in contracting, there are two main ways of doing that: through a contracting/consulting company or independently.
If you’re starting your programming career, it will be much easier to be an employee of a consulting company. They handle all the sales, billing, collections, payroll, benefits, etc. They have a reputation that makes it easier for them to get clients – something few individuals have when they start their careers.
When you have more experience, if you enjoy contracting, and if you have the other skills required to run a business, that’s the best time to be an independent contractor.
When you’re starting out, if you want to focus on gaining broad experience quickly, consider starting out by working for a contracting company. You’ll get to sample a wide range of work environments, teams, and types of projects.
Right now, you might be thinking you want to develop mobile apps for restaurants (as an example). But, if you spend your first few years contracting on different projects, you may discover you want to do something else.
NOTE: I said, “I suggest considering starting out by working for a contracting company” above. I hope you interpret that sentence the way I meant it – as a suggestion to think about it. You know yourself better than I do. You know your tolerance for change and risk, which are not the same as mine. There is nothing wrong with starting out with a full-time job.
Return to “Life as a programmer outside Silicon Valley” index