Ask HN: Have you successfully done a career do-over, and how did you do it?

243 points by ccdev ↗ HN
I'm not talking about switching professions at some point in your life. More specifically, doing your career over again in the same profession, in order to redeem your past failing career.

Either you got "too comfy" in your job, didn't learn much, then found a very tough time being a good fit for other jobs. Or you simply have stopped being a good hire for other reasons. What did you do to redeem yourself in the eyes of your respective industry?

179 comments

[ 3.4 ms ] story [ 221 ms ] thread
Get another job. “Stopped being a good hire for other reasons” makes it sounds like you’re experiencing a lot of rejection. Finding a new job is a numbers game, but also the more you search, the better you get at interviewing. Don’t give up, treat your job search like a full time job, be diligent.
(comment deleted)
I believe this is a time when a lot of software engineers are asking the hard questions about their careers.

Here's why: The technologies have become simpler and the barriers to entry have become low. Once upon a time, if you knew the mainstream languages (C++ and Java) it meant you paid your dues learning the hard stuff. Today, with nodejs becoming mainstream, and the cloud at the backend, developers who come from an "html programming" background can now build scalable and enterprise grade applications without breaking a sweat.

That leaves the "hard core" dev in a little bit of a fix. "Where do I go from here?" The front end is where the complexity is today. Its hard to compete in the AI and machine learning roles when there are phds doing this for ten years who are on the same table. Devops is also simple enough for someone with 3 years of experience of be on top of the game.

Now add to that the fact that the number of devs with 8 years of experience (what I consider the senior dev) grows bigger and bigger each year..

The next slow down I believe will be brutal to our industry.

I'm not sure I agree with much of that. I still think there is massive complexity in this industry.
Back at the start of my career, a decade or so ago, my grandfather used to tell me all the time that programming was going to be a dime-a-dozen job. I brushed him off as being a crazy old man but he wasn't entirely wrong.

Your post does a pretty good job hitting all the points. The bar has become so low. I guess this is generally a good thing, but definitely stings.

I've started to reach what I perceive to be ceiling salary and difficulty wise. I'm genuinely unsure of what's next in my life. I'm certainly not perfect and have tons to learn, but the gradient is not as steep as it once was.

>developers who come from an "html programming" background can now build scalable and enterprise grade applications without breaking a sweat.

This is a popular misconception but inaccurate nonetheless. It may appear that way at first glance, but there is still more to building "scalable and enterprise grade" stuff than just cobbling together a bunch of off the shelf components.

(comment deleted)
It's possible - but not without breaking a sweat. Coming from "HTML programming" you are looking at many years of experience and learning to get to that level despite how good tooling has become.
I agree with your conclusion, but I think it is due to a different pathway. Fewer developers will be necessary as code-sharing and packaging has improved and standardized. Trust me, people just entering development are still pretty terrible.
> developers who come from an "html programming" background can now build scalable and enterprise grade applications without breaking a sweat

Give it five years or so as the business needs of those companies change and the codebases become more and more expensive to maintain. :)

Focusing on the technological complexity is a bit of a red herring, at least as many problems come from having to keep up with the complexity inherent in dealing with an ever-changing "real world." Usually you can't just flip a switch from A to B, you have to support old workflows/clients, new workflows/clients, transitional modes, etc.

We don't have any real sort of "engineering standards" for software development. Unless/until we find those, it's very hard to claim that the workers will be reduced to interchangeable cogs. We don't really even know what those cogs need to do to make sure a codebase doesn't become a big mess, today, based on the codebases I've seen.

Without that, developing meta-/organizational-/design- skills, instincts, and creativity can be very powerful. Being able to sell that effectively without necessarily having to aim for management positions might be a bigger trick, but it's hardly impossible.

But even if you try to make your calling card something like e.g. a "node.js+AWS stack" expert, you've probably got a significant amount of future work at least in maintenance for all the companies that build themselves on that stack today. Maybe that's not what you want - in that case stay on the new-tech treadmill if you don't want to do more design/architectural/organizational stuff - but it's something that will be needed, at least.

A software engineers competitiveness comes from more than just familiarity with some languages and frameworks.

The ability to quickly learn and adapt is in my opinion an important part.

I disagree with some of your points. Firstly, being able to crank out simple web apps doesn't translate to building large systems that solve hard problems. There's a huge gulf there that can only be bridged by experience, and lots of it. Secondly, and this also speaks to experience, simply having worked in a "software developer"-style job for some number of years doesn't convey the experience needed to solve hard problems. Let's face the following inconvenient truth: there are many people who "get into coding" in order to find a job which will pay them a reasonable sum of money for life. Some folks use the term "lifers", which I personally consider derogatory, although there's some truth to it considering that it serves to differentiate those of us who're in this for the joy of craftsmanship from those who simply want a paycheck. Even more remarkable is the fact that the two extremes aren't mutually exclusive. Speaking for myself, I really really really love what I do, but I also enjoy the economic benefits that my profession affords my family.

If anything threatens software engineers, it's probably the rise of automation capable of making the "basic web app" people obsolete. I snigger at myself when I contemplate some kind of AI which could do this, although the idea seems less crazy when viewed in the context of many companies and individuals who have attempted to create a "build anything fast" framework/service/ecosystem/etc. Perhaps it does take an AI.

Otherwise we're pretty safe, methinks. Carry on, no need to try for a career change, unless you're really sick of the job itself, in which case the world is your oyster.

This isn't true at all. The state of the situation is tons of people are trying to switch over to web dev and given enough time and effort anyone can become competent at building large systems and solving hard problems. That huge gulf is huge but the gulf is shrinking at an incredible velocity.

The supply of human software developers is increasing at an incredible rate. You don't need a degree in software to do software. I would say roughly 40% of software devs now have an actual software engineering degree. Heck, I'm working with a guy who has a degree accounting and went to a freaking bootcamp for six months. He got lucky and was able to pass the hiring managers' little software puzzle (DFS problem) and he's now a full-time developer.

