I have a soul-crushing job and I don't know what to do

83 points by shubhamjain ↗ HN
I love programming and I enjoy solving good problems. Even though I am aware that there is some level of grunt work associated with each job but this one is just killing me.

Most of my job deals with adding CRUD functionality and bug fixes here and there. People don't seem to be tiny bit interested in doing things better. Our front-end developer chooses to re-implement everything from modals, alert boxes, to validation in form of horrendously ugly code because he believes his code will be more understandable to 'him'. The pay is not great and there nothing exciting associated with this job. In fact, out of 8 hours, I barely write code for 2 hours.

I only took this job in order to buy some time and create some interesting things but this job barely leaves me any time to do so. When I started looking for job, I didn't get good response from HN hiring / freelancing threads (maybe because I don't have a good portfolio).

I feel I should know modern frameworks like Rails and Angular to have a better appeal but it would take months before I get proficient in them and I have never been good at learning new frameworks for just the purpose of learning. I have no idea what I should do?

89 comments

[ 5.2 ms ] story [ 146 ms ] thread
"I feel I should know modern frameworks like Rails and Angular to have a better appeal but it would take months before I get proficient in them"

The best time to plant a tree is 20 years ago. The second best time is today.

Agreed. There's no way to get out of this, and learning new things is going to have to become part of your routine. Rails and Angular probably won't even exist in 10 years, so you're going to have to know the next thing by then.
If you want to get your feet wet with some real work, I highly recommend joining the folks at assemblymade.com. They have a really neat platform for collaboration that will allow you to make real contributions to a commercial project. One of their most active projects, Helpful, is a Rails app and would be a great companion project to the typical self-taught track of learning.
Well put. Things you do today will set yourself up for mobility later. Consider continuing-education part of your job. For me, at least 25% of my time is spent on education every week. There's no end-goal, you just have to stay up on the technology to compete in the workforce.
I had string of crappy jobs to get finally a good one. I worked at a dead end e-commerce company that's now defunct that provided its own in-house platform to sell to customers for e-commerce sites. It was miserable, everyone could see the company was on life-support, including the owners. The practices we used like editing code on live sites/servers was insanity. I forced myself to start using Git, making me the only one using version control and sneaking in best practices to hone in skills. I took what I could from the job to benefit me (taking on a project to make a mobile version of the platform). I hated the job as the work environment was toxic and it was affecting me outside of work. Even to this day, I have the occasional bad dream of being forced to go back to work for that company but having some sort of exit plan, even vague as mine helped enormously.

Picking a project and assigning it a tech stack is the best way I've found. Simply doing tutorials for the sake of tutorials takes superhuman dedication. My motivation grew also in parallel with the work conditions spiraling downward.

Long story short, I scored a job oodles better than the horrid job and make significantly more, and have happy coworkers and bosses that care. Plus, I've picked up a lot of skills here which I'd never been able to at my crappy job.

i could have written this. our "designer"/self-professed "front end guru" does everything wrong. everything. i've had to teach her what javascript callbacks, closures, constructor functions, and hoisting are. she's rolling her own "front end framework" (table-based layouts with a few breakpoints thrown in) and separates the code into dozens (dozens) of different CSS and JS files. i'm also getting paid shit wages. but i basically spend 90% of my non-work, non-sleeping time learning and creating things so i can have a portfolio. i don't have a CS degree, so i am taking OCW courses and MOOCs to fill in my knowledge gaps. i'm going to start building an app for a friend soon so i can put something on my github. i cannot rely on my "real" work to provide me with a meaningful portfolio. i recommend you do the same.
It's maddening to hear stories like this. I'm a UI/UX Developer, and really I just end up doing most of the front end development for our team. One of the big things I focus on is making sure our conventions are clear and documented. Style guides are verbose and have code examples.

Part of being a good at frontend is bringing the biggest lift to the team overall and making their jobs as easy as possible. So many people will be touching your code at some point, so I go out of my way to make their interactions as painless as possible.

I think with frontend development in particular, it's really easy to get some people that are really unqualified. Hopefully this is changing, but I feel like a decent amount of people sell some serious snake oil because some of it bleeds into soft skills.

