"What should I do?" is another question I hear a lot, especially from the people I manage. It gets phrased differently sometimes:
What would you like me to do?
How would you like this done?
How should this be done?
How should it work?
Etc.
This may be the most value-robbing question ever. It essentially turns an opportunity to show who you are and what you can do into nothing more than a task to be completed. Asking what should be done is, essentially, asking someone to design the solution to the problem that you've been assigned. When I run a team, I want my team members to design (and implement) the solution. One of my management mantras is, "Bring me options and ask for a decision".
I can hear the naysayers now: "But Jay, not everyone who reports to me can design the solutions to the problems we have."
Oy.
I'm not suggesting that your only options are what your team brings you, I'm suggesting that before they ask for help they demonstrate an attempt at solving the problem. This is how you build design skills: You practice and you find out where you're wrong. Eventually you get to the point that your designs are accepted by your manager consistently and you get to move up a notch. Without that practice, though, you'll remain stuck where you are.
So instead of finding out (and doing) what you should do, do what you can. Present options to whoever needs to make the decision and if the options are unacceptable, then ask for help. Look for the growth opportunity in everything you do and you'll be amazed at how quickly you grow.
"Should I keep doing what I'm doing or become a manager?"
While I hear that a lot from software developers, it's a universal question. Should you practice your craft or become a manager? I'll weigh in with my opinion in a moment, but let me first say that everyone is a manager. As I mentioned in the post Walking the Walk, no one is as interested in your career as you are. By the same token, no one has as much control over what you do as you do. That's right, even if no one else reports to you, you do and that makes you a manager.
Maybe you're just really bad at it.
Just because you aren't managing doesn't mean you're not a manager. We've all had "managers" who don't manage and if you're not consciously and actively managing yourself then you've just joined their ranks. There's some good news though: You don't have to stay that way. As a matter of fact, you can become the best manager that you've ever worked with. There are tons of books on management and I recommend picking one up and applying its lessons to yourself, but here's the short version of what makes a good manager. A good manager:
Knows what needs to be done.
Equips the team with what they need.
Clearly defines success.
Removes roadblocks.
Measures progress against the plan often enough to correct deviations.
Manages up to ensure that the team is making the big boss happy.
Find a manager who does those six things consistently and you'll be incredibly successful in your role. Be a manager who does those six things consistently and you'll be incredibly successful in whatever role you choose. People who can make other people successful are both successful themselves and in high demand.
So start with yourself. Practice those six things on your own work and get good at it. Once you do, then ask yourself, "Do I want to make other people successful, or should I stay solo?" Regardless of the answer, you'll continue to be a manager throughout your career.
There are a handful of techniques that I rely on to make clients happy. Of these techniques, the one that requires almost no thought, no training, and no special skills is to work hard.
It's also the most effective technique that I've ever used.
There are people who are just as successful as I am that don't work nearly as hard. These people are better at what they do than I am at what I do. They are smarter, luckier, or something-ier than I am and I applaud them for it. I choose a simpler path and one that is much more repeatable and transferable: I choose to work really hard when the opportunity presents itself. I think too many people misinterpret the phrase "work smarter, not harder" to mean "don't work hard, figure out how to get things done without much effort". My translation is "work hard, and if a better way becomes apparent then do that . . . but also hard, and just get more done". There's a reason why this is called Big Swinging Developer and not Super Comfortable Developer.
To be clear, "hard" doesn't just mean hours. Sure, there'll be times when nothing but brute force will do and you should be ready to plow through when it's time, but there's more to it than that. Hard work is all about doing the things that others won't. The messy, unpleasant, yet valuable tasks that lie around undone because doing them is unattractive. As I alluded to in a post about brownfield development:
There's money to be made in doing things that others don't want to do. A lot of money.
Go ahead and give it shot. There's bound to be a loose end where you work that's been languishing forever. Attack it. Get it done. Do it in addition to whatever else you were going to do that day or that week. Rinse. Repeat.
This blog is all about going from being a good programmer to a highly paid developer. I spend a lot of time talking about the techniques I've used in my career, but I haven't said anything about the effects. This seems like a good time fill the gap since I'm changing jobs on Monday. The change represents the positive outcome of a lot of what I've done and gives me a chance to talk about some aspects of managing your career.
Managing Your Career Is Your Responsibility
I can't emphasize this enough. I've seen so many people fall short of their potential and feel victimized when their manager didn't move them along their desired path. Hear me now and believe me later: nobody will ever be more motivated than you to advance your career. Which means that if you're not particularly motivated to advance your career then you'll probably fall far short of your potential. If you've never given much thought to career management, then there's only one word you really need to know: Alignment. Figure out where you want to be and what you want to do, map a path, and then constantly align your goals with those of your manager.
Leave On Your Own Schedule, But Always On Good Terms
My career is a little more actively managed than others. I'm continuously measuring where I am and what I'm doing against other opportunities. I try to keep what I'm working on clean enough that I could finish in a couple of weeks, if need be. This has several benefits. For example, I tend to work in small, defined chunks that are easy to manage and measure. I avoid going down the deep rabbit holes that trap so many other developers — if a developer ever tells you that they want to "rip out the entire persistence layer and rewrite it" on their 3rd day (or even their 3rd month), then chances are you've got a rabbit hunter. This also allows my manager to easily rearrange my priorities as his change. Something big pops up and who is he going to redirect to it, the guy who is a month in to a 3 month coding odyssey or the guy who can wrap things up in a day or two? This is really important, because it's critical that your manager does not feel like you've left him hanging when you leave. It's great if they are disappointed that you won't be around any more, but if they are angry then you've probably done something wrong. Also note that you should be leaving for an understandable reason. This means that simply going somewhere else for more money is a bad idea. If you feel underpaid then you should be able to negotiate an increase where you are. If that fails and you presented your case well, then your manager will not be surprised when you leave for more money. A couple of good reasons to leave are: You're in the wrong place (i.e. alignment is impossible), or you've gotten an opportunity that simply doesn't exist in your current environment (i.e. a jump in leadership that would only happen somewhere else). If done well, your manager will be glad you were there for the time you were and you've just added a person to the list of people who may call you with one of those aforementioned great opportunities sometime in the future.
So How Did This Happen To Me?
My story is combination of all of the above. The number one reason why I'm changing jobs is that I'm in the wrong place. The job I'm in was about to require far more Python work than I could stomach. NOTE: This has nothing to do with Python, it's a fine language but it's not the one I want to work in. This meant that alignment was going to be impossible. At the same time, a former manager had started in a new job and since we'd kept in touch he told me that there could be a great opportunity there. Since I was in the process of winding down my current cycle of work and getting ready to start the next one, then everything cam together such that I could hash out a deal, give my notice, wrap up my work, and roll to the next big thing. Believe me when I say that great opportunities like this don't come along every day so it's critical to be ready or you won't be able to capitalize on them.
In closing, I'm really happy that I had this job and it's great to be leaving while I still feel that way. I firmly believe that managing my career advancement (and personal happiness) is nobody's job but mine and I'm fortunate to be able to share my experience. As always, feel free to post similar experiences, advice, or questions in the comments.