Today, with nodejs becoming mainstream, and the cloud at the backend, developers who come from an "html programming" background can now build scalable and enterprise grade applications without breaking a sweat.

That's complete nonsense. As a system grows, so does its complexity. And no amount of libraries and fancy languages can turn a complex distributed stack into a simple straightforward thing. If you you have deep knowledge of whatever you're working on (be it the deepest ins & outs of C++ or nodejs), you're worth your weight in gold.

It's OK, I agree with you. But, is there any way to join Swedish mafia? I want to improve my CV.
You need 10 years of tensorflow experience for this.
If you know C++ well, definitely recommend taking a look at embedded software/firmware development.

If you look at an embedded project using a micro controller the embedded environment is still space constrained by available onboard flash and RAM.

If you want to move up the stack and look at a raspberry pi/beaglebone type project, the development environment is very much 'DOS/Unix' command line application based with minimal requirements for browser stack development.

An example might be the drive control for a self driving car or battery management for an EV car.

The pay isn't that good. Web is were the money is at.
Truth. In my market, embedded companies are looking for top tier C++ talent but paying 2/3 of what you can pull by being a “backend” guy, and 1/2 of what you can get by having “blockchain” or “AI” on your resume.

Same companies complain how it’s not possible to find local talent, and hence need to be able to hire cheaply from overseas.

> Devops is also simple enough for someone with 3 years of experience of be on top of the game.

You make some good points, but I want to drill down on the above. What do you define as "devops" in the above statement?

I think you made a good point. I am myself in the same spot with 10 yrs of exp. finding it difficult to figure out where to go from here.

The barrier of entry will become even more low to a point where building apps is no longer fun. I am looking for something which is a bit more complex and has high barrier of entry. I don't know where to go from here honestly.

Yes, it is easier to build a TODO-list app today than ever before.

No it is not significantly easier to build a fully-fledged software business.

What is expected and required has also scaled up immensely. You can't just drop a Java SWING GUI on a simple tool and put it on a website with a PayPal link and wait for search to bring you business anymore.

It is getting easier to enter and it is getting harder to establish a sustainable business. We see a trend towards bi-modal development in SW as we see in other parts of society. Quite possibly the change is happening faster these days.

What may well have become easier is maintaining an edge as a business in the industry provided you have reached enough scale to leverage low interest rates, tax engineering, global aligned trade frameworks and low cost labor.

As someone who teaches Intro level students it can actually be a bit more difficult to get started. Not always (there's stuff like LightBot, Scratch, and Alice), but it used to be that HTML + JavaScript was a pretty good way to start.

Nowadays, programming for the web can involve:

* HTML

* CSS

* JavaScript, client-side

* JS framework(s)

* server-side language (possibly JS / Node)

* SQL

What's really messed up is you can choose PHP for the server-side (say) and end up with a single file that contains _all_of_those_languages_.

(Yes, you don't need to use them all at once, but even if you do the classic HTML+JS w/ document.write()'s your students are going to push you for the cool stuff they actually see 'in the wild')

This is not to say that you can't get started (and there's a lot of material out there to help motivated people) but depending on where you start the stuff you need to learn can be surprisingly voluminous.

The expected output of a software engineer will always be based on the ability of the average engineer. As technologies make some areas easier the bar will just be raised in other areas. It isn't like employers will just pay the same amount for someone with less skill doing less work.

So NodeJS is easier than previous server technologies, well the role of a pure back-end developer has evolved to include dev-ops, db administration, security, Q.A., automated deploy/testing. Front-end development is also more complex than ever before, if you only have an "html programming" background, you are going to have a pretty difficult time setting up a modern transpiled web app using on of the JS frameworks.

i am somewhat bemused that this got 38 upvotes in 16 minutes. i have no idea how hacker news' new page works.
It means there's lots of eyes on the article and the folks agree. No surprise there.
The 72 votes in 38 minutes as of now means that the few who upvoted it from the /new page are being validated by the general community after it got on the front page.
This industry is the very definition of career do-over. Every 5 years or so we change our activities. No one writes code or design like 20 years ago. With a career of 50 years, we are all doomed to have to change.

Adapt over time. Don't just jump. Take on new responsibilities. You will find experience crosses many fields. It's a lot about domain knowledge (e.g. financial industry) and we carry a lot of stuff over with us. Never undersell yourself, experience is king. Always be keen on learning, asking questions to younger self. Cross pollinate, experiment and be curious. Too many old devs just corner themselves. They shouldn't, they have a gezillion experiences and it always comes down to a race condition ;)

Well said.

Stay flexible and keep learning. I like the 4% rule: keep increasing the difficulty of a daily challenge by 4%, i.e. keep pushing your self to reach higher and higher.

The industry only changes superficially. The fundamentals stay constant. Don't master languages; master the fundamentals.
It's all about latching on to domain expertise. Rarely is a developer a pure technologist, there is always some niche you've become involved in whether it be related to payments or UX or a subset of businesses functions. Assuming you have some meaningful knowledge of something non-technical, you can take that with you into a different area of software development.

I've transitioned across various technical roles by understanding software architecture, business process mapping, master data management, manufacturing, and a slew of other relatively niche areas of domain expertise. I don't think my work was anything unique, I was just aware of the niche components of the projects I worked on and did a good job marketing that knowledge.

That's right. Its about domain and specialization. I'm 48 and have a really good remote gig b/c I've got about 10+ years in one specific enterprise software domain. Interviewing for mainstream technology generalist job is where you get hammered with the Google-style interviews.
I am trying to specialize more in graphics, though I still have to figure out how large is my skills gap between "doing solo graphics projects" and "full-time graphics programmer", especially in math. After getting advice on my resume on how to hide the slow career growth, I've been told to spin it to show I am interested in this niche and show direction towards that.

If you had been able to read my un-revised resume, it would probably read like a story that feels the same in the beginning as it is in the end, with no clear conclusion. So I am working on a new version with a different spin.

