Ask HN: How can a junior dev maximize their income?
Let's say you are a junior dev that wants to maximize their income over the next 10 years, median outcome for someone capable of getting into a FAANG, not lottery tickets. What should you focus on?
ML+Python+Pytorch because it's hot right now? Java because no one wants to maintain legacy Java code but there are lots of it and the demand will be there? COBOL to take that even further? Node.js because it's popular? Swift because Apple will continue to dominate the high end? Practice and pass the tests to get into a FAANG? Go work for a high frequency trading company? Learn SAP?
Asking for a friend (TM). Seems like a particularly interesting time to ponder this question (again), with layoffs in tech all the rage and geopolitics looking a bit less 'steady as she goes' than say, 10 years ago.
90 comments
[ 14.7 ms ] story [ 259 ms ] threadIt depends what you mean by maximize. Any of your options will likely put you into one of the top percentiles of earners.
Don’t be a junior dev.
https://medium.com/zerotomastery/dont-be-a-junior-developer-...
Tech changes fast and nobody has a crystal ball which can tell you what will be hype in 3 years. But everyone knows that having a solid professional network and proof that you are able to deliver great products will greatly benefit your career as an engineer.
"Meet great people" isn't crazy hard either, literally just talk to people, and keep talking to the one you find great. If you have trouble talking to people, I recommend Dale Carnegie's book (How to win friends or something).
In my opinion this is a truly terrible path to choose, but you will earn more than anyone in tech who doesn't win the startup lottery.
i don't want to get shouted out by a bunch of coked up psychopaths.
Nowadays, it's quite different. Gifts have to be logged so people don't do it much anymore, metoo happened, and I can't really imagine another burger eating contest, even though that last one is fairly tame.
Those sort of problems are more on the product side, along with the regular slew of product development tech problems. On the infrastructure/platform side (where I work) it is remarkably close to "regular tech". Same types of distributed systems problems, database issues, CI/CD pipelines, engineering efficiency, etc. The "new" part here is working with the finance specific areas such as physical data centers and networking to clients, or domain specific items such as data retention for compliance.
There's quite a difference with what I think of as pure-finance, companies that aren't producing a tech product, but are using tech to make money with financial services, or betting on the markets in various ways.
As for the problems, I was once in an interview given a coding task of moving money around a network of companies based on tax rules. Fun.
Any reason why it’s a terrible path to choose? Am I stunting my growth? I was hoping HFT would help leverage me into a big tech company for systems level stuff since (at least I was told this as a selling point to get me to join) its tougher here so FAANG likes to see HFT experience. Is that not the case?
These reasons are not universally applicable, so see what fits your experience, but... code quality is often poor, internal practices often seem to leave a lot to be desired, company culture does not seem to be a focus, assholes seem to get rewarded.
You can probably get into big tech from it, but perhaps not at the seniority you might expect, or if you do you may find it a struggle to get onboard with industry norms around engineering process and company culture that are missing from a lot of finance companies.
Base on what I can gather from my friends who work in the space (DRW, Citadel) it's just more stressful and has more politics than my current role (ML Engineer @ a retail company). Trading income for work-life balance and stress, and maybe OP is hinting that as you progress down that track the WL balance and stress only increase.
Just my 2 cents and why I didn't choose to pursue that path.
I think people may be concerned because these days it's more niche, though it's still a very common language. Take a look at the job postings from the companies you want to join and see what skills they want. Get familiar with some of them, even if you don't do them professionally.
Get good at the Leetcode style questions.
Are you doing distributed systems work? Can you answer design questions like: design bit.ly, Twitter, or Facebook? There's a lot of info out there on how to solve these problems.
There may be questions about your ability to work with "big data". But that's also something you can pick up on your own, even if you aren't doing it at work.
Look for technically challenging projects at your job and solve them. Learn from them. Think about ways you could have solved them better with what you know now.
For juniors coming in, "messes of legacy code" probably isn't the best learning environment from a tech skills standpoint.
For more sr folks coming in to "message of legacy code", you do need to be a good engineer, because you may have to be working around a lot of stuff that can't be changed. You may not have version control. You likely won't have any sort of fancy CI/CD/pipeline process. You may not have tests (as the code is likely untestable in its current state).
All the best pay rises I've ever had involved finding someone willing to pay me a lot more for basically the same thing as I was already doing for someone else.
Barring winning the "pick the exact stupidly-overpaid technology of the future", banking on any particular technology would have done me far fewer favours than just finding new jobs paying more money.
Because every overpaying technology normalizes over time. Someone who is willing to pay more at this point in time, will always find someone cheaper in time next few years.
I'm not saying this is what somebody should do, but if you're only indexing for income, then it's the only answer IMO.
We considered someone’s career history a problem when they had several jobs of ~a year or less. Or someone interviewing for a senior position with 4-5 years of experience across 5 companies, for example. If those were the case, we were much more likely to reject them.
If someone (hypothetical) had 10 years experience, with a few that lasted 1-2 years, one that was only a few months, and maybe one that was 4-5ish years, then that was no problem at all. We wanted to be sure they had seen the consequences of their prior decisions, if they were coming into a high-mid or senior role.
When we did hiring, we wouldn’t be comparing candidates 1-to-1 like “Well A had this, but B was good at this, which one should we pick?” …instead, we would just say “ok we’re in hiring mode, keep hiring everyone who is good until we have enough for xyz goal”. So it wouldn’t be that CandidateA is better than CandidateB, but rather if they both met the standards, then they’d get hired.
Some of the qualifiers that mattered more than tenure for us were:
* are they capable of explaining technical problems and communicating
* do they understand algorithms at enough of a level that they won’t cause major performance issues
* are they polite and friendly, how do they respond to feedback
* can they build an architecture which handles expanding requirements
* how eager are they to learn and work on our tech stack + business domain
I haven’t interviewed juniors really, so I can’t speak much to that. But when we’ve hired someone less experienced, it would be the same requirements as above just with a lot more leeway on tech, and more emphasis on “eagerness to learn” + “receptive to feedback”
Does seeing things through, pushing through the hard bits, the bits that only come up after a few years when your pet project starts spouting fire or some major restructuring happens and not to mention loyalty doesn’t mean anything anymore?
This pragmatism is understandable, but I don’t think it’s a nice way to live. Of course to each its own.
Asymmetric loyalty is a dead end. Deriving your virtue and character from your job is also a fools errand and a myth that is perpetuated by anti-labor capitalists to line their pockets before they absolve themselves of equal social responsibility.
Build character and exercise virtue by making your community and family richer.
You may be spiteful, and perhaps rightfully so, against the powers that be, but it is ultimately futile. Who is in power is not up to us, but our response to it is.
Not preaching to you, you may be the most virtuous being in existence. Just mumbling in the wind here.
If you are a partner in a business, then walking away is not so easy and probably a lot less desirable (and still, "junior partner" is sometimes a trap).
Most people who work for businesses are "human resources", so let's treat employers as "income providers" and nothing more.
> let's treat employers as "income providers" and nothing more.
It's fine that you and many of you consider this to be an agreeable way to live. I'm just saying that it's not the only way and in my opinion not a particular desireable one.
Minority opinion here, but I am entertaining the vague and quite dangerous notion that with a bit of compromise from both sides we can have our cake and eat it too. The dangerous part might consist in accepting we are not all born for great works and some humility and acceptance might not actually be such a bad thing. Of course, in moderation as with all things, but I don't think modern people are in any danger of being too humble anytime soon.
I wouldn't be too hasty to dismiss such notions as "loyalty", because "trust" is quite close and it might just be a fundamental driver of human civilization.
What sort of compromise are you thinking of? I get the impression that workers have done a lot of compromising (involuntarily) in the past decade or two and bosses have not.
The idea of a co-operative has always been appealing to me, but having encountered and worked with a lot of real live humans my idealism regarding that is pretty much shattered and in practice I suspect it would be very frustrating and fairly short-lived.
Personally I ended up as a business myself, I have clients rather than employers. It's far from perfect, but it feels more honest and 'real' somehow.
Thing is, without sounding too negative, because my team mates are all good people, but I have seen some negativity in them along these lines that in my opinion is uncalled for. Without proper care it is easy to fall into a black and white, purely transactional relationship with your employer. To be completely honest, I myself have fallen for it quite some time and it made me deeply unhappy.
I speak to the “bosses” perhaps on a different level now and it’s not like they are living to grind their staff into dust. There is a complexity to their job as well and it would perhaps be enlightening to keep that in mind even as an “employee”.
Perhaps my idea of compromise is that you, as an employee, need to come to terms that you might not be perfect and that there is a lot you do not understand, but that is OK. Try to do a good job and don’t point fingers (“they started!”). Try to imagine how your “boss” feels. We are all humans trying to do an adequate job, barring some pathological types. Not to make your boss happy, but yourself.
But I am rambling too long now. I of course need to add here that exercising wisdom is crucial: don’t let yourself be abused. Everything depends on the circumstances and they are always complex.
Edit: btw I work with small businesses and those are a completely different game than, say, Adobe. I still think the general point about trying to do good without falling into pure transactionalism is helpful.
> Perhaps my idea of compromise is that you, as an employee, need
> to come to terms that you might not be perfect and that there is
> a lot you do not understand, but that is OK. Try to do a good
> job and don’t point fingers (“they started!”).
I think this describes most people already. I mean, I've encountered some prima donnas but that problem solves itself eventually (they flounce off). I'm not sure what you're suggesting ordinary employees should be doing that they aren't already, and what it would cause their employers to do differently?
It's a good point about small businesses, I much prefer dealing with them to bigger firms. If my point of contact is one of the directors then everything flows so much more smoothly. (Smallest direct client had 7 employees, biggest I think about 200K - very different experiences.)
When I refer to "the bosses" I really mean the set of people at the upper layers of larger companies who, week to week, have no contact with staff who are doing actual productive work - their subordinates are managers, and the subordinates of their subordinates are also managers. They're insulated from, and often unaware of, the effects of their decisions - they probably don't consciously intend to grind their staff to dust, but everyone they talk to is happy and the numbers look good so surely everything is fine.
Further down the chain you've got a bunch of middle-managers with no investment in the overall good of the company and no power to really improve the conditions of the workers beyond passing messages up the chain, and the truth in those messages is filtered and transformed with every extra layer of people. Nobody wants to tell their boss stuff he/she doesn't want to hear.
Of course a reasonable explanation for why a person has turned over jobs so many times can negate the concern. It really depends on the candidate. My point is that someone early in their career needs to recognize that there are both upsides and downsides to switching jobs frequently.
Companies don't expect people at the beginning of their careers to stick around for long.
The other benefit is that you get to experience a broader range of environments and technologies, which is good for everyone.
When I look up the org chart, the people higher up have been at the company 5+ years. Moving into the higher roles requires the right opportunity, which often takes time to find. Those "right opportunities" are rarely given to people new to the company and are often used to retain existing high performers.
Certainly if you're stuck in your career and are not on a growth path, jump ship. But if your job is promoting you consistently every 2–3 years, then I'd stay.
Perhaps there is an argument for getting to the "staff" level quickly, and then hop around more as it's harder to advance past that level?
As far as reaching staff and then jumping ship, I have no idea. I started my career 10 years ago and at the time, I thought "senior" was the highest option, but then staff role got created.
I wonder if in 10+ years, the IC ladder will get taller, so people don't feel "trapped" at staff level.
I would recommend having at least one stop where you spend more than a year or two, just to show that you can get past the initial ramp up period. This avoids having a red flag on your resume, but that may be old fashioned thinking.
The original stipulation is someone with the skills to get into a FAANG, so I'll focus less on that. I'm also going to ignore quality of life considerations.
Cynical ideas, with a slant towards making the most money: - Don't be afraid to move, or take advantage of working remotely.
- Get a job that pays Silicon Valley money / RSUs but then move somewhere cheap.
- Pay more attention to potential stock benefits, that's where the bigger money can be.
- When the market is running better again, jump to a company that should go public soon. This way you get the most shares with the least personal risk. If you get good a guessing who the "hot" company will be, you can do really well.
- Companies aren't allowed to say when they're going public, or their stock may disappoint. Switch and try again if you've guessed wrong.
- Don't stick around past your initial stock grant (generally 4 years).
- Keep an ear out for the hot new tech / VC focus, and learn enough of those skills to get hired.
- Get good at interviewing.
Note: this is what's worked in the past, future conditions may be different.
NETWORK NETWORK NETWORK, hop jobs every one to two years and make sure each of those jobs comes with a salary increase greater than what you could get via the promotion ladder at company you are leaving. Be a good enough software developer that you can switch tech stacks at will. Learn the software engineering (design patterns, how to communicate with stakeholders, etc) and language design / compiler / networking fundamentals (so you can easily switch programming languages / stacks).
Beyond that, certain subsections of the tech industry have higher salaries so network with people in those subsections.
Also just to be clear, the point of networking is so when you hop jobs you aren't applying to random jobs, you are being referred by employees at other companies.
By 'growth' I mean increasing headcount (perhaps not the best period right now...). If you're in a company or team that has no plan to increase headcount then opportunities for meaningful promotions (expanded responsibilities and scope) and salary increases will be almost nil.
That said, there are a few "meta strategies" you could consider
1) get really good at learning and hop from hot thing to hot thing
2) do the jobs that no one wants to do that also pay well (mainframe maintenance, documentation, sales?)
3) get really good at soft skills and put yourself in positions like management where a lot of your staying power (and income) comes from the relationships you build and maintain
Complain to your tech friends about tech while making new tech friends - one day they might work somewhere you want to, too.
I would honestly advice them to change their mindset from trying to maximize income, to maximizing learning. So instead of finding a job that pays a lot, find a job where you learn a lot. Over the long term you will earn more if you are highly skilled.
The second least relevant part of this question is how geopolitics and current "layoffs" factor into this, as those are largely a product of bad management, and extremely isolated. They won't matter in 6 months, let alone 10 years.
If you are a smart and driven person, then software development is not going to be the best way to maximize your income. Get out of software and into finance, and/or get an advanced degree (MBA or law) from a prestigious university (M7 or T14). Ideally combine finance with an advanced degree, and work at an investment banking firm.
You won't be able to compete with the best individual contributors in software if you only care about cash, and in a hard(er) science field that becomes obvious relatively quickly. In finance, caring about cash is the passion, so that drive to make money will serve you better there.
On a 10yr timeframe the decisions you make will be very different than 20yrs. For 10yrs, your best bet is probably finding the highest paying Senior/Staff role you can then staying there. For 20yrs, even if it takes you 15yrs to become a Director you will probably earn more than your high paying IC role.
20yrs gives you time for things to compound (Skills, network, etc). 10yrs does not really afford you the same time. You'll probably be jumping around jobs to maximize short-term TC instead of building and compounding on long term things.
2) Considering you are talking about tech stacks, I don't think you have a good framework for thinking about this question
What dictates compensation? Generally the scope and responsibility of your role. Nothing to do with tech stacks unless you have an incredibly niche skillset.
I don't think this question is that interesting. Play long term games and build long term skills. On a long enough timescale things like tech stacks are effectively fads. Relationships with other people and skills like being able to lead people are always going to be valuable.
And since you have 10 years, you might also want to invest that discretionary income. (A well-diverisified portfolio is pretty low-risk. And with interest rates as high as they are, you can also get some guaranteed/fixed-rate returns that are pretty high.)
Joining hot new startups or VC propped companies may or may not be worthwhile. Is there a point of learning the latest FE frameworks or some new backend language? Companies will be risk averse. Hiring across the board might be tighter for the next couple of years with less roles so Leetcoding your way to a FAANG job might not be enough.
OTOH, the changing landscapes and uncertainty could lead to massive breakthroughs, initiatives and opportunities ex. (LLMs, AI, AR/VR, emerging markets in lesser developed countries, Renewable) etc.
2/ interview a lot, move jobs when you see something better
3/ assume the expected return on stock options is zero
Stock in public companies (might be called RSUs) is pretty close to income. Even gets taxed like income. Stock in private companies is not like that. You can't sell it without the company agreeing, at which point the company sets the price as they see fit.
this is an economy of owners and renters, you will be one or the other
so buy an income property to rent out, etc
otherwise, you are always just someone who works for someone else
people who try to succeed just based on their salary will be disappointed unless it is a mammoth salary (becoming more rare in sw)