Why New Developers Should Consider ContractingFiled 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.
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….