I truly wish I lived in the world you imagine. I've been in the job I'm leaving for 13 years, received top-tier performance reviews every year, constant improvement, very good software, technical lead of one of the most profitable teams in the entire (huge) company. Everyone who has ever worked with me directly has great things to say. Meanwhile the vice presidents of such-and-such that play musical chairs with their titles every 2 years do not care. I have made it very clear what they need to do to keep me (and it's not onerous, in fact it's mutually beneficial for everyone and completely in line with the CEO's vision), and they do not care. I'm not sitting in the right seat; I'm not already buddies with the right VP; so fuck me. I can go get fucked.
It honestly sounds like you either have no real-world experience or you've gotten extremely lucky with the company you found. If it's the latter, do whatever you can to stay there as long as it doesn't turn to shit (and it can, at any point).
Yeah, they aren't going to be the best with a specific company's stack, but they'll likely have a better perspective on how it can be improved.
There's some longer-term things you can only learn by being at the same company for a long time (such as "how to grow a startup from 1 to 100 employees" and what comes with that), but those things are usually outside the realm of what software engineers interest themselves with.
If you're spending more than 2 years at the same company, the only domain knowledge you're growing is that of how to be an employee at that particular company, and very little of it is very useful outside of it. Things like "I know how all these Facebook internal tools work inside-and-out". Cool, we don't have or need them cause we're a totally different company, now what?
Whereas a lot of even surface-level knowledge can bring a huge amount of unique perspectives and solutions. And my own most successful projects have been the results of combinations of experience in multiple domains at once.
And none of this prevents you from actually developing deep domain knowledge. For example, I have NOT held the same job for a decade and a half, but I HAVE been using Python (and other various software) for all that time, in a large amount of very varied situations, and I absolutely have "deep domain knowledge" there.
I built a full stack app in about 6 months, at one point, 5 years ago. (frontend js framework, backend js framework, SQL framework)
I now work for a company whose applications aren't much more complex than what I built, in terms of systems and complexity. Though the apps are definitely much more polished and with many more complete UX & usage options. It makes millions of dollars.
At least at most large companies which are lumbering, slow moving, where 60% of people contribute and 40% of people barely hang on by pretending to work
(largely because A. they don't know what's going on due to poor documentation and poor requirements gathering, and B. they aren't qualified in the skills needed for currently under development work).
As a solo developer, I move much faster and learn much more on my own, than I do at my current job. Why? Because I direct my own work, on my own projects. I don't have someone who has never built an application, who has a project/product manager title, trying to gather requirements for something they've never done before.
Not to mention that they've never founded an organization and led it to success. So, they don't understand how Apps are built, and the don't understand how Organizations are built and guided efficiently...
Combine this with a company that has a bunch of legacy applications and is now moving into somewhat over-hyped frameworks...
Yeah... Don't get me wrong-- I like the people I work with. I see a lot of under-qualified people in management who are slowing down the system because they can't efficiently organize people to do what they don't understand-- they have too many unknown unknowns in their ability to parse out upcoming work. Unfortunately, most of them were hired for currently-fashionable political reasons.
This is exactly what I’ve found. Most of my work is technically easier than my personal projects.
There are definitely parts that are far more complex, but the vast majority of the company isn’t working in those areas.
From what I’ve seen, if you want domain knowledge you have to dig for it.
So everyone assuming that I stopped learning anything new 12 years ago can fuck right off.
I'm not saying this to brag, I'm saying this to point out that all these assertions that "you should change jobs every 2 years or you stagnate" or "you can't learn your job deeply in 2 years" are both completely unfounded bullshit assumptions. It completely depends on what the job is.
The reality is that for a massive number of devs working for traditional businesses, there isn't all that much on the table. You can try to move up into the management caste and get big bumps, but you're only going to get incremental advancements.
I actually wonder if any companies have considered massive salaries to be a liability in litigation, because it could be pointed to as an example of unfair wages.
Anyway, you're getting a fancy management job, or some super elite dev job.
Similarly, I have worked at places that have had "good devs" who didn't have such image problems, that worked at places that did not understand (or appreciate) what it was that they had, and did nothing to keep them on the staff. "Whatever. It's hiring season anyway." After their departure, productivity suffered, and when points were reiterated (that were covered before the person left), the response was something along the lines of a timid, "Oh...I thought you were joking."
Your assumption is constructed around the idea that people will always do what is in their best interest, and be in a frame of mind to appreciate the "big picture" things. In my own experience, this is rarely the case. More often than not, it is a sort of miracle that even some very well-known places are able to stay in business.
I'm sure there are exceptions, of course. Some upper management really are very smart and "keyed in" to the value of specific employees output and are also in a position to do something about it. I would simply argue that those arrangements are significantly less common than you might be led to believe, and that such remedial, reactive measures are unsuccessful far more often than they are successful.
Just a thought!