Why New Developers Should Consider Contracting
Filed Under Efficiency Tips, Human Factors
A lot of young and talented developers are continually looking for new projects and problems to solve and gain experience with; however, there are very few single environments that provide the ability to diversify and grow. Most jobs consist of working on legacy code where there is very little architectural “wiggle room”. As a result, many developers feel the need to move to a different job or environment to get to the next level of learning.
While job hopping is one way to gain diversified experience, may I offer an alternative – contract work.
In hindsight, one of the fastest ways I matured as a software developer was through the experiences I had while working with a consulting company. Why is this? A few reasons:
Many New Projects (And A Few Old Ones)
Opportunity for a diversified workload is probably the biggest reason contract work is a great environment for learning. The opportunities for new projects and clients come fast and furious. In fact, in my experience I rarely was on a single project for more than 6 months (and even then, I was working on different client projects on the side).
The ability to start with a clean slate every 2-3 months is priceless. I always joke that the only code I am proud of I wrote less than 6 months ago. It’s for this exact reason, I got in the habit that I got to learn from every project mistake and continually get better.
Old projects exist as well (and this is OK) as it allows for developers to also learn how to maintain legacy systems. Brainstorming how to introduce unit tests into a Lotus Notes application can be a very daunting (but rewarding) task. Not every project gets a clean slate at the end, which is a great equalizer in terms of learning to write maintainable code.
Different Problem Domains
With different projects comes different problem domains. It is insanely fun to be building a restaurant’s blog, then to go to a meeting about blood pressure machines, and finish the day off with learning about retirement funds. Don’t get me wrong – it can be exhausting…but it is enlightening.
Probably one of the coolest domains I ever worked in was I had the opportunity to write an application that physically moved a HUGE dirt shovel for a coal mining facility. What an awesome domain! Physically coding with a hard hat on, in the middle of a strip mine, and my code is moving a 2000 ton machine around – can I get a hell ya?!? These opportunities do not present themselves often if you work for a company solely focused on one business domain.
Architectural Responsibilities
In most consulting shops, you are the lead developer, architect, and tester. Although being your own tester sucks, the trade off of being your architect provides unbelievable experience opportunities to implement the patterns and architectures you see fit.
Probably the hardest thing to gain is wisdom and insight of architecture. When to use them, when not to use them, when to use them but then break them. Different projects, different domains, and the responsibility to pull it all together provides the opportunity to gain this experience quicker than most job environments.
Learning To Deal With People
With consulting comes dealing with clients. Thankfully, I never had to deal with any assholes, but communicating with people is a skill that takes a lifetime to learn. If you do not learn how to talk to clients, you probably also don’t know how to talk to your boss, manager, or even spouse. Consulting forces you out of your dark corner, even if it is just in small doses.
Being a consultant is what you make of it. If you decide to be a hermit that never talks to clients and always decide to solve different problems with the same solution, you probably will not learn a lot. If you decide to sharpen your skills as a communicator while experimenting with different technologies, patterns, and architectures consulting might just be a good fit….
17 Responses to “Why New Developers Should Consider Contracting”
While it is good experience to work doing contracts I would be wary of doing this right out of school. After leaving school there are lots of things to learn from others (well there always is, not just after leaving school). The best thing would be to find a shop that does consulting work and hopefully get mentored by some of the other people that work there (not always an easy task).
Good point – just because you may work autonomously does not mean you shouldn’t learn from others.
In a consulting company one thing that really helps to eliminate knowledge silos (even on one man shows) is to hold larger team/company code inspections. This allows more senior people to see your code and teach, while holding you to some level of accountability.
[…] Why New Developers Should Consider Contracting (Max Pool) […]
I find that I got most of that kind of experience working for the state my first two years. I had 27+ applications that I supported by the time I left and only 5ish were legacy ones that I inherited.
By far the most valuable bit was getting to maintain legacy stuff that was written by someone else, maintain (and even partially rewrite one) code that I had written, and writing new applications every few months.
That and the training budget was awesome.
Of course the money wasn’t that great, but viewed as an experience builder it was good enough!
Wow, I was going to write a blog post saying almost the same thing 🙂
Agree that dealing with people is an incredibly important skill. Hand in hand with that is dealing with *business*. Being responsible for accounts, taxes and chasing invoices really gives you a different outlook on things. Also, I tend to think of the most “profitable” solutions, which tend to be simpler and leverage other peoples work more.
Clean slates are an amazing thing. I’m a songwriter, and one of the best techniques for improving you skills is to try and write 10-20 songs in a day. Achieving higher “throughput” hones a completely different set of skills as you focus on a different set of problems.
The same applies to software projects I think. Clean slates every 3-6 months allows you to frictionlessly rethink your solution structures, layering, choice of libraries and frameworks etc.
As you say, consulting is probably better than freelancing/contracting. The best way to learn is from people more advanced than yourself. So if you do consider contract work early in your career, then it’s best to make sure you’re getting plently of exposure to other people.
IMHO, dealing with legacy is only valuable once you’ve learnt the necessity for maintainable code. I’ve often worked with legacy code and not improved it, a bad idea.
In my experience, learning to really maintain legacy code has only come from learning from my own mistakes.
I’m still maintaining code I wrote 5 years ago, and I wish I had paid known more about the value of maintainability back then. I’d have fixed every broken windows within a mile.
Again, great discussion.
There are some definite downsides too. Most of the people I’ve interviewed that have a long consulting background are not good developers.
You have some good points, and each point has some valuable skills you can learn but you have to _want_ to learn them. A lot of consulting shops are more worried about getting the job and billing hours and they don’t have the customer’s best interest at heart.
“Ability to start with a clean slate every 2-3 months” also has it’s dark side. You never get involved enough to solve some of the real problems and you don’t stick around long enough to see the impact that your code.
Consulting also teaches you to have a “Get ‘Er Done” attitude. Keep the customer happy, show results: Get ‘Er Done”. An overwhelming majority of the time it solves the immediate symptoms, but ignores or exacerbates the actual problem. Focusing on writing clean code for ease of change, extensibility, and maintenance is very important and is difficult to learn (and easy to ignore) when you never stick around more than a few months.
Good points Todd, but I feel you are demonizing the entire consulting community, not every consulting company is full of snake oil. However, I too have seen a couple of those [and you are right] they would promote those bad habits if you ran with the wrong crowd.
I like the thinks you’ve highlighted in the article, but I don’t see myself being able to pull off a 8h work day + side jobs + family :P.
Anyways I’m still a student and doing a 4h + school work.. so that keeps me pretty busy ;).
Plus the school work is sufficiently diversified.
I’ll keep this option in mind though, since I’m the type that likes to be challenged now and then 😀
[…] Max Pool explains Why New Developers Should Consider Contracting. […]
[…] types of freelancing (writing, web development). They all have their downsides and benefits, especially contracting. In the end, you have to decide what’s more important to you: job variety and schedule […]
[…] to work from home, freelancing is generally a great way to start off. If you have some experience, contracting should be a consideration. The latter tends to require onsite work and does usually mean you need to develop your […]
Great points, definitely top on my list would be:
1) not locked in to a company and their technologies
2) you learn a lot from a variety of people you meet along the way
3) money is better, you just need to get yourself out of the mind set that “what if I can’t find a contract”? If you are good, you’re needed somewhere!
Very interesting advice!
As a software development manager for a fortune 500 company, I would like to add the following observations. Developers who start out consulting, right out of school pick up some bad habits. The nature of consulting, is like a gun for hire. Go in, solve an immediate problem, and get out, without worrying about the long term effects of the bandaid you just created. We’ve hired several emplyoees who were former consultants, and they all had exactly the same traits. They write code, thinking only in the short term, much of which is difficult, if not impossible to maintain later. In the corporate enviroment, they are slowing learning that it is better to write good code up front, mostly because they now have to deal with fixing it or enhancing their own code later, which they never had to do as consultants. Its a hard lesson to learn, but a very important one. Even as a consultant, you are likely going to have to work on someone else’s code at some point, so do yourself a favor and those that come after you and learn to develop with the future in mind, instead of just the present.
@Jeff –
Very good point, in fact, I have had a post in the making (for about a year now) called “Consultants Don’t Care About Your Product (And Never Will)”.
My only argument is that then they were bad contractors for not taking those thoughts into consideration…but I have seen the exact same thing you are speaking of…
[…] Via:Code Squeeze 编译:伯乐在线 敏捷翻译组 – [B][B]祝佳[/B][/B] 校稿:@关关-伯乐在线 […]