In my years as a software developer, engineering manager and tech entrepreneur, I've noticed a startling problem.
Many startup software engineers don't take proactive steps to manage their careers.
This might come as a surprise, since in many cases these same engineers are the smartest people in the room. Remember, however, that many software developers are self-taught and haven't necessarily conformed to traditional education and/or predefined career paths.
This is totally fine (as was my personal case). But, based on my experience, it seems that many startup engineers would benefit from some basic suggestions as to how they might think about their own career trajectory in order to optimize for growth, and then begin to visualize and plan their own career path with additional clarity.
I'd like to point out a few things from my experience that you, as a startup engineer, can do to get you to CTO level or, perhaps, prepare you to start your own company as a technical founder (if that's your ultimate goal).
The truth is, many of the suggestions in this post will likely provide at least some help to most software engineers that want to move forward in their career - whether they happen to be at startups or not. This advice is simply couched in the context of my personal experience, which is as an entrepreneurially-minded engineer turned startup founder.
Please note that the things I'll be addressing in this article aren't so much about technical skills (although I'll cover some thoughts on that topic, briefly) as much as some of the other, so-called softer skills I'd suggest you think about integrating into your career thinking.
(If you're interested in ideas on specific technical hurdles, check out this article from Jason Rudolph that was an early inspiration of this post.)
Focus on building your network
When I first came to NYC as a young developer in 2000, I was fortunate enough to find many programming opportunities for myself as part of what I call the "first internet bubble."
I was self-taught and was learning more on the job every day, but I also realized that growing my personal network would be a major key to my future professional opportunities. I was new in NYC, and knew very few people, but forced myself to find every opportunity I could to meet other engineers, as well as product and business people, who were involved in technology.
I found several email lists full of tech industry events, and sought out the arbiters of the tech/business scene. Most of my nights after work were spent exploring events and meeting new people. Some events were good - a few even beneficial - but, most importantly, these events allowed me to expand my personal network and build more relationships with folks who I could help, and who could help me.
In addition, this experience allowed me, via comparison/contrast, to develop opinions on a broader set of businesses, people and technologies. Ultimately, this enabled me to make more informed decisions about the direction I, myself, would be taking in my career and who would be the best people to surround myself with to help me.
It was hard work, especially in the days before Meetup.com, but it was very rewarding.
After several years my efforts paid off: since 2004 I've started several companies, hired engineering teams, surrounded myself with startup advisors and gained customer traction in my own startups much more quickly than I could have without the network of personal contacts I have built.
Finally, and perhaps most importantly - if you really want to be in a leadership role in any position (technical, co-founder, or otherwise) the most crucial skills you'll ever develop are the skills that enable you to surround yourself with the best people. A strong network of high-quality individuals is the greatest non-technical asset you can ever develop in securing your own future.
Consider your personal brand
Many engineers tend to not fully consider the value that comes from building a personal brand.
I know you've heard this point made before, and now is not the time to code away in obscurity. Even casual brand-building for yourself as a developer can bring payoffs in many ways that you might not imagine. The biggest reason for this is that your brand can scale in ways that you, as an individual, cannot. Which means it can bring you more, and higher quality, opportunities than you could necessarily find and chase down on your own.
Remember - hoping to get discovered, whether you're a genius or a movie star, doesn't fall into the category of proactively managing your career.
But working on your personal brand doesn't need to be painful. Here are a few ideas to get you started:
- Fire up a blog to be your technical journal, or at least force yourself to tweet once and a while
- Contribute to the Hacker News community, or even the new Hacker News Podcast (great job, guys!)
- Speak at a conference, participate in an unconference, or give a meetup presentation
- Contribute to an open source project
- Make your code public in Github (see side projects, below)
- Mentor someone else
With so much online noise out there, it's becoming even more important to stand out. Give yourself the best chance to attract the best opportunities. Do something today to invest in your personal brand as a startup engineer.
Prepare to be a CTO
If your goal is to be a CTO, or in any position of technical leadership, then you need to start thinking about the strategic needs of the business and your ability to support those goals through the creative use of technology.
Many developers don't realize that the CTO is the most important bridge between the business and technology. Therefore being a CTO is not a purely technical role. You'll need to bone up on your business understanding in order to be an effective CTO or technical leader. And you must learn to see technology as fundamentally supporting the business, not the other way around.
Because of this, you'll need the capacity to lead a project from design to deployment. Design involves working with the business to actually understand their needs prior to architecting a solution. If you don't have experience being involved from the beginning to the end of a project, seek out opportunities with your current manager where you can gain these skills initially via a small project.
Also, remember that your primary goal in implementation should always be to build as simple a system as possible (not the most complex one - which, unfortunately, can be the goal of many engineers). Simplicity pays dividends in better reliability, easier scalability, less complicated maintenance and fewer unforeseen complications, in general. The highest calling of anyone in a technical leadership role is to continue to innovate ways to simplify the technology platform that supports their business.
The point is, you can start to think and act like a CTO long before you ever carry that title. Your ability to focus on the needs of the business first and design creative technology solutions to those problems will propel you forward in your career and will bring you leadership opportunities before you know it.
Finally, get involved with team building as early as you can. Recruiting the best engineers in today's world of almost limitless opportunity is extremely challenging, and requires strategy, process, focus, and even team brand building and marketing-style outreach. You need to know how to attract, screen, hire and retain the best talent.
Because of the crucial nature of these exercises, I highly recommend getting involved in team building in your current role in whatever capacity you can, as soon as you can.
(We'll be covering the engineering team building topic here in depth in future posts, so stay tuned.)
Always have a side project
Side projects combine a lot of the points I've already raised together into a nice, neat package. They allow you to learn new technologies and systems faster by parallelization and experimentation. They give you an opportunity to build your network via collaboration. They could also give you potential opportunities to learn other startup principles like failing fast, and systematizing your learning about products and customers.
The best case is when your side project takes on a life of its own and starts to turn into a real business. Then you have options.
When you have options as to what you want to do next - and realize that waiting for someone else to offer you a job isn't the only thing you have going for you - then you've truly broken through to the next level in your career.
Finally, side projects are great fodder for your Github account, demonstrate your breadth of interest in technologies and products, and show that you have motivation in getting new things off the ground.
All of these are great signals of your entrepreneurial potential and communicate a positive message to potential partners, or startups looking for passionate developers. (FYI, some of best startups I know won't hire you if you don't have a side project since they worry it may reflect a lack of personal passion about innovative technology products, in general.)
And, obviously, side projects are an amazing way to ...
Continue your technical education
It goes without saying that any engineer worth his or her salt should always be increasing their technical learning. In most cases, this is the easy part. Developers have an almost insatiable thirst for knowledge and they're happy to satisfy that thirst via new, and constant, technical pursuits. What good engineer do you know that doesn't have a list of several new languages/technologies they're just looking for an excuse to learn? The best engineers are always learning, tweaking, asking questions.
I'd like to make one point here regarding traditional computer science concepts. If you're a self-taught engineer, you may want to consider formalizing some of your personal education with classes that will teach you core CS theory and concepts. I'm not saying you must absolutely do this, but be aware that there is an additional level of rigor - especially in data structures and algorithms - that comes from traditional CS training. (Check out this great post on Quora where some top devs sound off on this topic.)
If you think you may want to veer off at some point in your career more towards the product, or even the business side, CS style education may not be necessary. But if you really want to legitimatize yourself amongst the hardest-core engineers, you may want to consider bolstering your education in traditional CS. (The free online courses offered at MIT's OpenCourseWare or Stanford's Engineering Everywhere are a great way to get started.)
Another way to continue your learning is to always focus on choosing opportunities where the other engineers that surround you are smarter than you in some obvious way.
If that's not the case with your current opportunity, look for ways to change it up, or perhaps ask the most senior engineer you know to consider being your technical mentor.
I'm sure I've missed some points, so feel free to add your thoughts in the comments below.
But be confident of this: by taking practical steps to continue to build your skills - especially the softer, non-technical skills - you'll have a better chance of becoming a highly successful CTO or co-founder. Good luck!