I worked with a class of graduating seniors in the CIS program at Boise State University this last semester and really enjoyed the experience. The students were working on real projects with actual clients applying the skills they received throughout their program. I learned some things from the students and it was interesting to see them learn about the aspects of real life we face in developing solutions for clients. My favorite quote of the whole semester was, "I don’t think the client even knows what they want. I don’t get it. Why are we even here?" Awesome, no? Doesn’t that just sum it all up? The beautiful thing about this is how the students were surprised when this happened. But I digress…
As we were wrapping up the last night I received what seemed like an innocent enough question from one of the students. "What kind of job do you think I should look for?"
It really caught me off guard, although I should have seen it coming. I didn’t have a good answer on the tip of my tongue, and that may be because there isn’t one. The CIS program is not designed specifically to churn out developers, but introduces students to all sorts of disciplines so they can pick a specialty later. For example thy study project management, requirements analysis, some programming, some networking, you get the idea. So the question really was bigger than it seemed.
Let’s assume for this post that the person in question wanted to be a developer. Even if the person is looking to become a developer, the question what kind of employer to seek out isn’t an easy one.
My father has worked 45 years as a mechanic for 2 employers. He is happy doing that. Many people, in fact most, are content with an occupation just like that. There is nothing in the world wrong with this; the world turns, people still live and love, people die, babies are born, all without making a life out of their career. Other people don’t see things that way. They are passionate about their work and want to contribute to a higher vision of their chosen profession. I would guess if you are reading this, you see yourself in a similar light.
Someone develops code for the state government agencies. In fact, I have met many competent people who do exactly that. Are those developers missing out on something? Probably not in their mind, or they wouldn’t be there. The point is simply that for some people a job is a job and there is no dishonor there.
This means my answer can’t be glib, it must be realistic. You can’t just say, "Go somewhere Agile," or, "Find a place where you can write Ruby." This is real life and sometimes grown ups balance security and risk and boredom and excitement because they have kids at home, or need special medical accommodation, or any one of a host of other considerations.
All that said, if you are passionate about the craft, if you want to drink in the industry, if you do want to learn as much as you can as soon as you can, I say this: Go work for a company with fewer than 50 employees building web solutions.
Locus of Control
As a company grows larger, the locus of control individuals have inside the organization grows smaller. This is easy to see.
In smaller organizations, people tend to be jacks of all trades. If a server goes down, you care. If a defect is found, you care. If there is a client in the picture, you tend to actually know them. In short, small organizations provide first hand experience with many aspects of developing and delivering products.
In larger companies and teams, people tend to be expected to focus on a small niche of expertise. I cannot begin to tell you the number of resumes I have seen from people who spent years poking at HP’s test harness suite or Micron’s order entry system. This kind of "specialization" is not usually a recipe for career growth.
Technology Exposure
You’ll get to go deep on technology because you are part of a small group that simply must make it work. There is no passing the buck, because there is no one to pass it to. You’ll get to know whatever the technology stack is inside and out.
I recommend web development for a simple reason, the web isn’t going away! Additionally, the technology involved in delivering to the web is growing at an astounding pace. I don’t know what the web will evolve to in years to come, but it will be on hulluva ride.
Comradery and Mentorship
In a small organization, it is easier to foster a genuine sense that we are all in this together. The esprit de’ corp in a smaller organization is typically tighter than in large organizations. This means you stand a better chance of falling in with someone who can actually mentor your career and take a genuine interest in your development.
Of course this exists in larger companies and is lacking in many smaller ones. I do think it is more generally found in smaller organizations, though.
Conclusion
So, what’s the right answer? There isn’t one, of course. There are just too many options and factors.
I will say that instead of ensuring your potential employer can pass Spolsky’s Joel Test, it is more important to ensure you will be empowered to help them pass it if you come aboard.
If at all possible look for a technology company with other developers. Do not take a job where you are going to be the only developer there.
That said, my first job out of college was working for a small technology company, 3 developers and the owner/boss. The boss was a complete egomaniac. 70 year old curmudgeon who’s only joy was yelling at everyone in the office at least once every day. Try to avoid that job.
Another job possibility you could look into, Support Engineer. With this job you will be forced to learn a lot of code written in a lot of systems. Plus, it will give you excellent experience with how users/customers work with software (not like you do).
Finally, for the first 6-10 years, don’t stay with the same job for more than 5 years. It is fine if you move around in the same company to very different job with different groups, but don’t say in the same position in the same company.
Interesting that you should bring up this topic, as I just got done teaching a class and one of my students was a co-worker from my days at Micron 10 years ago. She had made a career out of her job a Micron, working there 17 years before she got laid off last year. Her skills are now very dated and she is finding it very difficult to find a job somewhere else. Her comment was without the current skill set no one wants to hire an older developer when they can hire someone with just out of school as they lake the same skills are cheaper and usually willing to work harder.
My point is that I think it’s always good to try and maintains some set of current skills as you never know when you may be required to rely on them to get a job. The software industry isn’t like other jobs because everything changes so often that if you don’t have some marketable skill you had best make yourself indispensable so you don’t find yourself out of work and unable to get a new job.
I’d second looking for smaller companies/projects/team where you’ll get to see the entire system and software development lifecycle. Moving around within a big company is good to a point, though you really have to change companies or work on outside projects (ie. open source) to understand different cultures and methodologies. Finally, be wary of any job that quelches your desire to expand with the phrase, “we just hired you to be a programmer”.
Great article. To add to the other comments, speak with a mentor and establish some goals. If this is your first job out of college, do not consider pay as the deciding factor. Consider the environment and what you can potentially glean from mentorship. If faced with the decision of employer A for $X and employer B for $X $4,000 extra, don’t settle for extra pay if the lower paying employer provides a more conducive environment to achieving your goals. Be patient and pay your dues upfront.