It's probably better to specialize in business verticals than tech choices, and better to choose something that doesn't have so many kids learning it to build games. YMMV
I have done a career do-over. I took a lower paying position that involved pair programming. It was like developer rehab after the startup grind left me wondering if I could even contribute as a programmer anymore. The firm had a good reputation and recruiters were all over me, which was good. Then I took a much higher paying enterprise type job where it doesn't matter how I code and there is no point in doing anything better. Not sure what my next move will be, might get knighted as a data scientist soon, who knows. Good luck!
I'm not sure what this means: What did you do to redeem yourself in the eyes of your respective industry?

Are you talking about someone who screwed up enough times that the mean free distance to a negative referral is essentially 1.0 ? I don't see industries as having 'eyes' but I have known industries that are relatively small communities.

I have known, and hired, a number of people who have 'redone' their career when the thing they started with didn't pan out, a chemist into a QA person, a semiconductor process engineer into a UNIX developer, a mom into a product manager. That sort of 'do over'.

And I've met folks who 'grew up' in a company doing one thing for 15 to 20 years and then failed to find an opportunity to continue doing that thing. Only to switch into a different career all together. Most commonly that is, "Hey you weren't you 20 years at BigCorp? What are you doing these days, 'mostly consulting'" sorts of conversations.

I don't take it as necessarily an implication of accumulated failure.

Career paths just tend to end, somewhere somehow. Might flame out. Might get a bad rep. Might be doing just fine but that tech & corp might just be leading to "going nowhere", coasting or the path vanishing. Be on a road long enough, you eventually discover it ends, be it accumulated choices or "just does".

At some point you need a change of direction. Might even be the same direction, you just have to get on a different road that actually continues that way. I'm still doing what I always liked doing, I just swapped out the technology & clients for something more modern.

I'm mostly talking about people that, for one reason or another, appear to wander around with no clear career progression or direction, so it looks like they are "junior" in experience despite being "senior" in total years worked.

And I think that re-doing careers by switching professions (as you say, chemist -> QA) is different than re-doing career in the same profession. Something like the former is different because it's easier for companies to treat you as a clean slate if you switch to something that has little overlap with your former profession. But I want that clean slate treatement just re-attempting my profession.

For instance, maybe I want to re-do my entry level years because I never got into Computer Science, and would like to get an internship at a leading tech company, because that is a better start than my reality, which was just graduate with no internships, no support group of professionals, nor recommendations for good companies. It was just me going solo and blindly applying to local jobs at Craiglist for low-budget clients.

So yeah, I'm not talking about career switching into another profession, but more like hitting the reset button on one, to do it better the second time around.

Okay that is helpful. In my experience, this situation -> people that, for one reason or another, appear to wander around with no clear career progression or direction, so it looks like they are "junior" in experience despite being "senior" in total years worked. has always been that the person wandering didn't know what they wanted, and if it had been years, didn't have tools to figure out what they wanted.

I am reasonably certain there are other explanations/causes but the three cases I can recall easily were all that the person got into a career in computer programming because someone one else told them they should. And they stayed employed but they didn't have any idea about what they wanted to do so they changed jobs for all sorts of reasons, a girlfriend, a pay raise, a manager that kept bugging them at the old job. All of the change reasons were external to their career path.

One really wanted to be a musician. They could talk on and on about different styles and influences. They lit up and were on fire. One was lost, they had always had their life planned out for them by others and they followed that plan until it ran out (just after graduate college and get a job). And they never previously had been required to create their own plan. I didn't get to talk with the third person I can remember because they moved on to a new position before I had that chance.

If that resonates with you then my advice is to work on figuring out what you really care about. And I recognize that isn't an easy task, it was simple for me I was fascinated by computers and the systems you could build with them, so much so I build stuff just for fun. But a good way to search for the things that you care about are to explore different things (very hard to do as a single breadwinner in a family). As I told my musician friend, even if you're not an artist with a signed label contract, you have a understanding of what they are going through and you can write code. Can you find ways to help other musicians that way? Or music lovers? Or screenwriters trying to match music to scenes? or hospitality businesses wanting to influence the mood with music? You can get quite meta and still exploit the experience you've developed in an area you care about.

