"Companies advertising outdated stacks open you up to the risk of building the wrong sorts of skills, which can have far-reaching effects on your career." (Emphasis mine.)
The wrong sort of skills? Like adaptability, strong diagnostic skills, pragmatism, self-awareness, and not being a massive diva all the time? Although it's true that these things can have a far-reaching effect on your career.
Every company that's been around for a while has legacy code and you need to lose the fear of working with it. You also need to develop enough humility to realise that the code you're writing today is tomorrow's legacy.
Having code that's lasted long enough to need maintenance is a sign the company has at least some grounded-in-reality fundamentals. The projects that fell apart upon learning the business model was untenable or the technical or social problem insurmountable, generally don't need maintenance programmers.
Staying a little off the bleeding edge also lets you focus on quality execution, rather than chasing the trends. Sometimes the eventual best practices aren't even offered and understood if you're adopting a platform or framework too early. Nobody wants to hit a "drop everything and rewrite because there was a huge API shift" moment.
Nobody wants to hit a "drop everything and rewrite because there was a huge API shift" moment.
No business owner or manager wants that. I know lots of programmers for whom any excuse to throw away everything and rewrite from scratch is basically Christmas. Some of the more unscrupulous ones might even try to engineer unnecessary excuses to do just that.
Oh, I’ve seen executive leadership fall for unscrupulous/ignorant consultants pitching a “burn your stack, move everything to the cloud/LCNC/SaaS, and fire your developers” approach. Invariably either the company or the CEO’s tenure expires.
Yeah, it’s the inherent tension between wanting a client that knows they’re in a crisis, and the fact that companies in a crisis might not be able to pay you. Yes, they’re ready to make the hard decisions; no, they might not have the financial and operational latitude to actually do so.
I think maintenance may be growing on me, but making a judgement on whether it's a good thing is certainly multivariate.
While high turnover is almost always bad, low turnover on legacy projects might mean that critical parts of the infrastructure have been locked up by ideologues. It's not automatically bad but you should very certainly ask some pointed questions in this area. A yellow flag, if you will.
I once took a personality test. One part of it corresponded to product lifecycle: 1 was initial conception, 2 was prototype, 3 was roll-out, 4 was major enhancement, and 5 was maintenance. My personality is that I prefer prototype to roll-out. (In initial conception, there's too much uncertainty for my taste - everything is possible, but nothing is nailed down. And maintenance is boring.)
My point: You don't have to give a rational explanation of why you prefer maintenance. You can do so from your perspective, but it won't translate to those who, due to their personality, prefer other phases.
But if you want to say that projects that made it to maintenance should have money available to pay you, then yeah, you've got a point that transcends personality...
I think it depends on the developer's focus. The project I maintain was written by people who were network programming enthusiasts, so it has a number of different TCP-based transports, some of which are no longer maintained. It's made updating TLS a pain.
Yeah, this is weird. I feel like it's talking about specializing in a math subsubdiscipline, or surgery on a particular piping of a particular model of Soviet-era rocket engine.
Tech stacks aren't that hard. Especially when it comes to web frameworks. To me, maintaining legacy stuff in legacy technologies requires primarily grit - the ability and patience to wade through unique and idiosyncratic mess with a debugger and come out alive on the other end. The fundamental skills of a developer, and even the fundamental technical challenges, don't change that much between frameworks or even programming languages.
The primary danger of being in legacy tech to me is having wrong keywords on your CV and getting auto-filtered when applying for a new job. I know businesses would love to immediately hire experts in their particular tech stack, but let's not kid ourselves - the stacks are trivial compared to learning the processes and code at a particular business. I don't see why a competent Angular developer wouldn't be able to pick up React in the inter-job period to the level comparable with what that person with "React" on their CV has.
Assuming what I wrote above is true, then note that hacking around outdated CV keywords is a much different problem than mitigating those "wrong sorts of skills" working with non-fad tech would hypothetically give you.
> let's not kid ourselves - the stacks are trivial compared to learning the processes and code at a particular business.
True. We're primarily a .NET/TypeScript/React/SQL Server shop but I'm happy to consider anyone with some experience of a C-like language, and some web development experience - it's also not necessary for these things to overlap. Beyond that, if you know what a database (of any sort) is I'm basically happy.
It's hard enough to find people who can program well in any language without making life even more difficult for yourself by adding requirements for N years experience in a given framework or technology.
I call this having "Complimentary" skill sets. If an OO shop, Java vs .NET and Ruby/Python etc. Hire for smart, ambitious, willing candidates that fit in well with the culture. I've seen people switch tech stacks very quickly, especially when there's established patterns in the existing code base they can pick up on.
I think programming language/tech stack is about 8th on my list of deciding on where to work, etc. (This just inspired me to do some writing on the subject, since I've delivered systems in most major tech stacks over the years.)
> The wrong sort of skills? Like adaptability, strong diagnostic skills, pragmatism, self-awareness, and not being a massive diva all the time?
Yes, the wrong set of skills. If the market is looking for, say, React devs then you'd be a fool to accept a job where you are expected to work with, say, Delphi or AS400. Yes, maintenance jobs working on old established services are enough to make a living and even a profitable one, but let's not fool ourselves into believing that your odds of being the top candidate in today's or tomorrow's high-profile projects will be greater if you waste your time in outdated stacks.
The market? What market? There's more than one. There's a market for React devs, and there's a market for COBOL devs. You look at the React market, and you see that it's growing. But so is the pool of React devs. The market for COBOL devs may be shrinking, but the pool of COBOL devs may be shrinking faster. Which is the better career choice?
And why do I care about being a candidate for a high-profile project? Pay? Yes, there can be good pay - along with lousy work-life balance. To steal a line from Agassiz, I cannot afford to waste all my time making money.
And why is an out-dated stack "wasting my time"? Do you have a utility function for my time? I deny the validity of it. I would say that chasing a high-profile project in React is almost certainly wasting my time.
Yep you're right as much as I wish it wasn't the case, if two candidates were identical except one had skills in cutting edge technology and the other had skills in older tech I would pick the newer
May just be the business we're in but I feel going with the old limits your breadth (but maybe with a higher price tag? COBOL?)
You wouldn't choose a top-tier React & AWS dev if your veteran Cobol dev had just died of old age and your business-critical Cobol & SAP monstrosity needs urgent changes to handle this years's tax compliance updates. In that situation, you'll pay the $20000/week or whatever oaiey quotes you.
All right, so maybe you feel bad now about not listening to the engineering team and maintaining a continuous migration of your business-critical code to modern platforms over the last 30 years. But that's all in the past and your million-dollar business will be shuttered by the tax authorities in three months if you don't get this sorted out right now.
Maybe we'll have a world one day where everyone knows the "obvious" fact of technology leadership that everything should be continuously migrated to the state of the art. But maybe we won't, and maybe this fact isn't obvious at all, or even correct. Who knows?
In the meantime, people with skills that have an extreme demand/supply factor can command the highest rates, even if they won't be hired at tomorrow's startup. That's not to say it's a bad idea to learn current skills (for diversification), and definitely say no to working with legacy tech for small money, but that's really an orthogonal point to the one oaiey was making.
> In that situation, you'll pay the $20000/week or whatever oaiey quotes you.
I looked into this recently, because I wanted to see if it would be worth learning COBOL to help maintain old banking systems. Unfortunately the pay is nowhere near $20000 / week, and experienced COBOL programmers typically make around $100 per hour, or $70k per year at a full-time job. Right now you can make much more money with modern web and mobile development.
I was surprised to hear it was only $100/hr, but some people say it might go up to $1000/hr, and one person was making "high six figures". So I don't know. Maybe it's worth getting into if you have some good connections.
I hire about 150 COBOL guys and gals (as full time employees) and they are making in average 100k€ (European Bank) incl. 1 month holiday.
Big brand contractors cost us around the same.
DBAs, Sys Admins, operators, a bit more.
Having 30y experience myself, from mobile and Java to Mainframe Assembler, I find the older guys - both on mobile (few) and COBOL (most) to be much more focus on engineering a system that lasts whatever you throw at them, while (most, not all) young coders are about speed and hashing something together that works (but needs overhaul after 3-4 years).
Just my own experience, not saying is the only perspective.
> I find the older guys - both on mobile (few) and COBOL (most) to be much more focus on engineering a system that lasts whatever you throw at them, while (most, not all) young coders are about speed and hashing something together that works (but needs overhaul after 3-4 years).
I've noticed that tendency in younger developers too and it's utterly infuriating. Do you do anything to discourage this and, if so, what?
Not the person to whom you replied, but: mentorship. Code review. Talk about means, not just ends.
I was fortunate to be a young developer with a desire to write things that could last, so I skipped a few steps and found myself doing the mentoring perhaps sooner than most, but instilling the notion that this thing needs to continue to function, and rejecting work that isn't in service of that goal, is doable.
> Yes, the wrong set of skills. If the market is looking for, say, React devs then you'd be a fool to accept a job where you are expected to work with, say, Delphi or AS400
Only if you expect to leave that company in the next few years like an SV-style webdev. Some of us like the stability of working for an organization where employment time is measured in decades.
Honest questions: what has that stability done for your career earnings? And what does that do when your boss decides you aren't needed anymore?
I ask because I tend to find that we are generally incentivized both to stay on the leading edge and to, if not running a consultancy, to be regularly moving on to new positions. And it is rare, to the point of IMO barely worth considering as a possibility, to find a company that won't get rid of you given half a chance if it makes short-term numbers better.
If your goal is to make as much money as possible, then you probably have to live in that mutually predatory environment, but if your goal is to have a more stress-free existence and feel like your work is actually helping people then there are alternatives.
I have little fear of being laid off at my company because they didn't even lay anyone off during the last recession. It isn't publicly traded, and has a very flat managerial structure, so the typical 80s-guy bullshit doesn't really fly here. We don't make software and get our revenue from selling ad space, we make real things for real people and we charge real money for them.
> but if your goal is to have a more stress-free existence and feel like your work is actually helping people then there are alternatives.
I've interviewed devs with over a decade of experience who clearly opted for a stress-free existence feeling like their work was actually helping people, and now here they are in their mid-40s looking for a job with an obsolete skillset and an obvious track record of not adapting to changes.
It's great that you lead a stress-free life in your 20s and 30s, but how do you expect to cope with the problem of being obsolete and useless and no better than a 20yo fresh out of college (and in some regards far worse) when you reach your 40s and 50s?
When I see someone's resume who jumps from engagement to engagement I usually sort them out. Not a good sign. They learn on my cost and jump as soon as responsibility kicks in. These people have to make career somewhere else.
I mean, that's fine, but you also kinda gotta understand that that is exactly what the industry rewards. If somebody's there longer than two years, there is a very real chance that they have passed up at least one significant salary bump (up to a point, of course, it doesn't continue forever).
If you're offering 10%-a-year raises, etc., what you're saying makes sense to me, but otherwise people are going to leave because it's stupid and self-harming not to.
This isn't an experiment that can be run both ways, but I find it seems to work. I've been here 13.5 years, starting from about 5 years of prior experience. Increases are irregular, but look to be about 7.3% compounded per year. Note that the earliest years of my career are excluded, which is when you'd expect to see the largest increase.
I've never seen layoffs. A person who regularly moves on is quite undesirable, because they would leave before being useful. It typically takes a year before we can really put somebody to use, and two years isn't uncommon.
Yup. My last job was at a large corp and one of my previous managers was in his late 50's, having been there since he graduated college. He was a bit of an exception, but we had many people in their 60's & 70's who had been there for decades.
Both major organizations I've worked in have had ridiculously low turn over and everyone I talked to in both had the assumptions of everyone being lifers. I only left the first because I was tired of doing maintenance on old technology and wanted to experience new dev.
I agree that maintenance shouldn’t be feared but you do need to be cognizant of the risks of being shoehorned. If you’re “the cold fusion expert” this will probably not be rewarded by chances to work with new things (or often even the replacement for that CF system) because they probably have a long backlog of things you can do faster than anyone else. If it pays well, that has upsides but only as long as that system is around: you shouldn’t assume loyalty when they replace it and it’s definitely cause for concern if nobody else in the area is hiring for those skills since you’re one corporate restructure, merger, bankruptcy, etc. away from having to retrain in a hurry.
I think this is also a good area to contrast the two things listed: tons of places have jQuery, it’s still actively developed, and it’s relatively straightforward to replace incrementally whereas CF is proprietary orphan-ware prudent shops have been migrating away from since the late 90s, when it became apparent that they were only indifferently supporting it, so you’re one unpatched bug or Adobe management whim away from a messy forced migration.
I'm not sure the OP was so much fearful of working with legacy code, but rather fearful of corrupting the resume to the point it makes you un-marketable as a programmer.
When making hiring decisions many organisations put great emphasis on the specific skill sets detailed in the resume.
As such it can become dangerous if you end up with a resume dominated with legacy coding skills.
There's always another side. Some programs only need maintenance because they work very well and provide a great deal of value to the company. Others only need maintenance because the organization that develops it is chronically underfunded, can't attract skilled developers, and/or is led by incompetent management, so it needs so much maintenance that it almost all they can afford to do anymore.
The former kind of project teaches you valuable lesson. The latter, however, teaches you skills of dubious value, such as NIH-driven development, playing political games to deflect bugs on other teams, and dealing with bugs in dubious ways (stuff I've seen: detecting corrupted writes to flash devices and correcting them by re-writing corrupted sections until all writes operations are successful).
Thing is, if you do this stuff for too long, your mastery of skills that you need to work in healthy organizations tend to decline.
"Companies advertising outdated stacks open you up to the risk of building the wrong sorts of skills, which can have far-reaching effects on your career." (Emphasis mine.)
The wrong sort of skills? Like adaptability, strong diagnostic skills, pragmatism, self-awareness, and not being a massive diva all the time? Although it's true that these things can have a far-reaching effect on your career.
Every company that's been around for a while has legacy code and you need to lose the fear of working with it. You also need to develop enough humility to realise that the code you're writing today is tomorrow's legacy.