Always striving for perfection...sounds like a good thing...right? There may be times when the struggle to achieve perfection is good, but I find that most of the time it is a hindrance in my career. Most agree that you often learn the most from your mistakes, but the very nature of a perfectionist is that they fear making mistakes. Don't get me wrong, I make plenty of mistakes, but I find it hard to willingly go down a path that I am not sure is the correct one. I must make concerted efforts to not get stuck in endless loops of planning, designing and gold plating my software. My biggest struggle on a new project is getting out of the starting gate. My perfectionist nature wants to have every aspect of the app defined and understood to the nth degree. I don't want to start on something because I know as soon as I do, I will see the problems and have to re-work my beautiful code over and over until it is a mass of unintelligible spaghetti code that makes me want to cry. The easiest way for me to get past this is to convince myself that I am first going to write a prototype that I will throw away when I understand what is needed. Even though I know that there is a very slim chance that I will ever just toss aside the code and start from scratch, it is a metal release that gives me the freedom to make the mistakes I need and to start cranking out code without the mental handcuffs of perfectionism. Following this pattern has forced me to learn to refactor intelligently and taught me the things that are difficult to refactor and should be considered before jumping in. Cleanly refactoring is a separate skill set and will take time to learn to do well, but it is a valuable one and well worth the time spent. Don't let a desire for perfection stop you from trying, for an imperfect thing is almost always better than a perfect nothing.
I think this question is probably asked by everyone in the software development field at some point, and the answer is never simple. Let's take a look at what is important and make a game plan that will get you where you want to go.
When looking at moving to the next level, the first question that you have to answer is "What is the next level for me?" Until you answer this, it is going to be pretty hard to make any goals or measure your progress. Do you want to move from a junior developer to a senior role, or move into more leadership type roles, or become a famous speaker? Knowing what you want is critical to making you game plan. So stop dreaming about some grand amorphous future and start writing down specifics about where you want to be, what you want to be doing, and how you want your career to progress.
After you have identified where you want to go, it is time to make a plan on how to get there. Your plan should consist of attainable goals that you can checked off as you make progress towards your desired career path.
Here are a couple of example scenarios to help you get started:
Who: A junior developer who wants to increase his skill levels, responsibilities, and compensation
Goal #1: Become more proficient at X technology that we use at work.
- Find a mentor at work and build a relationship with them
- Watch online training courses on the subject
- Find an open source project that uses X and get involved
- Find a user group for X and start attending the meetings
Goal #2: Increase my visibility to my bosses at work
- Speak up more in meetings
- Volunteer for tasks when the opportunities arises
- Start inviting people to lunch
- Look for extra curricular work activities that I can attend (i.e. hang out with the boss)
Goal #3: Get paid more
- Track accomplishments at work (for negotiating leverage and resume building)
- Polish up my resume
- Find out what others in my position are making
- Create a compelling argument that I deserve a raise
- Ask for and get a raise, or find a new job
Who: A senior developer who wants to improve her marketability and personal brand
Goal #1: Pick a subject and become an expert on the topic
- Make a list of topics that are in demand and are interesting to me
- Dive deep into the topic by
- Reading books/blogs
- Watching training videos
- Going to user group meetings
- Following the social media of the experts on the subject
Goal #2: Increase public awareness about my expertise
- Volunteer to talk at the local user group on the subject
- Get a certification
- Submit to talk at a regional conference
- Use social media
- Start tweeting about the subject
- Converse through social media with experts
- Write blog posts
- Answer questions on StackOverflow
These are just some ideas to get you thinking. I hope that you can use this to get the creative juices flowing and evaluate where you want your career to go.
Just a few weeks ago I decided that a change in my career path was needed. I have been working for the same company for over 5 years and have recently been feeling like I was stagnating. Even though my job provided me opportunities to learn new technologies and to stay near the bleeding edge, I still didn't feel like my career was progressing. This is the same feeling that always seems to precede a job change for me. But this time I didn’t want to just sign up with a new company and wait for the feeling to return in a couple of years. This time I decided that I would take my destiny into my own hands. I am going independent, well as independent as I can afford to be. My ultimate goal is to create software products that I can monetize, but until I can depend on my products for income, I will be working as an independent contractor.
I have wanted to be my own boss for years but I always found an excuse to not take the first step. I finally decided it was now or never, and never was even more terrifying than the prospect of being out on my own. So I started the ball rolling and within a couple of weeks I had secured my first development contract, and immediately gave my notice. So as I wrap up my last few days with my current (and hopefully last) employer, I am looking back at where my career has taken me and have come to some conclusions.
The first thing that I have discovered is that my career has lacked focus and that I have relied on dumb luck to be where I am. I have had the opportunity to work with a lot of clients in many industries and have learned much over the years, but never have I directed my career with any overarching goals in mind. Sure I have passed on maintenance developer jobs and have taken jobs because of the technologies or opportunities that they presented, but there was never a clear path or even a real understanding of the end game. I was experiencing first hand Zig Ziglar’s statement that “If you aim at nothing, you will hit it every time.”
Next, I noticed that I wasn’t working towards the goals that I did have. In the past I have set some goals for myself and they look great on paper, but goals are just dreams unless you take action on them. Some of the goals that I had set for myself were not realistic and others were just too vague, and yet others seem achievable, but I have made no action plan to reach them.
The last big item that I realized about myself is that I have let fear guide my career path. I am not necessarily a bold person who takes unnecessary risks, but I am someone who has had to deal with quite a bit of fear and uncertainty in my personal life. This is one area where I think my experience works against me as I am now much more capable of seeing the dangers and risks of my choices.
So how does this self-reflection help me? What changes am I going to make? Well, first I am going to map out my career goals and know my end game strategy. Of course I fully expect these goals to change over time, so I need to make sure to revisit them and check that they line up with my expectations. Secondly, I plan to change how my goals are managed. I need to review them at least weekly and do a thorough re-evaluation monthly. I need to align my weekly tasks with my goals and make sure that I am making the needed progress. Lastly, I need to reinforce my belief that the largest personal growth comes from moving out of your comfort zone. The best way to do this is to continually force myself to do things outside of my comfort zone. For one, I have been wanting to do some speaking, so I am planning on volunteering for a talk at my local .NET user group.
I hesitate to publish these personal blog posts, but I figure that there maybe some of you who suffer from the same issues and that reading about my struggles may help in some way. I also hope to follow up this post with some progress reports so others can see my changes in action.