Without an amnesia treatment there is only so much you can reset :-) Mostly folks learn basics about work (its not always fun, how you work can be as important as what you get done, your boss may be an idiot but it doesn't change the fact that they are your boss, etc). So instead of 'resetting' it's more like vectoring. Now that you've been in the career for a while, if you know what you'd like to be then imagine you have reached that point and and then try to imagine plausible steps that you would have had to take to get there.

Can't speak on it personally but about 3-4 years ago during my last job search I searched a few "Getting a dev job after 30" type queries. I was around that age and concerned about all the ageism claims. Apparently there are forums full of former developers either out of the industry or struggling to remain in it. There was a lot of talk about depression and guys being suicidal because they couldn't keep up with the industry, etc. Really eye opening to me at the time as the industry seemed strong as ever, even for outdated stacks.

If you're not getting any offers that's one thing I guess, but imposter syndrome is real in the industry. We all worry about being up to some rockstar level and all the grueling interview processes out there. Then we brush up for a couple of weeks, hit the market, and field multiple offers again.

I find the notion of age discrimination at 30+ to be simply ludicrous. I’ve been at multiple top tech companies, and the very common age ranges were mid-20s to (estimated) late-40s.
You find it ludicrous because you haven't experienced it or seen it with your own eyes?
I think this phenomenon is hugely dependent on location.
Older devs exist but they tend to be very senior with a lot of responsibility in my experience. Where does that leave the competent but non architect level dev who doesn't want to be responsible for that level of pressure? Maybe a 40 yr old wants to just take a mid level CRUD job for the purposes of keeping up with his mortgage and has no other ambitions beyond that? It seems like being "just a guy" is looked down upon the older you get which is not fair when there are plenty of those types of roles out there (mostly given to younger people)
Most HR and managers don't think someone who is 40 wants to work for entry-level / mid-level salaries intended for junior and early developers.
Is the 40 year old comfortable taking the same salary as an early/mid career dev? Therein lies the rub.
Yep, that’s it entirely. In your 20s it’s super easy to take a lot of risks, what do you have to lose?

When I was 20 I decided over coffee to move to the other side of the world. Had some savings, not a lot but just did it.

Now, at 37, there’s a mortgage to pay and a family to support.

I don’t have the runway to do two or three years of low pay again to switch to another field.

I am aggressive paying that down though, so that I have this option in my 40s.

(comment deleted)
I interviewed at a Fortune 100 tech company when I was 35. The head of the development center declared to me that "people don't come here to retire". I was hired because they needed a niche skill that I possessed.
(comment deleted)
Early 2000s, I was a full time procrastinator, college introvert, MTG/DND geek and homework/thesis freelancer. German government increased fees to a point which I could no more afford it, so I dropped out and found a real job.
If you will forgive me indulging in stereotyping: this is a very German response. Two sentences, brutally honest about the self, logically complete, and subtly amusing.
I fell into an obscure technology stack out of college (AS/400...in 2005). It was comfortable, but technologically unsatisfying and completely useless for my resume. I kept my skills sharp after hours, and then took a pay cut to jump ship to a "proper" programming job, which lead me to a great high paying remote gig after a scant 18 months there. It was for a lot of reasons, and it was scary (had my first kid shortly before the jump), but it was completely worth it and not that hard. Just, be good at it.
I reached the end of my career progression in IT Architecture. Started as a Solutions Architect, then reached Enterprise Architect. And there's no where to go after that.

So I took the leap and tried something different - became a Product Architect focusing on a specific technology. Now I'm a Mobile Product Manager, something that pays (probably) less than an Enterprise Architect, but tests out new skills like investment proposals.

My ultimate end goal is CTO. I think having an end goal in mind helps me focus on what do I need to do in this job or the next that gets me closer to that goal.

Not sure how applicable this is, but I’ve gone back to school to get an M.Eng now that I know I don’t want to do (or only have the skills for) applications development forever. The focus is ML/AI but I’ve found a surprising amount of enjoyment out of working with hardware in the rapid prototyping class I’m currently taking. In retrospect, sticking with just one domain was probably why I got bored in the first place.

I haven’t necessarily switched careers, but it’s still not easy. If I could go back and give myself one piece of advice, it would be to knuckle down and learn differential equations and linear algebra. That’s the difference between understanding how machine learning works and tinkering around with TensorFlow.

just started taking an online intro course to deep learning. really hoping that i'm not simply wasting my time and that if i actually want to one day pursue it, that i won't need to have a PHD in this field
(comment deleted)
I got a super comfortable job for the past 15years as a work from home C++ server programmer. It has allowed me to be around and watch my kid grow rather than be away 8-6PM and just come home to dinner and put them to bed.

It was very good pay at the beginning but it hasn't keep up and now it's not that good (to bad either).

A few years ago I started playing with electronics (Arduinos, Raspberry PIs and stuff like that). After a while I started looking and picked up a few easy jobs related to that in Upwork as a way to do something different as doing the same thing for 15years can take it's toll.

Shortly after I was picking more and more advanced jobs. I picked a few big clients and moved them off Upwork. I'm now doing advanced embedded system programming and electronic design as a side gig on weekends and afternoons and making more money than my main programming job (which I can't seem to be able to leave).

And that's the story of how I found an alternative to my comfortable job. If I ever leave it I will never go to an office again, I will just expand my embedded freelancing.

It's cool that you used Upwork as a way to change careers. Very intriguing use of that platform.
What kinds of projects are you taking on in the land of electronics? I find this area very interesting, but can't seem to figure out how you can make a living on it....
Well there had been a lot of "I want to make a device to do X". Then I will cook a proposal to do it using a rapberry pi or a MCU depending of what it is.

People wanting to make gadgets using Bluetooth is a big one and I have been using Nordic Semi line of BLE SoCs very succefully.

Most of the business lately has been coming from a couple of companies that I made some work for and keep requesting changes or more features. I had to disable my Upwork profile as I didnt had the rrsources to keep up with the projects coming from there, even after upping my rates a few times.

' and now it's not that good (to bad either)'

looks like a few other skills have depreciated too

Criticizing the parent for grammar and even not using capitalization or punctuation. You aren’t even following the norms for quoting on HN.
I'm not a native English speaker and didn't bother to proof read my writing. Anyway I can't edit it now.
(comment deleted)
That sounds like a pretty rewarding expansion of your skills.

I've spent the last year coming up with fun projects of my own, based around ESP8266 devices, and while I don't think I'd ever want to make a career out of it there is something very refreshing about developing in such constrained environments.

It always reminds me of writing code in Z80 assembly on my home computer back in the 80s.

I was at one of the FANG companies for 6+ years, joined right after graduation. However, I couldn't get senior due to me being naive (I have no ego, hence wasn't able to collaborate effectively with teammates, pissed a few off a few times), positioning of the product (none of my team members got promoted to senior while I was in that team). Last year I opted to change my jobs when my promo was denied again. I had hard time finding other teams to switch to (because of mentions of pissing off people) and also was completely bored of my existing team. FWIW, my technical work was never in question, just that no one supported me at promo times etc.

I am now in another good software company (similar to FANG, probably a level lower in terms of core compsci ability). The big change I have done is to accept that not everyone is learning all the time and not to try to do the same (its software engineering not research). I learnt this throughout the interview process by talking to lot of good college friends (who also work in tech in Bay Area) and acquaintainces recommended by friends.

My change isn't complete yet, hoping that this change will lead to better collaboration with team members and work output. Job title might improve too at some point in the future, though I am not too worried about it.

> The big change I have done is to accept that not everyone is learning all the time and not to try to do the same (its software engineering not research)

What do you mean by this?

