Every experience you have as a software developer should change you in some way. And I don’t just mean growing older by virtue of time passing. Everything you do should evolve your understanding of your craft (and/or related skills) or your understanding of yourself – which ultimately achieves the same goal. I am not just talking about major milestones in your software development career like switching jobs, becoming a leader/manager or starting you own company. Every job, every project big or small, every significant interaction you have with your team mates and even every story you implement, should morph you into a developer who is slightly better, more resilient, more knowledgeable than you were before.
What this means is that you should strive to glean at least a little bit of new knowledge/experience, that will make you a better developer, from everything you’re involved with day to day. I am of course talking about significant experiences – you don’t need to be philosophical about every key stroke – fine grained, but still significant experiences are the order of the day. You will agree that if you go on a journey and get nothing out of it by the end, you’ve wasted your time. It is the same with your software development experience. If you finish a project or even finish implementing a feature and find yourself completely unchanged (i.e. your understanding hasn’t grown and you’ve learned nothing new), you’ve wasted your time.
But, I hear you say, some work is mundane, it’s cookie cutter, you can’t learn anything from it, but it still needs to be done! That is true, but it all depends on how you approach it. Ultimately you’re responsible for creating the conditions that will allow you to grow and change, you just need to be creative about how you do it.
Getting The Most Out Of Every Experience
Becoming a better developer is about more than just learning new programming languages, or the next greatest feature of your favorite framework. There are your interpersonal skills, how you interact with others. There are teamwork skills, how well you work with people. There are leadership and management skills. There are personal productivity skills and financial skills. There is domain knowledge, marketing knowledge and organizational knowledge. There is wider industry understanding and recognition. There is improving your ability to learn and pushing your limits.
What I am getting at is the fact that no matter what activity you’re involved in you need to examine it from all these perspectives, to find how it can change you and make you a better developer than you were before. Sometimes the opportunities are obvious, you’re working with great new tech or using a process you’ve never used before, you almost can’t help but absorb knowledge, you’re growing despite yourself. Other times, the work really is mundane and if you don’t examine the activity from every angle, you miss the opportunities that it provides and then you really are just doing cookie cutter work and getting nothing from it – wasting your time.
I’ll try to be more clear. Say you’re an SQL guru, there is a whole bunch of SQL that needs to be done and it looks like you’re the man for the job. On the surface – boring, you’re already awesome at this, surely there is nothing you can get out of it. But, let us look further, maybe you’ll be pairing on this task and you’re not as much of a guru when it comes to pairing or interpersonal skills. Here is a perfect opportunity for you to improve those, you just need to see it. Or maybe you are a pairing guru as well, but what if you’re pairing with a more junior developer. Perhaps it is an opportunity to teach some of what you know, improve your mentoring skills and grow someone else as a bonus. But say you’re not pairing, you can do this by yourself with your eyes closed. Why not slow down and try and dig deeper into the domain you’re working with, improve your knowledge in that area, or maybe you can simply just try to improve your typing skills, it surely can’t hurt. Here is one out of left field, you don’t want to do this boring work, why not use your negotiation skills to try and get out of it. You probably won’t be able to, but you might learn a thing or two just from trying and it will certainly exercise your tact and poise after all you don’t want to piss off your manager/lead by trying to weasel out of work :). The point is, you look at a task from a different angle and all of a sudden you’re learning and changing, you’re morphing into a better developer than you were before.
What If You’re Just Marking Time?
Sometimes you’ve been stuck doing something forever (that’s what it seems like anyway). You’ve approached it from all the angles, you just can’t squeeze anything else out of it, what do you do then? That is a good question, but it is the wrong question to be asking. If you really do believe that you simply can’t learn and grow doing what you’re doing, why are you still doing it (that’s the right question)? Is it for financial reasons (you’re getting paid a lot), if so then make sure you’re not sacrificing your long term prospects in your industry for short term financial gain. It could also be because you enjoy working with the people in your team, which is a valid reason, but once again have a look at the pros and cons, after all, you don’t ever have to leave your relationships behind if you move on. You never leave the people, you just leave the company!
If it is neither of those reasons, then why ARE you still doing it? Your cheese is gone, it is time for you to realize it. Remember, judge every experience by how much it can change you and grow your understanding of your craft; move on if you can get nothing from it. If you do, not only will you always be able to gain a lot of satisfaction from your work, but you will also morph into a more well-rounded developer and human being day-by-day (and not just year-by-year).
Image by Looking Glass