I got an interesting email from a young developer today asking for my advice. I’m quite flattered that someone thinks my advice is worth a damn and since flattery will get you everywhere, here goes…
The question (slightly redacted for confidentiality):
My role in the company is to lead the development of a big project here in FOO and I’m working as hard as I can to give the best impression in my first project as the lead developer. The problem is that I don’t feel like FOO is the way to go for me, there are so many bugs in their product and development it’s so painful, but the company management is totally committed to it because of the high prices of the projects with FOO, and they will keep selling FOO projects. The thing is that I feel that I should be preparing myself for a better thing, and the thing is I don’t know which steps to take. Do you think you can give an advice in order to have a successful career as a developer?
As far as I see, there are two paths to go here and it is up to you to choose your path. When faced with adverse development conditions, you can either work to change those conditions OR leave for greener pastures. Both paths can be either rewarding or frustrating, unfortunately and the “correct” answer will depend wholly on you and the situation.
On the one hand, leaving is in some ways easier. It is quite tempting (especially in excellent development markets) to simply jump ship and find greener pastures to tend (to mix my metaphors). What you will often find however is that greener pastures are not always so green once you get there. As it turns out, percentage-wise, most software development projects have a lot of bugs and are painful to work in, so you may just be starting over in the same situation with less knowledge and leverage. Or you may hit the jackpot and find a great challenging place to work. Unfortunately, it’s often hard to tell until you’re there.
On the other hand, working to change your current conditions is hard but also a fantastic way to become a leader. If you can learn about new ways to organize your processes (agile practices or methodologies), new tools to improve your code (unit testing, coverage, continuous integration, static analysis), or new ways to leverage technology (frameworks, etc), you may find this immensely rewarding. Those rewards extend not just to the company but also to your own personal growth as a developer. But as I say, this can be a tough hill to climb. You will have to fight political battles (above) and change behaviors among your peers, which can be really hard, especially without support from those above you.
Ultimately, the question at any point in your career is whether your current position is the right position for you across a variety of concerns (personal growth, responsibility, leadership, salary, benefits, flexibility, etc). If the answer is no on multiple dimensions, then you should probably look elsewhere.
Whatever you decide, I would urge you not to run from adversity. Tough times are when you learn the most so it’s very important to meet tough times head on, buckle down, and see what you’re capable of rather than choosing an “easier” path, at least some of the time.