Basically solve a small problem at a time (however uninteresting it is; a lot of things are uninteresting to me), never try to put the whole world in my head or continually come up with ground breaking stuff. I also realized that most other people are doing the same and this helped me align better with them.
I got my Ph.D. in physics in 2010, worked for about 1 year in research then took a year to try and build my own startup while collecting unemployment. I didn't successfully get a startup going but I learned enough web development during that time that I have been doing it professionally ever since.
How were you able to collect unemployment if you decided to leave to try to get a business started?
I got laid off and then made that decision. And I basically just started building websites that I thought would be cool. Trying to "get a startup going" might be giving myself too much credit.
Ah, that make sense. Incorrect assumption on my part that you decided to leave.
I wanted to try something completely on my own and I had done a lot of programming in my physics career so I thought that building a website would make sense. I SEVERELY underestimated the complexity of web development though. :) But I'm glad I did or I probably wouldn't have even tried it.
He's already answered but just in case we have any other Aussie's reading, we actually have a system that lets you do that called NEIS.

You have to do a short business course—From memory it was one hour a week for 10 weeks or something like that—and then you can collect unemployment while working on your startup for I think a year.

The bar to get in is pretty low. I'm sure that a lot of my class/group were intentionally unemployed and just looking for an easier alternative to pretending to look for work, and they didn't get kicked out. That said the metrics they were tracking to make sure you were progressing were more regular small business focused rather than trying to create the next Google focused. Revenue, customers, etc. That fit what I was doing but might not for you the reader.

I suspect its not as easy as many people make out.

I was a great C++/OO dev for 10 years before I got bored, starting doing management, business focussed roles and more high level devops style work. After 10 years of that I wanted to move back into pure coding. With great experience should be easy right? Wrong.

I got a mid-level java/python dev job and it was difficult, I was out of touch and everything was different or new. Languages, styles, CI/CD, DI, git, containers, unit testing its a huge amount to learn. After a year I got laid off because I was getting paid like a senior but not keeping up with the grads.

A few years later I'm productive and useful in this new world but I dont really like it. I'm enjoying Scala and functional programming but with so many libraries and tools I feel like everything is so difficult and complicated. It takes a lot of study effort to keep up. Also I'm never sure if its because the applications I work on are badly designed, or I just dont really understand modern design. I have a business specialty which keeps me employable but I miss the old days when things were simpler.

Being "old" at 40+ really isn't so easy - I'm not sure you can ever redeem yourself in the eyes of the industry. Best you can hope for is get a non-tech domain specialty and find a big stable company that values experience and try to keep working on interesting projects. Once you're laid off or fired once its really hard to be the super confident hacker you were at 25.

EDIT - thinking about if you want advice. Get a business specialty or technical niche. Dont get too lazy, if you aren't learning on the job for a few years in a row, change the tech in the project or leave. It should be easy to keep employed but you have to keep working at it. Best career money-wise is to move to management, but its difficult to move back. Dont take the high paying job on a dead end project without a plan to get out.

I'm only 32 but that's kind of where I'm at right now too.

Mastered Objective-C and Mac & iOS development 10 years ago, now it's all Swift and nobody's really hiring for iOS devs in my area (Chicago suburbs), and nobody's hiring for native Mac developers anywhere, period. And all the best practices in iOS have changed drastically since then, too, in terms of both coding and UX.

Learned Ruby on Rails 8 years ago, but it changed so fast that most of what I knew about it has become irrelevant, and I never was very good at Rails in the first place.

All the best practices I've learned in HTML/CSS/JS/jQuery/Less/Sass are becoming outdated pretty quickly.

Spent 5 years mastering Clojure but it's obviously very niche and I don't have any experience with big data or anything else Clojure is usually used for, only traditional web apps.

It feels like there's no way to keep up with the industry while staying relevant and employable.

I was in your position, been working with iOS since the beginning until I decided to just get the fuck out of iOS and start doing some useful things.

Went all in with building single page applications in JavaScript and Node, front end, back end, and database administration, and haven’t looked back.

Fuck iOS now, native mobile development benefited from a craze where everyone thought mobile apps were the new web apps, but the truth is, most mobile apps only make sense in the context of a larger application ecosystem, usually supporting a web app.

Node and javascript? Those technologies change and move faster than anything else in the industry. What you're doing now will likely be obsolete within a couple years.
Sort of. The difference I guess is that you can still put javascript on your resume and it'll do something for you.
I'm willing to bet that Node/JS devs actually have an easier time staying current, since their workplace actually has a need to change technologies, so they're getting paid to keep rewriting their web app in $the_latest_framework, which they can then put on their resume.
So what? You’re not never going to find one thing to learn for all time. Things change. The point is to get started and then follow the industry.

Who cares if what I do today is obsolete in a few years, by then I’ll be doing something different.

Don't learn the language. Learn the fundamentals. The fundamentals remain constant.
Tough to get hired on fundamentals these days.
A lot of jobs out there only test you on fundamentals. Hackerrank questions allow you to pick whatever language you like.
That usually happens after the CV screening, no?
In most jobs you will not get a foot in the door if all you claim to know is fundamentals. If you do not know the languages or frameworks they work in the interview is over as they are not going to spend the time training you. They want you to get in and be effective as soon as possible, not pay for your on the job training.
Personally I have found that this is relevant only for front end work. For the backend you just need rudimentary knowledge of a framework/language to get your foot in the door, then the actual testing is language agnostic.
Makes sense. Us front end guys are fairly expendable.
Don't pigeonhole yourself into the frontend. Be language agnostic. Mastering the fundamentals allows you to transition across the stack.
I know a few iOS devs in Chicago. I've definitely heard about the trials and tribulations of switching from Objective C to Swift, but I'm surprised there aren't more jobs out there. Is the commute to Chicago too long for you?

The iOS devs I know are either in marketing or work freelance though. So I'm not sure how much like "a normal job" it is for them.