Agreed, at least with the advent of precompilers and task managers like Grunt and Gulp we're starting to see a division from the previous generation of "web designers" where there's some hard skills that you simply do or don't have that can't be faked easily using bad WYSIWYG editors or rudimentary grasp of HTML and CSS.
i could talk your ear off about the corp culture that led to this situation, but i'll spare us both! we have no style guide. the code is not modular - everything is global. when i asked if i could at least encapsulate my own feature so that it wouldn't interfere with others' code, i was told no.

i think a lot of people in hiring positions (esp at legacy corporations) just don't understand what they should be looking for with a UI/UX person. you can't just wait for the first interviewee who uses a word you haven't heard yet and hire them. it's both a science and an art. hire accordingly.

Please tell me these are at the very least, CSS tables.
i'm fighting the good fight - the ones i write are CSS tables. the rest, no.
> I only took this job in order to buy some time and create some interesting things but this job barely leaves me any time to do so.

If your interest is in creating "interesting things," you should focus on the ways you can scratch this itch. If you go into your next job looking to "buy some time" you probably won't be any happier than you are now.

> I feel I should know modern frameworks like Rails and Angular to have a better appeal...

Software development is software development.

A lot of jobs, even at prominent/"hot" companies, primarily involve CRUD applications and mundane development tasks ("grunt work"). Proficiency in Rails or Angular might help you land a new job, but it's worth contemplating the very real possibility that the nature of the work at these companies won't be any more engaging to you just because your employer uses a framework du jour.

Wow ... this comment is so true especially in Germany.

Most of our Software Development jobs here in Germany deals with business application at is very boring and contains mostly mundane tasks. I have worked for some companies already and i really got to think the work is mostly the same boring shit!

