Reflections on a Career in Progress.
My three year anniversary as an associate web developer at LinkedIn is only days in the past and I find myself prepared to say goodbye to a company that has helped my career blossom. In those three years I have progressed to web developer and senior software engineer. When I started I was an undisciplined designer-turned-coder whose coding experience had been limited to marketing and personal projects, projects with a short shelf-life and only limited infrastructure holding them up. LinkedIn is where I matured and learned to appreciate my craft.
As a software engineer I find myself in an enviable position when it comes to finding work. Everyday my inbox is filled with messages from recruiters looking to fill their growing need for people who can code. I do not take this for granted. I know my profession affords me opportunities that others do not have. I also understand the richness of the opportunities I have now may not always be there. I try to appreciate every company that gives me an opportunity and give them everything I have to help them be successful.
So, there is opportunity, but why would I leave a company that has helped me grow so much? I could certainly stay and I would be happy if I did stay. I did not come by this decision lightly. In the end the decision to leave LinkedIn is much like my decision to join LinkedIn. I do not feel fully comfortable with the decision. I feel by leaving I will be pushed in ways I have not been pushed before. I will be pushed beyond what is my current comfort zone and that will force me to grow in ways and with a speed I would not if I stayed.
Goals for Career Development
One of the things that has been key to me finding any success in my career is my willingness to set goals. I have broad goals for my life and my career that are ever present. I constantly revisit these goals as my life and motivations change, but having these guiding lights help me articulate to myself what is most important. I believe this is a good practice, even for those who do not place career high on their list of priorities. What do you want out of your career and your life? If you are sacrificing your career for something else do you realize it? If you are sacrificing the rest of your life for your career are you okay with that? These are discussions we should all have with ourselves. Every time we chose to put resources (time, effort, money) towards one thing we are not putting those resources towards something else. These are choices, even if often they are not fully conscious. Having awareness of our priorities allow us to plan for and better appreciate our opportunities.
Beyond broad goals, I have goals for every year, such as I want to blog this many times, I want to make this many contributions to open source or I want to fill in these skill gaps. I have goals for every quarter, such as I want to read this book, I want to learn this skill or I want to write this library. I have goals for every day, such as I want to make this progress on this project or I want to read this chapter in the book I am reading. All of this adds up to what I want my career to look like. My perception of my career isn't something I need to articulate to anyone else (though sometimes I do), but I always have an idea of what my career is and how that relates to what I want it to be. It may sound silly, but broadly and ultimately my career goal boils down to I want to be as good at what I do as I can be. Any activity, to me, is always more enjoyable if I feel confident and skilled at it.
Being Honest with Ourselves
Everyone has different goals and priorities. I currently have very strong ambitions for my career. Career is one of my top priorities at the moment. What do I need to do to progress from senior engineer to staff engineer and senior staff? Or, more importantly to me, what do I need to do feel more confident as a technical leader? Understanding and being able to properly articulate our goals is a requirement for being able to act on accomplishing those goals. I have met people who set goals but are unable or unwilling to do what it takes to reach those goals. I have met people who have no career direction. I have met people with goals, but they are blind to what it will take to accomplish those goals. In terms of career, we need to be honest with ourselves and our mentors about what we need to do to accomplish what we want to accomplish and, just as importantly, are we willing and able to complete those tasks.
Where do you fit? What do you want your career to be? What will it take to get where you want to go? Are you willing/able to do those things? If we answer "no" to that last question we need to start over and adjust our goals. Things can change. That is why it is important to constantly revisit goals, set both short and long-term goals. Life changes. What's important today may not be important tomorrow. The constant should be a willingness to be honest with ourselves.
It shouldn't be a problem if you are exactly where you want to be in your career (in the context of your other priorities). I've known software engineers who have gone years without promotion because career is not the most important thing to them. They do good work, complete their tasks, but they are unable to do more. This isn't a problem if that person understands their limitations. Most coding is maintaining (fixing and adding to) existing code. There is a ton of value in just being able to do this. It's also not a problem if you are not where you want to be in your career if you understand why. If you understand what you need to do to get there and are willing and able to do it. Everyone is different and their lives allow for different levels of career growth. This isn't a problem.
Problems and unhappiness come about when we are not honest with ourselves. We need to have honest conversations with ourselves, our managers and other mentors. Why am I in the position I am in? It's this person's fault, or this situation's fault. Sometimes we are put in bad situations, but the first place we should always look for problems and solutions is with ourselves. No, it's my fault because I didn't do this or that. I have this weakness. What do I need to do better? What are the things I can affect? I need to learn this and work on doing that better. Setting goals (and resetting goals) provide a framework for these conversations.
It certainly wasn't my goal at the beginning of this year to find a new company. My career goals are typically more general than any specific company or project, but I am always looking at my career and asking myself if I am in the right spot, are my goals still relevant, have my goals changed, do these changes require some broader change in my career. I have long felt comfortable at LinkedIn and this is part of the problem. A new company means new technologies, methodologies and ideas. Being exposed to new ideas and new problems is always a good way to find intellectual growth. I am excited for the new opportunity and find at this moment it is the best way for me to achieve my career goals.
Learning How Much I Don't Know
As much as allowing our goals to be malleable is important we must also allow our knowledge, opinions and skill sets to be malleable. One of the best things about being a software engineer is that it forces you to be a career student. The act of learning itself can be exciting and rewarding in ways that few things are. This is also one of the great pressures of software engineering, as soon as you become complacent with what you know you will start falling behind your peers. I think if you find yourself faced with a moment where you are no longer willing to stay on top of new technology X or learn more about some part of the stack adjacent to what you typically work on it is time to revisit your career goals.
The recognition of a career in learning should hopefully lead to a balance of confidence and humility. It is hard to solve engineering problems well. Yes, you should be confident in your solutions. You should be able to argue intelligently about why you made the decisions you made. However, you should always understand you don't know everything. The field of software engineering is huge, no one is expert in the full breadth of it. We have different ideas, knowledge, opinions and experiences about what has been successful and what will be successful. Be confident, but be open to new ideas.
To the Companies and Products I Leave Behind
I believe it is important to always take pride in what I do. My work is more enjoyable if I do it well. I want to be able to show my work to other people and not feel embarrassed. Not only that, I want it to be fun and exciting to discuss my work. Look at this cool thing I did. I want the products I work on to achieve their goals and I want the companies I work for to be successful. My work is my legacy. Sometimes I am more successful with this, sometime less.
In an age where it is not uncommon to switch companies and maintain career mobility it is easy to be too focused on self and lose loyalty to product and company. I have certainly seen people perfect the art of self-promotion to gain promotions on top of questionable work. This sews decent within companies. Even people who are able to kiss the right ass are unable to hide their work from peers. Why does this jerk get promoted for this crap? Why should I put in the extra effort? This is building career success on a house of cards. Eventually someone has to come rebuild the foundation or things will tumble.
In the end the work is the work. When we write code we quite literally leave a trail (git blame this crap). If you are great at what you do, you will always have a place. If you limit your career to the optimization of ass-kissing you will find yourself on fragile ground. I do the work because that is my job. I try to do the work well because it represents me. That is what I want to be judged on. That is what I enjoy. That is why this is my chosen profession.
To the People Who Have Helped Me
I want to conclude by calling out the people who have helped me along the way. I am certainly proud of how hard I work. I believe I have done a lot to build whatever success I have had. However, no one is successful without the help of others. We have all been helped along the way at some point, even if we don't realize it. I have had several wonderful and supportive people help me in my career. I hope there are people who can say the same about me.
We go to work everyday and hopefully we enjoy the people we work with. We see them a lot, talk to them, some of them become friends. There is a human cost to the decision to leave a company. These people have not only helped me become better at what I do, but they have become friends. It brings me joy to see them each day, talk with them and be on this career journey with them. Often a decision to leave is going to make their work harder for some period of time.
At every career stop I have made there have been people who have been particularly wonderful to me. The only thing I can say to those people is that I hope the contributions I made while working with them compensate for any hardships placed on them when I decided to leave. I am thankful to all of those who have given me opportunity and helped me. We all have to be true to ourselves and our goals. I don't leave because company X is better than company Y. I leave because company X provides new challenges and opportunities because it is a different company.
Thanks to those who I have met along the way. I can't wait for the challenges that lie ahead.
Very motivational and inspiring Kevin!
Congrats on your new job! I love reading your articles on FP and hope to see more.
I was able to spend some time with your Dad on Saturday. Good to catch up with him. He is so proud of you. Enjoyed your writing. Take care.
Excellent views on goals, career, honesty, workplace complacency, shameless self-promotion and ass-kissing... legacy. However, setting examples, and inspiring others, is also part of your legacy, not just your work, and there is no 'git blame' for that. It has been a pleasure to have worked alongside you during these three years. You have certainly left your mark here on our team, not only through the software you've built, but also through your determination to push beyond their current skill set and knowledge and go beyond your comfort zone, which has inspired some of us to do the same to one degree or another. Every time I do Functional Reactive Programming, it is impossible for me not to think of the father of Frampton.js who first introduced me to that incredibly useful programming paradigm. The physical presence of Kevin the JS expert, the FRP nut head, the designer of our team t-shirts... the writer, will be missed. Let's stay in touch and have a beer sometimes. Cheers to an amazing journey and good luck on that next chapter of your career!
Best wishes on your new adventures! Thank you for all you've done for the Help Center -- you were wonderful to work with and will definitely be missed!