Certain places place high value on domain-specific knowledge and trained employees.
I work at a wholesale insurance company (middleman); we have over a hundred individual systems, some simple, some quite complex. Some of those systems can be maintained by any programmer that comes in. Others really shouldn't be maintained by someone who doesn't have good experience in writing maintainable code.
But many projects require domain-specific knowledge---and not just to specific parts of and companies within the insurance industry, but _our specific company_.
For a few years, we hired less experienced candidates with the hope of training them, because the talent in Buffalo NY is hard to come by (which could also be an outreach problem, but our last three hires were from out of state). Our team's consensus is that it takes approximately two years of experience with our systems to have a good, balanced grasp on them. Because of the small team size (five at our highest, two right now), we place great value on team members who have been around long enough to know the systems, the rationale and design decisions, history, etc.
This relates directly to Peter Naur's concept of Theory Building.[0]
We've had the past four candidates leave in ~2, <2, <1, and ~3 years. Because of the upfront training cost and distraction from the more experienced programmers (the two that remain at the company today), and in some cases the degree of maintenance problems ("technical debt") introduced, I consider three of them to be a wash: we're no better off having hired them than we would have been not hiring them. Possibly worse off.
Because we have the tendency to lose employees at around two years, I'm no longer in favor of hiring more "junior" candidates---having to train in both domain knowledge _and_ general programming is too risky and hasn't panned out well. So hopefully we can hire programmers that can immediately get into the code from a general programming perspective, but it's going to take them quite some time to really understand what the systems are all about.
I've been there for over eight years, and the last programmer that remains with me has been there for six months longer than me. One of our programmers transitioned to technical director, and has been there for over ten years. My supervisor dropped programming for project management responsibilities, and he has been at the company for nearly ten. Our sysadmin has been there for over ten. We just lost an employee that was there over ten years. We're a close group. Would I be making more money job hopping? Probably, yes. My point here is that the company I work for---the team I work with---values experience with the company, and so long-term employment history is attractive.
If you could have made more money by job hopping, and your other programmers left for more money presumably, is your company really valuing experience?
It's very easy to say you value experience, but if you wont allocate resources towards employees with experience then your company is signalling that they don't actually value it.
There's an unfortunate difference between value at a company level and value at a team level---we have the hiring decisions as a team, and we won't hire without certain criteria we value.
The other programmers didn't leave for more money, though.
Your company does not pay more or enough more for people with more experience in its code base and domain knowledge, such that you and your coworkers will have better compensation when job-hop. That is the exact opposite of valuing experience.
> I work at a wholesale insurance company (middleman); we have over a hundred individual systems, some simple, some quite complex. Some of those systems can be maintained by any programmer that comes in. Others really shouldn't be maintained by someone who doesn't have good experience in writing maintainable code.
It sounds like you have far too few developers to cover those systems. My company is similar, although with much fewer individual systems. The biggest problem we have is that we expect developers to be familiar with all of them and it's simply too much ground to cover, especially when you add in decades of technical debt. I've been there over a year now and picked up almost no domain-specific knowledge because the cognitive load of all the projects and their intricacies and the constantly switching between them is just to high to learn anything in detail.
The second you aren't working on something your knowledge begins to fade. If I have to pick up something I haven't touched in three months then it's pretty close to being a new product to me.
> It sounds like you have far too few developers to cover those systems. My company is similar, although with much fewer individual systems. The biggest problem we have is that we expect developers to be familiar with all of them and it's simply too much ground to cover, especially when you add in decades of technical debt.
We definitely do. Unfortunately, it's difficult to hire in our area.
We've settled into our specialties, but that gives a terrible bus factor---the more senior the employee, the more the company suffers if they get hit by a bus. And goes back to the concept of theory building. We do what we can to try to mitigate certain aspects.
> The second you aren't working on something your knowledge begins to fade. If I have to pick up something I haven't touched in three months then it's pretty close to being a new product to me.
Yes---it's very useful to have people who have been there long enough to jog eachothers' memory. There are some core projects that are touched frequently enough to stay mostly fresh in our mind. It's always fun to look back 5--10 years and think about the history of the projects, or joke about the hardships. That's where the real knowledge lies.
I'm curious, how much more do you think you could get by leaving, or if you had been job hopping? Companies say they value loyalty, but that can seem fake if loyalty ends up costing the employee money.
tbh, I haven't had the will to job hunt, so I can't say for certain; I can only speculate based on data for my area. There are other positive factors that keep me at my job.
What I maybe _should_ have said is that I may have been able to make more money more quickly if I job hopped. There's an unfortunate disconnect between a development team that understands value (and is responsible for all hiring decisions) and a non-technical upper management. I'm fortunate to have a supervisor that fights on my behalf, and I'm pretty aggressive in pushing it myself.
So, you're saying that you get paid a lot more than you would make at other companies, and so do your other team members? That's what placing a high value on your knowledge would look like to me.
I work at a wholesale insurance company (middleman); we have over a hundred individual systems, some simple, some quite complex. Some of those systems can be maintained by any programmer that comes in. Others really shouldn't be maintained by someone who doesn't have good experience in writing maintainable code.
But many projects require domain-specific knowledge---and not just to specific parts of and companies within the insurance industry, but _our specific company_.
For a few years, we hired less experienced candidates with the hope of training them, because the talent in Buffalo NY is hard to come by (which could also be an outreach problem, but our last three hires were from out of state). Our team's consensus is that it takes approximately two years of experience with our systems to have a good, balanced grasp on them. Because of the small team size (five at our highest, two right now), we place great value on team members who have been around long enough to know the systems, the rationale and design decisions, history, etc.
This relates directly to Peter Naur's concept of Theory Building.[0]
We've had the past four candidates leave in ~2, <2, <1, and ~3 years. Because of the upfront training cost and distraction from the more experienced programmers (the two that remain at the company today), and in some cases the degree of maintenance problems ("technical debt") introduced, I consider three of them to be a wash: we're no better off having hired them than we would have been not hiring them. Possibly worse off.
Because we have the tendency to lose employees at around two years, I'm no longer in favor of hiring more "junior" candidates---having to train in both domain knowledge _and_ general programming is too risky and hasn't panned out well. So hopefully we can hire programmers that can immediately get into the code from a general programming perspective, but it's going to take them quite some time to really understand what the systems are all about.
I've been there for over eight years, and the last programmer that remains with me has been there for six months longer than me. One of our programmers transitioned to technical director, and has been there for over ten years. My supervisor dropped programming for project management responsibilities, and he has been at the company for nearly ten. Our sysadmin has been there for over ten. We just lost an employee that was there over ten years. We're a close group. Would I be making more money job hopping? Probably, yes. My point here is that the company I work for---the team I work with---values experience with the company, and so long-term employment history is attractive.
[0]: http://pages.cs.wisc.edu/~remzi/Naur.pdf