At my current job we have a load of "slaves" from companies like Accenture, CSC and the like... they also report the same shits from a lot of other places :(

I really lost all hope ........

Your sentence "[...] out of 8 hours, I barely write code for 2 hours" contrasts with the next sentence: "[...] but this job barely leaves me any time to do so."

I am probably misinterpreting, but if you wanted to buy some time I would have thought this meant accepting this job to pay the bills, and then outside of work hours picking up other skills to create some interesting things, which sounds like the right way to build up your portfolio and skillset, especially if you've put in your required 8hrs/day in the day job.

I understand there are family commitments or other activities that may take up time, but in light of your implied situation (i.e. having to accept a less-motivating job to pay bills and buy time), you may want to consider either pushing for a new framework at work (which sounds like an uphill battle), or looking for another job.

The main problem is exhaustion. The queer thing about jobs out here is that in name "flexible timings" there is complete lack of schedule. Everyone comes around 11AM and stay till 7-7:30. I reach home by 8 and I am completely spent. Weekends are better but I don't feel I am progressing enough to have a good job.
Been there. Shift your hours back to 9-5. Helps considerably. You don't lose the evening then. Gives you something to live for.
Moar this than I can upvote. Getting in early changes your entire day. Sure, you sleep less, but unless you have an acute medical condition you can get used to it within a week or so.
Yeah, but make sure you do sleep enough. I neglected sleep for years, sleeping for 2-4 hours a day - on average, with sometimes 2-3 days without sleep at all - and I though I was doing fine. When it finally caught up to me I had a major epilepsy episode at the office, which was not nice. I since started to value a solid 8-9 hours sleep much more than before. This "much" of sleep is probably not really needed, but right now I'd rather be safe than (even more) sorry. YMMV ofc, but just keep in mind the dangers when deciding to sleep less to do something else.
Similar experience. I did two days solid with a couple of naps and passed out on some stairs breaking three bones in my foot, 2 ribs and dislocated my shoulder. My brain just said "enough of this shit" and taught me a painful lesson that destroyed me for 3 months.

7 hours minimum now and no stimulants (alcohol, caffeine, masses of sugar etc) and lots of water. Made a bigger difference to me than an exercise regime.

I completely disagree, for me, anyway. I was a child that chose to sleep instead of open Santa presents on Christmas. I am most definitely more productive when I can start my day late - enough that when working overnight, my mother noticed a positive difference in my happiness level. When possible, I test myself every few years to see if it has changed: Both ways I can get enough sleep, but timing my sleep to fit the correct time of day for me helps tremendously.

The only thing that might motivate me to wake earlier in this situation is to search for a job that didn't try to suck my brain away - very worthwhile.

Orrrrrrr wake up early and do some exercise and coding while your mind and body are still fresh.

Half of you probably just said, "yeah right!" but you might be surprised. I was a dedicated morning-hater until I got a little older (like into my 30s) and started sleeping better (sometimes).

Best part about working/exercising in the early morning hours is that nobody bothers you. No sales calls, social obligations, etc. (Edit: Unless you have kids and need to get them ready for school, of course...)

Or work for 2-3 hours every morning before work.
Why not do some coding on the job? It doesn't have to be a portfolio, but you can invest your time in learning up to date stuff and justify it as necessary research for your craft.
Arrange it so that the most optimal part of your day is for your personal projects. Your employer can have whatever energy and focus is remaining.
You are not alone. I am in a similar situation. Best advice for learning new platforms is to come up with something you want to build and then learn the new framework by implementing the idea using the desired framework.

My plan to get out of my rut is to build my own self-sustaining startup that I am more passionate about.

Maybe find an open source project that piques your interest, dig into the source code and start helping them fix bugs and add enhancements. If you work 8 hours a day, you have about 20 hours a week of free time, so go for it.

Log onto github.com and click the "explore" link at the top, to get some ideas.

Beyond that, realize that most people don't have ideal jobs. It can take years of hard work to get to the point where you can pick your job, or even better, make your own job.

Everyone's had soul crushing jobs before; just grit your teeth and get through this, whilst looking around constantly for the next opportunity.

As a friend once said, opportunities don't usually knock on your door. They lie there quietly, waiting for you to go out and find them. Best of luck!

I feel for you, I really do. I've also had a string of "crap" jobs where I felt I was not doing anything of value.

Remember, you should always be looking. If you have time, do some small bit of pro-bono work for someone, perhaps a non-profit. Add them to your CV. Solve an interesing problem for them.

Look at companies you admire in your area, see what interests you, and come up with a way to solve a problem they are working on. Present this to a manager over lunch. Tell them you fancy working for them and you can bring some skills to the table.

Like Yoda said, there is no try, there is do or do not.

FYI, I switched over to working for non-profits, and while the money isn't as much, the jobs are more interesting to me and I have generally much more latitude to implement what I think will work (for me, always OSS/Libre). It's a good feeling to know you are making a difference.

If your job is a soul-crushing vise, take your soul out of it and put it somewhere else. There are a lot of people out there that do something they hate to pay the bills. They get their enjoyment out of life by doing something else after clocking out. People at your work have no interest in doing things better because they already emotionally divested themselves from the job. Just pretend that instead of writing awful code, you're just serving customers at the restaurant until your agent calls about an audition.

Reserve your passion, creativity, and imagination for the people who care, even if that's just you. Don't learn anything based on what you think other people might want to know. Learn what you need to know to do what you love. If you can't somehow telegraph to a prospective employer that you can invest your passion into something, it won't matter what you know. Bitter, jaded, burnt-out people don't get nice jobs.

You are misunderstanding my situation. The reason why people aren't interested in clever solutions is because they can't think of any. It may seem cynical but I have seen people out here working even longer than me re-creating something, not exploiting even basic tricks or automations.

Lately, my co-worker spent 15 minutes indenting JS files without realizing that it would 10s to use a code beautifier.

I do this occasionally if I'm updating an old project or something as a means of making sure I walk through the code and understand what it's doing. Might be silly, I guess, but it helps me.
There are two things that pop to mind:

You can motivate or coerce your team mates to improve their skills so they all benefit. You can even ask your team leader/boss to be the lead of an initiative at your place to use better tools or technologies so that the productivity will increase. If you get an OK you'll even have an opportunity to spend some paid time doing something which will keep you sharp and improve your daily experience.

If you think you can't get the above to work or that you're way beyond the skills of your team, look for another job with better conditions.

I don't know your situation well, but the way you talk sounds like I used to. I spent too much of my career criticizing the people around me. Long story short, you get zero points for making other people look bad. It doesn't benefit your career, it doesn't make you feel good.

If there is an opportunity for your co-worker to be more effective, that's a great thing. You get to be the one to show him how. Just don't forget to do so with humility, because maybe there's a very good reason for doing it the way he does now. And if he's not interested in your advice, try not to take it personally.

It may be that you really are surrounded by idiots. Your co-workers are stupid, management is incompetent, they'd all be better off if they just listened to you, whatever. In this (unlikely) worst case, negativity still gets you nowhere. Acknowledge to yourself that you aren't satisfied with the situation, start looking for another job, and continue to show up every day doing your best and helping those around you. I've watched others take this approach and they're doing a lot better in their careers than I am, and they seem happier.

Our first world problems are such a drag.

I think you can make most any coding job fun if you do it right. Are you interested in making things better? Adding CRUD? Bake in a better object layer to the data store. Front end developer a n00b? Just out do him with some nice Angular or jQuery on the next project. "Oh, I already added the UI stuff."

If you can't learn something just for the purpose of learning (and why are you putting that limitation on yourself - buck up) do it on your own time and then bring it to work. Make everyone else look bad. Make your employer happy. Then get good at the new shiznit so you can quit and get a better job.

I find that making everyone else look good is an even better way to improve your career. Colleagues will remember every time you helped them out and your bosses are usually more aware than you think.
You make it sound so easy when it's clearly not. I've worked jobs where I was the only .net developer in a large enterprise and worked in a team where my teammate wasn't interested in growing.

It takes more than just gumsion to do what you're suggesting, what you're actually wanting to do is add more stress. Case in point, my coworker who wasn't interested in growing: I spent the better part of two months architecting out the service layers...only to have him f* it all up in a week. Refactor you say? Try refactoring code for someone elses work on top of your own.

He can try to outdo his coworkers to which he may easily become unpopular at work. Nothing adds more stress than pissing off coworkers and added more horridness to an already horrid team dynamics.

It's not easy to work in a crappy job. Your suggestions, in my opinion, sound more like wishful thinking.

Some times I think we are wired to believe we have to beg people's forgiveness for not being miserable. Medium term I'd suggest discarding this belief. Short term: on behalf of geeks everywhere, your local online watering hole hereby grants you permission to not be miserable.

Quit. There exist much better jobs out there. The hiring market for people with your skillset is the best it has ever been.

Level up. Portfolios are not, in fact, how most people get consulting gigs or jobs. This is believe due to availability bias by junior employees/consultants because portfolios are tangible and they have some sort of just world theory where the best gigs/jobs go to the people on the top of the ladder in programming skill. There is no one skill ladder. To the extent that there is, skill is not the primary driver of employment decisions.

P.S. The overwhelming majority of jobs are not in modern frameworks. Get good at Rails/AngulAr if they interest you or if you want to work in fields where they're the frameworks of choice. (Rails might be for Valley startups one of a few top contenders. I am insufficiently well acquainted with Angular to understand whether it is. Either way, neither will account for a full percentage point of LOC written in 2014.)

Also, if you haven't done so, I'd sit down and figure "What do I want to get out of my career?" and start optimizing for jobs which get you closer to those goals. This sounds obvious but some people don't do it. Do it. "A job which keeps a roof over my head and doesn't tax me mentally" is a perfectly valid answer but you don't seem to want that so don't continue to seek it out when you get up every morning.

If a portfolio doesn't matter that much, how would you recommend a young programmer, without many connections, get a new job?
I would recommend to make many connections!

Meetup.com might be a start, find fellow programmers there. Go to your local co-work location. Try the freelance sites like e-lance , etc...

But whatever you do, don't let lack of portfolio stop you.

Don't you think he should look for a job while he keeps his current job?
I have the idea that AngularJS is requested more and more. I thought it was kind of a "must have" skill.
It's the hot technology in the same way that Rails was the hot technology in 2005-2007.

This does not make it a must-have. I did just fine learning Django instead of Rails in 2007, and when I finally got into Google in 2009, I ended up using neither for the bulk of my time there (okay, I think I had about 3-4 Django projects in my tenure, and knowing Python definitely helped).

There is a certain segment of the employer market that is always chasing the latest hot fad: Java applets in 1997, ColdFusion in 1999, J2EE in 2002, Rails in 2005, Angular in 2009, React or Polymer or Go in 2014. Knowing the latest hot fad can be an excellent way to get your first couple jobs in software, because these employers are always looking for people and typically don't know much about technology themselves. However, it often signs you up for a lifetime of retraining, unless you leverage experience at one of these places into domain knowledge with a longer shelf life. Companies that live by the latest fad die by the latest fad; the same ColdFusion or J2EE skills that got me my first jobs in college are basically worthless now.

Quick search on Indeed shows 56,332 jobs mentioning JavaScript, 4,378 jobs mentioning Angular. So <8%. Plus, the vast majority of those 4,378 jobs are merely including Angular in a list of various frameworks, as examples of technologies they'd like candidates to have experience with — few of them require Angular specifically as a "must have" skill.
(comment deleted)
I second what patio11 said about the low prevalence of modern frameworks. Even at the most advanced startups I've seen up close, more of the software is built using custom frameworks than using "cutting-edge" modern frameworks. Adopting each new modern framework has a cost, and if a startup's problems are largely orthogonal to the problems the framework solves, adopting the framework is unjustified. I can remember only one job interview where extensive Rails experience was a hard requirement, but it was probably because the company's founding team wanted help learning Rails. You should be able to find many jobs where experience with modern frameworks is not a hard requirement.

If I were in your situation, I'd do two things. First, I'd write a list of 10 ideas to make my career really fun. This list would probably describe companies to interview at and projects to pursue. Second, I'd write a list of 10 ideas to make my current job really fun. This might require some extreme creativity, but it might be better to make a possibly futile attempt to enjoy the current job while working on finding the next one than continue to waste away in misery.

Here are a few crazy ideas that come to mind. Your ideas will be better:

1. Make a bingo board where each square is a common annoyance you encounter in the code. Share combinations of the bingo board with your co-workers. Give a candy bar to whomever gets bingo first.

2. When faced with an annoying task, set a countdown timer and do everything you can to finish the task before the time runs out. Don't let the bomb explode.

3. Stand up and do a fist pump every time you make an especially clever commit.

4. Listen to music that is fun.

5. Periodically listen to comedy that makes you laugh.

6. Think of the people you admire or respect in your workplace. Try to meet with them and learn from them. Give back to them too - perhaps by giving them ideas that you think could possibly help them in their projects, or introduce them to people you know who could help them.

7. Bring in snacks or some particularly tasty treats to share with your co-workers. It might help build some emotional connection and friendship.

8. Bring a bag of M&Ms and eat one every time you save a file.

9. Try working for an hour using only one hand.

10. If you're in an office setting where talking out loud won't bother other people, try narrating everything you do during the work day like how YouTube stars narrate playing video games. An immensely talented engineer I knew at an internship would sing rap lyrics all morning and swear vigorously at his machine when things went badly wrong. It was ridiculously entertaining.

Best of luck making your career more enjoyable!

+50

For both a great lesson and hilarious yet, a very applicable list of ideas.

I've been saying this for years. Obviously, we all want to progress in our careers, learn new things, and become the best we can be. Having a vision for where you want to end up is extremely important for getting there, otherwise a dream is just a pipe dream.

BUT, if you can wake up every day and do things like are stated above, you are going to be wildly happier in even the worst of situations and in turn, make others around you happier, even if this is only a small stop along the long road.

Just the other day, I wanted to try the new Dunkin Donuts breakfast burrito. If you've seen the commercial where the two guys are sitting down with goggles on because it is "exploding with flavor". I sat down in our kitchen, with goggles on at 8:30am when everyone was coming into the office. It made me laugh and a ton of others.

Happy Wednesday!

I got addicted to solving problems. Every time I fixed one, I would get that little dopamine hit that told me I was doing a good job.

Then one day a buddy said, 'Yeah, but in your company there are problems that shouldn't need to be fixed.'

Completely changed my way of thinking and set me on the path to start looking for a new job.

Same sort of situation here at my job. Myself and a group of three other developers began meeting weekly after work to go over coding technology and to challenge each other. We will bring ourselves up to speed with or without the help of our company.

And that's the attitude you need to adopt. The relevance of your knowledge base is your responsibility. Fight for it. Defend it.

Apart from learning, try these:

1. Put yourself in situations where you can meet more tech people

Most (not some, most) of the work I've gotten came from a chance conversation with someone who was working at a place that needed the skills I have. So try to have more of those conversations. I live in suburban Ohio in the heart of the rust belt, so this can be done anywhere.

2. Try consulting instead of full time work.

A lot of businesses have problems, but can't afford a full-time coder. It also sounds like you don't want to be working full-time anyhow. Try doubling your rate and finding 2 clients who each buy 10 of your hours a week. This is much easier to do if you do number 1. Even better, charge a daily or weekly rate so you don't have to keep track of your hours. This also allows you to pay your taxes on April 15th every year, instead of having it deducted from your check, giving you more cash flow options and more runway.

3. Work Remotely

When you do 2, you can negotiate 3 pretty easily. A business that just needs you to fix javascript bugs on their website 1 day a week probably doesn't want to dedicate the infrastructure to have you in their office. This will save you even more time, energy, and stress by eliminating your commute.

4. Structure your time better

Set constraints on yourself for doing what you need to do, when you need to do it. If you're coding 2 hours a day, then set aside 3 hours of your day where you don't do anything but code. No email. No web surfing (other than what you need to code). No phone. If you have meetings, schedule them consecutively. Let your brain be in meeting mode for 3 hours, then go grab some lunch, then come back to the office and put your brain in code mode for 3 hours. This way, you can even have time to multi-task (answer emails, talk about local sports team, read HN) at the beginning and end of the day. This takes some discipline, but you'll get more done if you have full chunks of time dedicated to one thing.

5. Say "No" more

You can't do 4 without doing 5. Don't be rude, just explain that you're busy with something else and that you can discuss at the next meeting you have scheduled. Put headphones on while you're coding and gently set boundaries with your co-workers that you're not available for chit-chat when your headphones are on. I've found that music without lyrics is best for coding. I have a John Williams station on Pandora that I use all the time, here, have a listen: http://www.pandora.com/?sc=sh216294333998280127&shareImp=tru....

Finally, don't give up hope. In my experience, it's easier to find a good job once you know what you don't want. It sounds like you have a good idea about that, so make sure to ask questions at your interviews, sales calls to make sure they aren't making the same mistakes.

Good luck!

I agree specially with #5. One of the aspects I was at fault for a long time was avoiding conflict and saying "OK" to all requests at work. There will be many times in which you will be asked non-sense or completely wrong tasks and you're completely entitled to say NO. Speak why something is not well planned or conceived or just plain wrong. Just by saying NO you'll cut a lot of crap you shouldn't accept.
Wow thanks for all the tips! Can you explain 1. A bit more. What kind of situations are they? How do you mention what you do or find out what they need?
When I was first getting started, I just looked up every web design firm in town and called them. A lot of the local firms just had people building websites with Wordpress or Joomla on managed hosting services, so being able to say "I know a guy that writes custom code" was good for their business. In a bigger city, there's a lot more coders, but there's also a lot more businesses, so I would think this would work just about anywhere.

There's a business incubator nearby that I frequented, and I found companies there that were using technologies that I knew. If you run into a collective like this, it's a good idea to introduce yourself to administrators, because they're always looking to solve their member companies problems with a suggestion. I introduced myself and let them know my skill set. The companies always found themselves in a pinch eventually, and I built a reputation for going into the middle of a project and helping to put out fires.

I would take strategic walks through areas where I knew there were technology companies, and just walk in and introduce myself.

Events are even better. If you can find business speakers at a local college, or business networking groups, these are great to go and find out what types of problems people have. Then you can come up with solutions and go back and try to sell them. You shouldn't even try to code anything, just pitch them your solution and tell them you'll build it for $X, get a down payment and start coding.

Thanks again! What would examples of business networking groups be? How did you you hear about business speakers?
There's a regular business network meeting in my home town, I don't know what it's called, but most of the web design firms I talked to had a rep at it every week. Ask people when you talk to them if they go to any meetups or groups like that.

Business speakers are even easier. Just go to a place where they are likely to have presentations - a college, a conference center, business expos - and see what events they have coming up. Scout bulletin boards. Speakers generally like to have an audience, so it shouldn't be too hard.

> I've found that music without lyrics is best for coding

Definitely. IMO it's likely that any intelligible words in songs will automatically interrupt/compete-with the parts of your brain you need available for reading and writing code.

If you really like vocals anyway, consider songs sung in languages that you don't know :p

I found myself in a very similar situation to you. I was working at a job that I didn't really like and knew that learning Rails was something that, on my own, would take many months to get proficient at before getting good enough to get a job. The way I broke out of my slump was to attend App Academy. I used the opportunity to really dive deep into Rails, and javascript, but also to meet a bunch of really great new people in a new place. (I had some previous web dev experience but no Rails and very little javascript and it was still absurdly useful :))
I was in a similar situation once. Here's the algorithm I came up with to get myself out:

1. Figure out what you want to do.

This is the most important step. You currently have a job, so you have time to really think about this and figure out a solid answer. The answer doesn't have to be an emotional epiphany where you find your so-called "passion", but it has to be a concrete goal. For me, it was more of a recovery of the idea that I wanted to apply my programming and computer science skills to interesting and difficult real-world problems. With that in mind, I looked at the place I was currently working at, and saw that I wasn't going to be able to achieve my goal there. So, I looked around and found another opportunity that was more along the lines of what I wanted to work on.

2. Figure out what skills you need to pursue your goal.

So, when I found the new job that I wanted, I interviewed for it, and got rejected. I asked for feedback, and I was told that my data structures and algorithms knowledge wasn't good enough. I suppose if I had followed my own advice, I'd have realized this before I applied. After stagnating at my old job, and foolishly taking a team lead position, my skills had certainly atrophied. However, the interview failure was exactly the kind of real feedback/wake up call that I needed.

3. Work on improving your skills so that you are ready to actively pursue your goal.

After failing the interview, and getting some feedback, I set to work rebuilding my data structures and algorithms knowledge. I bought a copy of Cormen, et al., and brought it everywhere. At work, I would go off and hide somewhere for an hour a day, and study some part of the textbook. At home, I worked on a core data structures and algorithms library in C. I'd get up an hour before work, and write unit tests or fix bugs. I'd use the evening to hack on new code for the library. I was pretty exhausted after work, and I had three kids, one of whom was only a few months old, but I pushed myself ahead because I had a goal, and I didn't want to be stuck in my current job any more.

4. Don't give up in the face of failure. Keep the dream alive.

After 5 months of study, and writing the data structures and algorithms library, I decided it was time to apply again for the new job I really wanted. I explained in a cover letter what I had done since the first interview rejection to address the feedback I'd received, why I really wanted to work at the company, and how I thought it lined up with my career goals. Within a week, I had heard back from the company, and scheduled another interview with them. Three weeks later, it was my first day on the job!

It was terrifying to apply for a second time. I had no backup plan. My current job at the time was starting to suck more, and I wasn't enjoying being a team lead, so something was going to have to change, one way or another. My life at home was exhausting, too, with the new baby and two other kids knocking around. But my wife was on board with my whole plan, and tried to give me the time to do the work I needed. It helped that we had friends and family who were struggling to find jobs - there's nothing like seeing other people hurting to give you a realistic perspective on your own life, what you have, and where your life should be going.

On the other side of all this, I've made it my mission to be continuously studying, cramming it in wherever and whenever I can. I never want to be back in that hole of skills atrophy. Also, at the start of every year, I make an assessment of where I'm at goal-wise, and I make a study plan for the year, including a substantial project to work on in my spare time that will help me get to where I think I need to be. Resist the urge to hop from one thing to the next. Focus on something, and master it before moving on to something else.

Good luck!

Why was taking the team lead position foolish? Were there no benefits to accompany the drawbacks?
(comment deleted)
It was foolish because I worked at a large company, and team leads were basically impotent eunuchs who ran errands for the higher ups. I also worked in a department that had pathological ideas on how long developers ought to work (including weekends), and how short product schedules should be (unfeasibly short).

There were some benefits. I loved being able to help the guys on my team. I did my best to promote their achievements, and argue for them at project schedule meetings. I was very happy to get one of my guys a really good placement on the "technical career path" system when it reared its ugly head at the company.

Ultimately, my strengths are in technical problem solving, not in managing the psychopaths who seem to ascend to the upper echelons of large companies.

I'm the worst for not taking my own advice but I've often heard it delivered to me in one form or another when I've been in these similar situations... so here it goes:

What do you like to do? Do more of that.

Easier said than done, I know. It comes off as an awfully curt way of suggesting that you throw out your entire life and reorganize it in a way that you can toy with your passions in pure bliss every waking moment. For those of us with families, mortgages, and responsibilities outside of work such advice seems useless.

But it's not entirely useless. You just have to do more of that thing which excites you. It won't replace the drudgery of your current job (or any possible job you can get thereafter). But if you aim to spend a few hours a week on it for the sake of being happy and doing interesting things you might find an opportunity to make it your thing.

Share your passion with others. Show them what you're up to. Aim to make a little progress each week. Keep it small. Finish one thing at a time. Don't leave dangling threads. Yadda yadda.

The flip side of asking yourself this question is that you have to be honest in order to make progress. You may not actually like programming. Or perhaps what you do like programming is so niche that there isn't an industry for it (notice how few postings there are for BF programmers?). It's okay to enjoy programming as a hobby. Maybe you're actually a carpenter in a world obsessed with gizmos and you'd be better off spending the majority of your days planing and staining wood. Fiddle with computers and neat programs at night. That sort of thing.

You're not living in a Kafka-esque dystopia. There are ways to get out of your rut. You just have to shift your perspective and be willing to do something about it.

When I need to learn something I first brain-storm a small project to work on. Doesn't have to be great or solve any world problems. Maybe it's just something for you. But in that project, be determined to use whatever framework you've set out to learn.

For me, I also have a coding blog (eonjava.com) where I will write an article on whatever I am working on. I have several articles right now that I am working on at once. I try to write them as if I am speaking to someone who has no previous knowledge of the topic so this forces me to learn it from the ground up. It might be worthwhile to start a blog and take this same tactic.

shubhamjain, I'm sure you are a good developer and will be able to turn this around. :)
I was in the same situation for more than four years. The only reason I stayed for so long was at the time my career wasn't very important to me -- my main focus was my band, and even though it was infuriating, my horrible job afforded me the time and money to be able to focus on music.

When the time came for me to think about moving on, I did a few different things. First off, I went to udemy.com and brushed up on my framework skills. At the time I was a front end developer, so I too courses in jQuery and Angular.js, then took a refresher course in Java. From there I started doing volunteer development work for local non-profits so I could round out my portfolio.

After that, my job hunt was pretty easy. All-in-all my ramp up took about 6 months or so, and it lead to me getting a job that I love.

(comment deleted)
Not to sound harsh, but you seem to have an unrealistic expectation about how rewarding a given job should be. The _vast_ majority of working folk do it for the pay check, then clock out at the end of the day and proceed to the part of their lives where their heart resides. Think about all the folks who works in retail, or food services, or manufacturing, not to mention agricultural workers, dish washers, maids etc. The notion that your career should reflect your passion is classist nonsense peddled by career counselors in upper middle class high schools and psychologically seductive but ill-conceived internet memes. You have a job that probably pays higher than the median national salary and doesn't expose you harsh physical conditions or toxic chemicals on a regular basis. Have some perspective and be grateful for what you have.

That being said: If you want a job that it is personally fulfilling to you on a reliable basis, then you need to take some risks. I would recommend either 1) starting your own company (it is your baby so you will care) or 2) freelance consulting (so you can pick your work).