<snark>don't worry, all the people making apps and new javascript/css frameworks have moved on to cryptocurrencies now</snark>
I think you mean zk-SNARK
When you get into technology, you should go under the assumption that you will be a student for the rest of your life. Otherwise you will get left behind. My Dad is in tech (I followed his footsteps). For as long as I can remember growing up he always had a book with him in his free time. He started with punchcards.
I don't mind learning, definitely. I got into this field because I'm passionate about software and I enjoy programming a lot. But while I have a full time job and a large-ish family to support, it's hard to fit "3 years of professional React.js experience" into my spare time to put on my resume, so that when nobody's hiring iOS developers anymore, I can still get a job. That's what I'm talking about. A lot of the skills are very transferrable, but I've already been turned down for a few jobs simply because I just don't have the in-production experience with the exact technology they're hiring for, even though I could pick it up pretty quickly.
(comment deleted)
Want to get some production experience with react? Tons of webdev projects are using it at Mozilla. Come on over and find yourself a good first bug :-)
"But while I have a full time job and a large-ish family to support, it's hard to fit "3 years of professional React.js experience" into my spare time ..."

I'm sure your got the bugs, but the gp ain't got the time

(comment deleted)
Is there a private message feature here? I may have an opportunity you'd be interested in.
HN doesn't have any private message functionality but many people (including the poster you replied to) have a means of contact in their profile - just click on the user's name.
> Languages, styles, CI/CD, DI, git, containers, unit testing its a huge amount to learn

I feel that a key trend in modern development is often needlessly focused on the mastering the complexity behind the coding infrastructure/deployment pipeline and ignores the actual business needs. Not suggesting these practices are useless by any means, but that for most startups it's putting the cart before the horse.

> Also I'm never sure if its because the applications I work on are badly designed, or I just dont really understand modern design.

FWIW, I think there's a lot of people out there who would claim that Scala is a bit of a step backwards for the professional community. It's a fine language, but not a (socially) scalable one due to it's immense expressiveness.

Scala is rough IMO less because of the expressiveness, but more because you have at least 4 paradigms in common use, none of which play well with each other. Let's see, I count (1) Futures/Async (2) Threaded (3) Akka/Play/Actors (4) Finagle, (5) Reactive Streams.

There are so many impedance mismatches between them and so many diamond dependency conflicts that it's impossible to get any moderate size project done without going to microservices so that e.g. your Redis client and your HTTP server aren't complaining about different subtly incompatible versions of Netty.

What's DI?
I'm guessing Dependency Injection? In context meaning writing code that's easily testable, and writing lots of tests, which goes hand in hand with the other TDD/BDD buzzwords that job descriptions often throw out there.
Dependency Injection. It's an over complicated term for a really trivial pattern in development.

func addOp(a, b, op){ return op(a) + op(b); }

Here op is a function being injected into another function. Nobody uses the term in functional/procedural programming because this pattern is obvious and ubiquitous in Higher order functions like map, reduce or filter.

When people use DI though it's used in the context of OOP, where a dependency is an object getting injected into another object through a constructor. People using this pattern tend to create programs that are littered with very abstract objects that can only work when injected with dependencies. Also the injected objects themselves may be DI dependent as well leading to crazy dependency chains (reminds me of inheritance ugh). All of this is done in the name of "modularity" and "unit testing." As you can imagine this pattern produces a sort of False composability where your code is littered with very abstract objects that are rarely ever reusable. If you want to compose object A and object B, you have to specifically design/code object A so that it can handle object B or vice versa. Because all object composition involves custom modifications to the code of an object it is a sort of broken implementation of modularity and reusability.

In a function, the only requirement for composability is matching types. All functions that return ints can be composed with one another without additional modifications. This is true composability and true modularity. The above example doesn't need dependency injection the same result can be achieved with this:

func add(a, b){ return a + b; }

add(op(a),op(b));

So you can see why the OP listed DI as one of his complaints. He must be dealing with a highly Object Oriented code base that employs this pattern extensively.

> It's an over complicated term for a really trivial pattern in development.

Yes, but...

The objective of most business-oriented programs is to create the One True Function(tm), usually known to developers as a the "application." For everyone's sanity, this should be composed of smaller functions, which are sometimes called "objects." An object is just a function that was created using a specific creation template, usually called a "constructor."

For a pretty moderately sized application, the One True Function might be a tree of sub-functions which has hundreds or thousands of branches. Sometimes you might want to write the straightforward boilerplate code to attach items to this tree, but that could get tedious to maintain.

Other times, you might find a library that will automatically assemble your tree for you, as long as you specify up front in configuration that all of your fruits are apples and all of your leaves are green. This program is usually called a "DI framework."

Hopefully, this saves you a lot of typing, which you can then use to type up HN comments.

Objects and functions are different. An object retains state, a function should be stateless. Objects cannot be evaluated and do not have return values.
I think you forgot the word mutable somewhere. A true Business Application(tm) has no mutable state that is not stored in the database, so all objects are immutable and therefore functions (except those dirty dirty data objects).

    some_object.apply(method_name, param, ...) // sure looks like evaluation to me
You never mentioned immutable. If objects were immutable then yes you are correct.

I'm not sure what you mean by "true business application" but there is a transient form of mutable state that an object possesses in between processing a request and returning a response that is seperate from the state that the database holds. It is up to you whether you want that transient state to be mutable or not.

An object itself cannot be evaluated. Methods can be evaluated but not the object itself. Is your example referring to a specific language?... because in general objects are not functions.

> Objects cannot be evaluated and do not have return values.

Python would disagree.

Python disagrees with you. Given a python script with a single class. If you instantiate an object and try to "call" or "evaluate" it:

    class A(object):
         def __init__(self):
             pass

    x = A()
    x()
you get this output to stderr:

  Traceback (most recent call last):
    File "python_temp.py", line 6, in <module>
      x()
  TypeError: 'A' object is not callable
Of course you can mess with the callable magic method, but that's more of a trick then a standard. You may be referring to how functions in python are implemented as callable objects rather than primitives. This is an implementation detail that is language specific, similar to how in javascript, functions are also classes.

In standard programming vernacular and practice, objects and functions are two different primitives. They are not the same thing. An object is a noun, a function is a verb, and just like their english grammar counter parts functions and objects are primitives because a Noun is not really a special kind of verb nor is a verb a special case of a noun.

Edit: added more detail, grammar editing.

> Of course you can mess with the callable magic method, but that's more of a trick then a standard.

Implementing a __call__ function is indeed what I was referring to.

