Ask HN: What do you do when your entire being opposes the task at hand?
I am assigned a feature to implement, usually vague and something that I feel adds unnecessary complexity to the codebase. I try to reason with my managers, but usually their minds are already made up. I then struggle with finishing this feature, logging hours upon hours against it...not because it takes so long to code, but because I can't make myself do it and waste hours motivating myself to do it. Also I waste considerable amount of time trying to do things in the most readable, maintainable and simple way possible. This means weighing merits of different solutions and choosing one. I am a really hesitant decision maker, resulting in more wasted hours.
The haranguing part is that my managers don't fire me. They don't see how many hours I have wasted, how unmotivated I am. Instead they treat me as one of their most valued employees (oh the irony!). (I am not in a position to change jobs at the moment. I am helping my BF's startup by doing this job.)
Have you been in such situations? How do you get in the zone and get it done when your entire being is revolting against the task?
209 comments
[ 2.5 ms ] story [ 341 ms ] threadI've also found focusing on tests helps. Write as many tests as possible - focusing on getting those to pass. In theory, by the time you're done, the feature will be to.
Pick things that incidentally accomplish the assigned goal. For example,
1. Pick an amount of time, like 3 hours, repeat this cycle
2. make a branch
3. implement the feature in the fastest way you can
4. think about why this isn't acceptable
5. throw away the branch
6. do it again avoiding one thing that made the last one crappy
Also, weighing merits of different solutions and picking one is your job -- no need to feel bad about that. Come up with an assessment tool that will help you decide. Time-box decision making, but don't stop thinking about your solution -- just give it the appropriate amount of time, not unbounded.
Making progress is motivating. You want to end up at the same place but have the feeling of progress making throughout the process. I believe that it's possible you are taking the appropriate amount of time to do the work at hand, but you are getting into an anxiety/depression cycle because you can't get into a flow state.
Is waste really the right word here?
They don't see how many hours I have wasted, how unmotivated I am. Instead they treat me as one of their most valued employees (oh the irony!).
"When given a vague, annoying feature to implement, very carefully considered approaches and built it in a surprisingly readable and maintainable way"
What you're experiencing isn't atypical - sometimes programming something sucks! Your employer values your ability to power through it and still get good results.
...anything other than the task at hand, obviously. :-)
Set yourself small very clear goals which you write down and where you commit yourself to finishing them in a given amount of time.
However, what your mind is telling you with the feelings you experience in my opinion is something along the lines of "Don't do this, it's not great".
So when you experience this very often, you need to change something in your life, or else you'll fall into depression because you have overcome your inner hesistation one time too often.
Don't take this as a scientifically accurate account, just my personal experience.
As far as I know the only way to get over burnout is to stop. If you do not you will suffer more. I wish I had better news.
God is perfectly just.
If we have a bad president, let it be. We have a sinful nation and God is punishing us with a bad president. Maybe, your neighbor is bad or the CIA is bad or New Orleans is bad or Haiti.
It is hard to shoot the right people, but God has perfect aim.
2) Challenge yourself to finish the project as quickly as possible. If a realistic estimate is that the work will take 1 week then try to finish it in 1-2 days. If it is awful work, try to get it over as quickly as possible. It helps if you can find an existing solution that you can use as a starting point.
3) If you're paid hourly, you might consider outsourcing the problem to someone off of elance. You should reframe the problem so that it doesn't require you to share any info (source code etc) from your employer with the person you outsource to. Ideally, ask the person to create an open source project on github.
1. If I'm working on something vague, try to extract more information about it. It's very hard dealing with frequent changes on a complex code base. I'd try to find out who the stakeholders are, customer is, and most importantly, what they are trying to achieve that this serves.
2. Break it down into smaller tasks and measure myself against these. I want to leave work having completed something and not return to work knowing I didn't complete something.
3. Try bringing a colleague in to help you, such as talking through the existing code and bouncing ideas off them. The energy a colleague puts in can help with motivation.
4. Make sure there is an end to it and that it's not an open scope. You'll never finish something if the stakeholder doesn't know what they actually want.
5. If this looks like it's the norm and you're not happy, while you say you can't change jobs now, put the plan in motion for when you can. Think about your CV, learning new things, etc that help. When the time is right you want to be ready to jump.
6. Get enough sleep. I find I procrastinate more when I'm tired. Of course, eat healthily and exercise.
7. Try to remove other distractions, such as any other commitments at work as a 10 minute interruption can cost you an hour if you're not in the flow of the work.
I seem to have a finite pool for motivating (or more accurately forcing) myself to do work. And when that pool is empty, it's off to HN or Reddit I go. Frustrating, and I still don't have a solution yet.
Hope this helps.
The consensus of what I've read is that most pharmaceuticals are temporary fixes, at least for adults. But that's just heresay from the internet, so I might be wrong.
And for the record, since they are always so highly advised, yes, I already have good exercise, recreation and mental reflection routines in place. :)
But, enough on that. A few years before then, I felt like you did, but I wasn't actually in that situation. There is a very real positive feedback loop in effect - you feel like you're doing a bad job, so work longer hours on it, end up taking longer, feeling like you have "wasted" hours, and feel worse about doing a bad job.
Believe your employers when they say you are doing great, otherwise you're likely to be heading down the burnout route which had me off sick for half a year. It's not every coder that has such high standards as you, and that is not something to be ashamed of. Be proud of the code that you have produced. Think to yourself "It's just as well I wrote this bit, because if X had, it would have been awful".
I know this sounds like extreme arrogance, however sometimes it is necessary for the purposes of regaining balance. It sounds like you are being a little too humble. If it gets too bad though, get some help from someone.
Consider working on the next level and using this as a chance to study when and where the effort is actually worth it. It may feel like you're handing yourself a license to be sloppier, but if done correctly this actually turns you into an even more capable developer than someone who finely engineers everything, because you'll have that much more time to finely engineer the things that matter once you clear away the time of fine engineering of the things that don't, and on the whole you'll be creating much more value in your code.
And on the other hand, "maintain" is a very ambiguous word. If you are frustrated because it took you ten minutes to add one field to a form, once in the course of 3 years (to put some concrete numbers on for example's sake), you still came out ahead not spending an additional 10 hours polishing the code to a fine sheen, so you could be happy adding that one field 3 years later and saving that ten minutes. If you're frustrated because you actually have to overhaul it significantly, and it's a mess, and now you've also dropped all your context and can't remember what is what at all, and you could have cleaned up up three years ago in three hours and now lose two weeks just to understanding what the hell, then you've lost, yes. And of course "maintain" can mean a lot more than either of those two cases, too.
And as a final note, it's all gambling, and that is also something you must come to grips with. You don't really know where the changes are going to be in three years. However, you can learn to guess with a success rate much higher than mere random chance. (Don't forget to discount future time appropriately.)
It's good that you are getting your job done, but it seems that you are still having issues setting aside your personal feelings and emotions. This is pretty normal for inexperienced developers. It's something you should focus on working on.
Here's how I developed that skill:
1) Remind myself that this is not my company or my project. It's someone else's. There's no reason for me to feel so personally invested in the project as a whole. If I've voiced my concerns and thoughts and been overruled, then my job is to get what is asked of me done to the best of my ability.
2) Have side projects that ARE personal and that I CAN be emotionally invested in. When you have a side project where you do call the shots and it's done 100% the way you want, you will find it is easier to not be so emotional over your day job.
3) Lastly, I have found that as I get more experienced and better at explaining myself, situations where managers overrule me and tell me to do something that is against my own recommendation become more and more rare (they'll still happen sometimes as long as someone above you can make unilateral decisions, so never expect it to fully go away.)
It's good that you've recognized your situation needs to change. Best of luck.
I think that's also why many posters here are saying 'use some new language feature X to make your work project more exciting' - basically adding a side project into your day job. [I think that road can lead to ruin, if you're making it harder on the next person to work on the code. Be careful and considerate.]
I think you're over estimating how much time you need for a side project. You can even just spend a couple hours on a couple weekends a month on something. Or even every other month. You don't have to work on it every day or anything. That's the great thing about it being a side project. There's no rush. No timetable other than whatever you choose for yourself.
If this sounds like it could be your style, grab a buddy and see if you can hammer out some of the small stuff together. If not, some of the other suggestions here are good as well.
It's easier to stay on an interesting task, but here a good pair keeps you from going off the rails and totally losing track of the goal.
It's amazing how much better a boring project is when the sample files you upload are image macros with your boss's head photoshopped on a walrus, and there's someone next to you laughing.
What helps me most is finding a technical challenge that makes the feature interesting and fun to implement. This shouldn't be too hard, if you are free to design the feature technically. Hope that little hack helps you getting things done.
I can completely identify with some of the points made, my particular frustration is working with appalling specifications that are 9 times out of 10 incorrect/incomplete quiet often leading to features being written multiple times. It's demoralizing. I have no particular solution, some will say just knuckle down but it's easier said than done, there are some tasks that just can't be made interesting. Unlike the OP I can change job and am, next week.
however i feel inclined to reserve that for serious problems, like weak leadership, oppressive or immoral behaviour etc. rather than poor features or undesirable work...
doing things you don't want to do is part of work. letting your leaders make their mistakes and learn from it is part of it too. i'm strongly inclined to say you just need to grow up a bit and get on with it... and be grateful that this is a 'problem' for you because its nothing compared to what most people consider to a problem in the workplace.
"Also I waste considerable amount of time trying to do things in the most readable, maintainable and simple way possible"
Motivation is tied to your attitude here as you are looking to do more 'interesting' work, whereas the task at hand looks boring. However the task at hand could be important for the company, so it is important to take trouble understand the big picture here. Most engineers (and I am one of them) are too self-centered to do this, and this can be debilitating.
It involves coming out of your shell, being proactive to talk to the business, product and other areas and see why these set of features that needs to get done has important implications.
At the end of the day, everything is about service. If you enhance your attitude to think more in a service-oriented way (it is not all about you), this changes your 'attitude profile', and in turn can boost your motivation factor by several orders. Suddenly what looked boring becomes very important. It may mean to be more pragmatic ( no ideological fixations on 'purity of code'), roll up your sleeves and get it done.
The valuable service to the customer, can lead into repeat business, which adds to the bottom line, and that later could mean more bonus for you, which you can use it up for that special time with your BF that you have been planning for a while.
And, if you can't change jobs, then consider coming up with a side project. It doesn't have to be commercial, or even of particularly general application; even if you're just scratching an itch of your own, it'll give you scope to exercise the agency whose absence in your day job is giving you fits.
Every time I've reached that point that you have described, I've quit. It was the best thing for me every time, too. There is no point wasting your time doing something you don't want to do, especially if it's for someone you care about. You'll just do a shitty job and you don't want to dump shitty jobs on people you care about.
Is it just that the work is boring, or are you being asked to do unethical things? I mean, either way, I would quit, but if it's anything unethical I would urge you to run as fast as possible.
However, if it's just "boring" work, perhaps recasting it in a different light might help. Look at it as a game of seeing how many you can finish in a single week. Stop worrying about doing the "best" job on it. If the project is so boring to you, then you probably shouldn't care so much about the quality of it. Just dump out some garbage, get the checkboxes filled, see how much you can get away with. Make it a learning experience, a chance to test your boundaries.
Take care of yourself first, even if it means a slower launch for the startup! And it sounds like you have good coding practices and are well-regarded at your current position, so hopefully you could find another job that is more aligned with your values. Best of luck!
If you were actually working at the startup, on its principal mission, then your problem would be more complex. Not only would you have to think about the appropriateness/advisability of the particular feature you're implementing, but you'd have to constantly evaluate it in light of your relationship with your SO and your prospects in the new company. It would be very difficult to separate these questions in your mind, so IMHO it's a good thing you don't have to.