Some of the points you're making dont seem to make sense. For instance you say you dont have time to make interesting things but then say you only program 2hrs out of the day. What are you doing those other 6hrs? And what about side projects outside of work?

Another key point that lead to crud work is a lack of experience. If your fresh out of school most job offers you'll get will be fairly crud type work until you've shown your able to handle more.

Education can also play a role in this. If you have a bachelor's or no degree experience will be your best friend. If you have a master's or phd you can generally get into some more exciting positions out of the gate.

Where else are you looking for work besides hn hiring / freelance threads? Those aren't even close to the best resources for finding great jobs.

> "I have never been good at learning new frameworks for just the purpose of learning"

Could not agree more with this statement. When I get into a software project really deeply, my work ethic is insane. Obsessive. As I need new technologies, I learn and assimilate them quickly because I'm so motivated to get to the end point. There's never been a tech I've given up on when plowing through a project -- well, maybe OpenCV.

Anyway, I've tried, as the OP has, to teach myself Rails or Django or whatever on the side as a "resume builder" and have lost interest each time. I just don't care enough to learn the not-totally-necessary tech to a degree that would actually do me any good in a job interview if I'm not doing it as part of a passion project where it is required.

From the other angle, when I get an idea and want to build it really fast, I don't have the patience to force myself to learn a new language or tech when, fuck it, I can just do it in Java or whatever.

Catch 22.

I think thats where side projects have to be something you care about. Scratch an itch whilst learning pet technology.

Ex: a friend of mine wanted to modify some data on his garmin GPS thing. He also wanted to learn Go and google app engine. A few weeks later he had resume items and the goal accomplished.