I think conflating data structures and objects is bad, and muddle the discussion. An app is mostly a pipeline of functions over an initial data structure.
DI is Dependency Injection, which is a $1,000 term for a $5 concept.

A Python class without DI:

    class SomeClass(object):
        def __init__(self):
            self.someDependency = GetDependency()
A Python class WITH DI:

    class SomeClass(object):
        def __init__(self, dependency):
            self.someDependency = dependency
...

That's it. DI is just explicitly passing ("injecting") a dependent object into an object, rather than requiring the object to call a function to get a reference/pointer to the dependency or make one.

You might want to look into Python, specifically within data science / machine learning area. So far it seems to me to be much more pragmatic philosophy, for example if you can accomplish something with 10 lines of code, it seems acceptable in the community to use just 10 lines of code, rather than writing some elaborate framework of 30 classes, interfaces, factories, DI, unit testing as if you're sending people to the moon, all spread over numerous application tiers for maximum obfuscation.

Also, due to the uncertainty inherent in ML, I find there's a much lower prevalence of dogmatic know-it-all zealots who insist you must(!!!!) do something a certain way, because <a whole bunch of reasons that don't make any sense>, who inevitably will have moved on by the time the entire thing starts to collapse on top of itself.

YMMV of course, but worth looking into.

> Once you're laid off or fired once its really hard to be the super confident hacker you were at 25.

This is the point of all those self-help books about grit and things like that. Their point isn't really to accelerate your progress when you're feeling good and confident. Their purpose is to help you regain the confidence once you lose it, to make you robust to setbacks.

It sounds like you were away from coding for a really long time (10 years!), then you got back into it, picking an area you didn't know much about, expected it to be easy, maybe didn't put in the time outside of work...this approach wouldn't work for anyone, no matter their age.

Here's a manager-y question for you: how could you have done things differently when you went back to being an IC, to have had a better transition? Maybe doing more prep work before you left the manager track? Maybe going back to C++ instead, or an area that was closer to what you used to work on? Maybe doing open source work in that new java/python target area, to get experience, build a portfolio, and be sure you liked it, before you bet your livelihood and reputation on it?

Yeah I could have been smarter, but there aren't that many interesting C++ roles around and the role I took was a horizontal move in the company.
>After 10 years of that I wanted to move back into pure coding. With great experience should be easy right? Wrong. The trouble is that the "just coding" experience gets very quickly outdated. Your knowledge of Win32 API or WPF isn't really relevant on a Python job. Interestingly, the skills that don't get outdated mostly lay outside the technical part: your ability to manage people and resolve conflicts, your ability to present ideas and convince others, your ability to spot business niches and shape products under limited resources.

In the old times one could argue that being a good engineer (i.e. finding simple solutions to tough problems) makes a difference, but I'm not sure how much this holds anymore for software engineers, since the complexity isn't in about fitting your business processes into the SQL/backend/frontend bounds, but rather in defining those processes and making proper assumptions about the market.

Yep I was a programmer at a university until 2002 when I had driven my own career into the ditch along with my personal life. I had to start over from a lower position after gathering my wits about me, and work my way back up.

The hardest part was getting that second chance, if you had a more senior job and you're applying for a lower one it's obvious to people there's something going on there. Your best bet is going to be honesty, and convey very clearly you've learned from your mistakes and that you want to improve, your open to feedback, etc.

Good luck.

Does anyone have any stories of career do-overs that aren't just a renaming of "software engineer" on both sides?
Exactly. Most of these read as "I went into a different specialization of the same field".

Where is the engineer that just chucked it all and opened a donut shop? That's the level I want to know about. Most of these are just stories of people making lateral moves in the same industry.

That's because the opening line: "I'm not talking about switching professions at some point in your life"
That's explicitly what this question is about though, the OP specifically says they want to know about lateral moves in the same industry.
Perhaps because the OP specifically asked for experiences not involving career changes?
Sure. I do. I still haven't quite made it to first base with the new career but that's because I am solopreneuring and building the first platform. This takes time! However, I have come a long way.

My story doesn't feel unique. I learned what was necessary to then acquire skills used to create experiences by building lots of software every day for years. I gave back as I grew. This process continues today.

I've done this over and over, across disciplines. However, tech has captured my focus entirely for the time being.

I got too comfortable and thought I dont need to be harassed or witness others being harassed. I'm leaving this craphole and I'll be able to get another job when Im ready to go back to work. That was June of last year and I was ready to get back to work in September. Yet all those recruiters knocking on my door and landing me 30 phone & in person interviews never prompted an offer. Though six long months later and as of two weeks ago I started a new gig.

Im not sure why it took so long as it never did before, but it's either there is more supply then before for UI/UX Designer & Developers roles, I'm getting old(42), I do both design & development which the UX side ppl say Im not experienced in the study testing where this button should go(let's talk about that for hours) to developers saying I dont know React. Also, I thought ppl in my field might have been talking about how I just up and left my last job without mentioning the harassment(after Me Too movement started to roll i reached out to the heads of this big company reminding them that I reported a female colleague's harassment was ignored then harassed myself .. im a dude).

Overall I am glad that's behind me/working now and it just took time and potentially making ppl shut up about me when they dont know the whole story.

I was a Fortran developer for a few years in the Aerospace business. After a while, I got sick of 1977 and just wanted to be a "regular" full stack guy.

At the time Rails 2.X was current and Clojure was pretty new. Both looked pretty neat. I learned Rails and Clojure on my free time, went through Michael Hartl's Twitter knockoff to learn, and applied for jobs.

