This article is about how finance-related decisions can lock your career development down if you don't understand what you're really paid for ...

Reader, meet X

X starts his software development career. X doesn't know much about the job market, local companies, their specifics - he's fresh & probably doesn't even know what to ask about (when being recruited). In the end, he picks an offer of the company ABC & starts a new job. Being a smart & quickly-learning individual, his career in ABC advances quickly:

  • after the 1st year he gets a substantial raise
  • after the 2nd year he gets another raise & job title "upgrade" (doesn't change much, but still a nice thing)
  • after the 3rd year he gets a nice bonus for successfully delivered project plus a team lead's premium (because previous team lead left & X has filled her boots)

So it continues for 6 (!) years. X's situation is much different than when he was starting: he earns significantly more (maybe even 3 times his initial pay - !), he's operating very smoothly within the ABC, he has driven majority of the top internal projects & initiatives, he's considered one of the most important technical leaders in the Engineering dept of ABC.

An unquestionable local starlet.

The grass is always greener ...

But he feels he's missing something. He works in ABC for 6 years now, it feels like he has experienced everything this company has to offer him, he'd like to try "the world outside" - to encounter some different challenges, to learn some new stuff.

So X goes out to the market with his eyes widely open and ... very clear financial expectations. He's not greedy - his current pay-grade is NNN & he's willing to consider any offers >NNN (as he expects a step forth, not backwards). He's brilliant, he's successful, he's daring. Yet still - he gets back to ABC with his tail tucked between his legs, very disappointed, nearly offended. Apparently, no-one except for ABC is willing to pay him NNN (or even anything remotely close to that).

What happened? WTF?

Taxing X

X'es market value (as an employee) is (to a great extent) company-specific. Practically speaking: it's how much "business value" he can deliver to particular company. Which is a resultant of several factors (variables), e.g.:

  1. [SKL] professional skill(s) level - for technologies/abilities that are applicable for the organisation (programming languages, platforms, libraries, tools, ...); it's not just theory, but mainly about practical & relevant experience
  2. [CSK] business domain/company-specific knowledge - unique experience that is not common in the market (in fact: may be very specific to every particular org)
  3. [APT] aptitude - potential, ability to adapt, intellectual flexibility (as a measure of how deeply/quickly someone can adjust to new conditions)
  4. [ATT] attitude/mindset - kind of motivations followed, fixed/growth-oriented mindset, how ambitious / goal-driven / practical he is, etc.
  5. [TMC] temporary market conditions - something neither X nor ABC truly controls (at least short term), but it favours X - e.g. ABC is desperate because the project starts in 2 weeks and their lead COBOL developer has just handed in the resignation letter (you've guessed right - X knows COBOL & is available straight away)

While SKL & APT are quite universal & similarly valued by all the organisations in the job market, it's not so simple when it comes to ATT, TMC & (especially) CSK.

Why so?

[ATT] Attitude/mindset is very strongly culture-dependent. Different companies appreciate different kind of thinking - yes, all of them want effective people, but the devil is always in details (team orientation VS "up-or-out" rat race, flexibility VS unconditional sticking to commitments, etc.) - not everything works equally well everywhere.

[TMC] Temporary market conditions are a true lottery - something very unreasonable to bet on (nevertheless - it would be unreasonable not to consider an unexpected opportunity). Treat it as a random surplus - not something given forever.

[CSK] Business  domain/company-specific knowledge is the trickiest topic in the list (by far). Let's try to illustrate it using the story of X:

  • during these 6 years in ABC, X had a chance to conduct several projects, "touching" everything ABC has under the hood - all the systems/applications with their quirks/undocumented features/tangled layers; that's how he has acquired all the "tribal knowledge" of ABC
  • in fact - X is a co-creator of a lot of theirs ... technical debt; and as he was always moving fast, he made himself a knowledge "silo", further strengthening his position as the only expert on several topics (some would say that sharing this knowledge has never been in his interest)
  • ABC understands that X is one of its most critical "resources" - knowledge he has will be very hard (/expensive) to rebuild & it would take ages to do so

Making bets

OK, and so what? What does it mean in practice - in context of making conscious career decisions aimed to increase your individual job market valuation?

[APT] & [ATT] are highly innate - it's possible to affect (/grow/develop) them (even by leaps) but it's rarely a continuous, foreseeable process (one you can plan, etc.)

[SKL] is a "healthy" factor that you can (objectively) impact/steer the most (as an employee who wants to earn more) - but it should not be treated as a simple function of your professional career's length in years. Examples?

  • if you've been developing embedded stuff in C++ for years but now you're pursuing a front-end position of a Vue developer (something you've never done professionally), your contextual SKL level (for the new role) drops significantly
  • if you're working on a long-term project/product maintenance within the same team, playing the same role, using the same tech stack, then probably you've learned a lot more during your first year (when everything was new to you) than in all the consecutive ones - variety of experience does matter a lot when gaining SKL, otherwise you may end up in total stagnation
  • of course there's always some common denominator between positions - a good back-end developer who've been using Scala can very quickly jump into a position of a decent back-end Python/Elixir/Golang developer - some knowledge is universal, there are similar patterns & challenges to be tackled; in other words: if you have strong engineering foundations & really deep understanding of technology, it will be easier for you to keep your level of SKL when changing positions

[CSK] is tricky - in certain conditions it may grow much faster than other variables mentioned above, nicely affecting your paycheck & ... self-esteem. But it almost never transfers between employers. Being a "knowledge silo" in one company is nearly useless in another one (even within the same industry), unless the goal is to weaken the competition ...

(Not so) good

What you (as an X) should do about it?

It's tempting to let the CSK grow - it's very beneficial short term, but it has a potential of crippling your career long-term. In time it will be harder & harder to leave. You'll trade development & market-relevancy for money - some may be fine with that kind of deal, but circumstances do tend to change ...

  • after few more years you may get so fed up with ABC, that you could suffer from a burn-down (or even worse)
  • ABC may go bankrupt (practically eradicating your CSK)
  • your "princedom" (domain of expertise) may get scrapped - system/platform may get replaced/decommissioned

My advice is rather to treat CSK as a (primarily) negative factor & heavily invest in the other variables (SKL, ATT). Always make sure that you keep learning something, that the environment supports this learning (there's someone to learn from), that you know what's going on in (local & global) community, that you're aware of how market-relevant your skillset is.

In addition: always do hedge your bets. Never restrict yourself to being a narrow, niche specialist ("I-shaped" person). Future belongs to generalists with one ("T-shaped") or even better few ("E-shaped") areas of speciality.

But... but money ...

It's not like I'm fooling myself - money is important. But it should (usually) NOT be the most crucial factor, at least not beyond some point which is achieved quite early in software engineering careers (after max. 2-3 years of a well-run career). I mean the point in life when you get 100% self-reliant (economically), live a life of decent standards in a comfortable dwelling, can afford typical financial burdens (like a mortgage or ... children) and at the end of each month you're left with some savings to accumulate for a rainy day.

There's nothing wrong in building your personal welfare, but it will be far more stable if you do base it on SKL, APT & ATT than on something as fragile as CSK or TMC. Based on my experience, if you do this right, it will be money looking for you rather than you looking for more money.