(*) in software development
(**) during almost 20 years of professional journey
Career development ain't easy. There's no single path - equally right for everyone. It's highly contextual, dependent on individual strengths, advantages ... and aspirations. And of course, there's the luck factor - you can amplify an opportunity once you face it but only if you face any ...
Nevertheless, I believe that some universal learnings could be applied by literally everyone. I've assembled my personal (highly subjective) list ... only to find out that it has quickly got out of control, growing to 10, 15, 20, and even more items. It was hard to question any of them, but I intend to keep a crispy, crystal-clear message - hence the decision to reduce the list to ONLY SIX most important advice.
First of all:
1. No-one will manage your career for you; this responsibility is yours and yours only!
That sounds more than obvious, yet 90% of people ignore that. For some reason, they naively hope their current employer will take care of their future - identify the most promising career direction, push them to develop necessary skills, make sure the work performed spurs the individual growth, etc. That MAY be the case if you're lucky enough to encounter a pristine leader who prioritizes people over KPIs, but ... it occurs very rarely.
2. There's no (personal) development w/o challenges and goals - everyone needs some stretching and pressure.
I agree that it's not the target but the journey that truly elevates us to the higher levels. But that journey has to have a meaning - we need a direction, an azimuth, and a goal within reach — a goal that is both worthwhile and achievable (according to our own judgment). Pushing tasks through (like a conveyor belt) w/o a broader context and fulfilling milestones quickly gets tedious, repetitive, and ... demotivating.
3. Successful people "attract" the interesting work - the best way to boost your career is to prove to be effective & reliable (adjust your level to current capabilities, it's OK to start small); stick to successful people first and become one (in time) as well.
What matters, in the end, is not how well you know Azure or Node.js (sheer skills make you an efficient, expensive TOOL), but whether you're effective (you get the stuff done) or not. Engineers who focus on achieving "technical successes" (but rarely add any meaningful business value) tend to be very happy with themselves, though once they disappear from the team - its causative power (counterintuitively) increases. Once you get recognized as effective, you'll act like a magnet to the most attractive opportunities, the best people, and the most exciting technical challenges.
Get involved, take ownership, lead the way and don't be afraid to take (controlled) risks!
4. We're all defined by the sum of our unique experiences. Nothing compares (in terms of learning speed & intensity) to the actual battle scars we've acquired in the wild while learning craft the hard way.
To get more experience (/skills /proficiencies), you need to face new experiences (/situations /challenges /endeavors) - if your work environment is static (conditions don't change) and you've stopped "learning by doing" - you're stuck and wasting time. Employers do realize that and try to "bribe" you with "horizontal promotions", privileges or extrinsic (material) motivators - such a "golden cage" is one of the most dangerous career traps. Do you know the difference between "10 years of XP" and "10 x 1 year of XP"? That's exactly the point.
5. The proper career development model is 'E-shaped person': a versatile generalist with few, diversified areas of specialized expertise.
Strong engineering foundations, based upon professional curiosity and traditional mental models (we all stand upon the shoulders of giants) are very important, but to make a difference, one should bring some unique flavor (attractive specialty) to the table. However, the tech develops so quickly and in such an unpredictable manner that betting on a single horse is simply too risky. That's why I suggest hedging your specialty: always have a plan B (pro-actively, not re-actively).
Treat it as the most important investment, the investment in yourself. If well made, it can upgrade your career from slow, linear growth to the accelerated, exponential one.
6. Being a successful software engineer is far less about coding than it seems. Code is a fabric - an extremely malleable matter to craft the solutions with. But there's so much more needed for those solutions to make any sense.
Abstract thinking, familiarity with the popular mental models (lingo, patterns, conventions), ability and willingness to communicate, open-mindedness and patience, eagerness to understand domain & identify the business value, visual thinking and being capable of express and "sell" your solutions to other people (including non-technical ones) - all of those (and many more) are critical to BUILD good software products, yet how much do we do to actually develop those "soft skills"?
Runners-up (pieces of advice that were close to the Top 6, but didn't make it in the end):
- don't avoid feedback, scream for feedback! (and provide some, just to set some good example)
- especially in the initial period of your career, an experienced mentor makes a huge difference - try to avoid re-inventing the wheel by yourself
- nothing hurts as much as a neglected opportunity - we reject some because we're afraid to leave our comfort zone, but how can you really win if you're always afraid to play?
- networking is very important - be aware of what's going on in the community, what are companies (& people) doing, who's on the raise and ... who's not
- when considering next career move, the (organizational) culture should always be the most important factor to take under consideration (but unfortunately also one of the hardest to properly assess from the outside)
- however crazy it sounds - especially in the initial period of intense growth - don't optimize for money (income): just assume the X% buffer below the top offer you receive and pick the best offer in that zone, having the money out of the equation
- at last but not least - be honest with yourself regarding your life priorities & aspirations: not everyone has a pure growth mindset, not everyone is primarily passionate about building software - it's OK, but in such case you should adjust your career decisions to make sure your other priorities are in the foreground; you cannot eat an apple and have an apple in the very same time
Feel free to provide your comments and opinions - do you agree with these points? Would you put any other above them? Is there anything in particular that has helped you in the most important periods (so far) of your professional career?