Nobody really loved how little I knew about modern web dev, but several told me they could see I was bright-ish and sufficiently motivated that they'd take the chance. It was hard and stressful at first, because I didn't know anything (JavaScript, jQuery, what's a "callback" function?, etc.) but I picked it up fairly quickly.

Made $80K my first year (pretty good junior dev salary in Texas) and it's been better every year since.

(comment deleted)
I'm dealing with this right now. I have a ton of experience--since I was a young teenager, in fact--of being a software developer, mostly in positions of technical leadership. Most of my resume consists of architect jobs. And yet, to pay the bills, explore a new area of the country, and expand on complimentary skills, I took a job as a senior DevOps engineer contractor at Idaho National Laboratory. Since my contract ended and I've started applying for jobs again, it feels like I'm being treated as damaged goods. I can't tell whether it's the fact I live in the Idaho Falls area or whether it's the Senior DevOps Engineer title. I get the standard "We've decided to pursue other candidates" non-reason. I have no data on which to base tactical changes to my approach. My applications are just falling into a black hole.

I know I am a very qualified candidate for any of these positions, and I have lots of GitHub contributions where people can actually see my work. That doesn't seem to be enough, however. Can't I just talk to a real person? My communication skills are excellent, and whenever I have gotten in front of the hiring manager, it nearly always leads to an offer. Am I the victim of algorithm-driven hiring?

To plug myself a bit: If anyone is looking for an experienced .NET architect who's done a bit of everything (including my own startup), drop me a line. I favor working remotely but I'll relocate to a desirable area for the right position. [nathan] at aldenfamily |dot| net.

Oh, and OP, you didn't mention if your question applies to you, but if it does, hang in there. We don't have much control over the ridiculous state of hiring in IT, so there's not much we can do except plug along.

When you ask them why they turned you down, what do they say? Have you tried asking for resume feedback?
Most of the job ads (Dice, Indeed, etc.) obfuscate the actual company behind a recruiter and no-reply email addresses. I would love to reply and ask, but in 99% of cases the reply email is noreply@somerecruitmentfirm.com.

I have talked to a couple of real people, one over the phone and one over email. In both cases I feel like I had a good rapport built. The first guy turned me down because his company only had the budget for a junior programmer. The second guy hasn't yet responded to my reply to him, but I'm hopeful.

Overall, I've probably applied to 100 different places (mostly remote jobs) and haven't even received rejections--let alone a reply--from the vast majority.

It pains me to no end that I am seemingly not allowed to simply talk to a real person. I understand why; I'm not naive. It still sucks.

Since you mentioned Indeed, I thought I'd mention I had a similar sort of "resume black hole" experience. For a long time, I wasn't really thinking and just applied through those job board sites, directly from the posting. Later, I started using those sites just to research companies, and then go to the company site and apply there, and all of sudden I get five responses in a week. If there's no company listed, a lot of times you can google portions of the job description and it leads to a real company. My resume formatting would often be messed up by the job board sites, so it probably went straight to the garbage. There's really no reason to go through a recruiter if you can avoid it.
I've been doing that whenever possible. I even have my wife helping! It does work for some of the posts where the actual employer's name is listed, but for recruiter-obfuscated posts, it's much more difficult. Sometimes we are able to reverse-engineer the original company using location and other information, though. It's still a draining experience.
Many of the job ads are fake. They are simply going through the necessary motions to prove that they couldn't find a qualified candidate; then they can qualify for an H1B visa.
What's your timeline here? 100 resume sends over how long a period?

If I can give some unsolicited advice, I would recommend

1. Put your resume on Monster. Hordes of recruiters here will give you a lot of phone calls. 50% will be for bad fit jobs, oh well, sucks for the recruiter, take the call and use it as practice. Maybe they'll get you an interview, boom, interview practice. You might even get an offer this way which you can use as leverage against other positions (or just to add urgency to other applications).

2. Indeed jobs, in my experience, are absolute garbage. I don't waste my time on that site anymore.

3. LinkedIn and Angel.co have the highest quality positions that I could find.

4. Connect to as many people a day on LinkedIn as you are capable of - this will allow you to make more 1st level connections which will then allow you to send more "hey, do you know anything more about this position? I'm looking to apply and want to know what your experience at x company is" type messages.

5. Stack Overflow jobs is a great portal for remote jobs.

6. Those code-test-find-you-job sites I've heard good stories from, can't remember names off the top of my head, sorry.

7. Took me 250 resume sends to get my last job, which led to 30 phone calls which led to 10 code tests / interviews which led to 3 offers. Food for thought.

It is very unusual for companies in the US to cite any reason for turning down. It doesn't really help them, and while it might be nice and help the rejected candidate, the probability that said candidate will believe he was wrongly turned down and file a lawsuit is just too high for comfort.
It is unusual to come unprompted, but I got feedback 80% of the times I asked.
I wouldn't concern yourself too much with feeling like damaged goods. It's very easy to feel that way after a period of several or many rejections, but that's probably not the actual case here.

In this instance, it might just be a matter of not finding a good remote match. That can be tricky. I was job hunting for a few months last year and was solely focused on obtaining a remote job but couldn't find one that fit. The only people who seemed very interested enough to take it to a final round interview were paying ~10-15k market rate for my area. And so I'm not working remote. Happy at my current job, but still. I got summarily rejected from a lot of remote gigs I felt I was absolutely very qualified for.

To be honest, I would rather take more algorithm-focused interview tests than be filtered through the HR perception that I don't qualify for Programming Language Y because I only have experience with Similar Language X. At least most of the companies that do algorithm-based tests are more agnostic about the languages you have used in the past.

Pair it up with the fact that I never look for jobs until I am let go from a job, and I have a double whammy for "hard sell". Something I didn't know that is a bad idea to do until much later in my career. But hey, it's not like we all know about all the things you should and should not do about careers. I just assumed that the only drawback of not having a job is that you have no income stream coming in.

I am able to get through interview rounds with Amazon, and also have gotten the attention of a few interesting companies from my Github projects. But somehow I do not get a good perception with local companies on my resume. Others have helped me out on fixing my resume and they've told me, it's too aimless. It does not have a clear sense of growth and direction, so I am trying out a new resume hoping that my job-searching experience will improve.

I think what this thread is highlighting more than anything is the importance of building real, meaningful relationships as you progress through your career.

As you progress, make a name for yourself as someone that delivers and build relationships with people. It's amazing how willing people are down the line to bring them on to their team/company in different roles if they already know you to be good and enjoyable to work with.

I'm already 33, and this is something I haven't been the best at, so definitely a wake up call for me.