Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I work for a product development organization that is in online advertising. The assignments I receive are almost always on platforms or tools that I have never worked on before. At first it was android. Then node.js, then windows phone, then debian packaging, then python, hadoop, ganglia, reverse engineering, geo PostgreSQL, and the list goes on.

I am happy to be able to learn so much while on the job. The problem I keep running into is meeting deadlines. Often times it is not clear what is needed to be done to accomplish a certain task. I would need to set up the relevant SDK, run intobeginning issues, read online, pore through documentation, research online for every single item of work in that platform. Sometimes I am given deadlines, sometimes I create those deadlines.

I find it very hard to meet deadlines a lot of times. One becomes faster at doing something the second time around but I never work on some language or framework for longer than a week or two. And this is very stressful and painful to deal with. I get all the flak and public shaming that comes with missing deadlines. I suspect this cannot be normal. It cannot be possible to deliver 7 windows aphone apps not knowing a single thing about c# in a week. But I managed to do it one-day after the deadline. All I have a lot of times is google search to guide me. Often there is little to no documentation on the tool I am customizing.

I sometimes get stuck on something sometimes for hours or even days. This takes a toll on my health and I am no longer able to burn the midnight oil for every task. This causes a lot of mental anguish and depression.

In this situation, Am I correct in thinking any deadline I provide is a shot in the dark?

Is this normal? Does every single work item for you involve learning something completely new every time? I am not sure if it is fair to say I am a poor performer for not being able to meet deadlines on tasks involving a tool I don't know anything about. How do I handle this?

share|improve this question
8  
Time to talk to your supervisor. Depending on whether there's light at the end of the road, you may want to change to another job where there's more stability and time to learn. –  rwong Mar 11 '12 at 21:56
1  
Don't have any real answer for you, but +! for bringing up the issue. The answers here can probably help you and make others avoid that same situation. –  Qw4z1 Mar 12 '12 at 8:51
1  
It sounds like there's something very wrong with this organization. And that the wrongness goes well beyond how they manage you individually. –  user16764 Mar 12 '12 at 16:24
    
"I am no longer able to burn the midnight oil for every task" This should be the exception, rather than the norm. –  Burhan Ali Mar 24 '12 at 19:14

7 Answers 7

Yeah, this a perfect recipe for burnout. You have to make your supervisors realize the ridiculous situations they are constantly putting you in. If they're staunch and refuse to budge, it's time to move elsewhere.

share|improve this answer
    
I agree, this is a recipe for burnout and/or other mental health problems. While there is a bewildering array of technologies out there, it does seem to be more normal to specialize in certain areas, rather than change from week to week !! I would start looking for a new job. One good thing from the job is you can add a massive list of tools to your CV ! –  Antonio2011a Mar 12 '12 at 6:57

There are two approaches to take here. The first is to take the time it took you to do the last project that was "similar" to the new one. And double it to account for the cost of setting up/learning a new environment.

The second is to let them know that you need to specialize in order to excel. A jack of all trades is a master of none.

share|improve this answer
    
Do you need to specialize? Is there anything wrong with being "good" at lots of things? I would argue that being able to pick up new things quickly and run with them is a skill in itself. I also personally find it interesting to have new things thrown at you on a regular basis! –  PhillC Mar 27 '12 at 11:47
    
@PhillColeman, I think it is possible to learn a breadth of technologies. But the rapid-fire pace the original poster described is not the way. I'd argue that spending a year on each platform (at a minimum) would be the best path to competence. I spent 6 years doing Enterprise Java and transitioned to .NET for the past 9. I feel comfortable enough to go back to Java (especially now that EJBs have been ditched...err fixed). If I had spent 3 months in Java and 3 months in .NET, then 3 in Ruby I wouldn't comfortable with either. –  Mike Brown Mar 27 '12 at 15:24

Is this normal? Does every single work item for you involve learning something completely new every time?

No.

If you want to give better estimations, learn from the past. Keep track of how long it takes you to ramp up on a new technology versus the actual implementation. This can be difficult if you're doing both at the same time, but try to be cognizant of the difference.

Do your estimates based on a normal workday, minus normal interruptions. Don't account for overtime in your estimate. Leave that for helping deal with any issues that arise. I like to use overtime to help bring in projects on time if there are setbacks.

Always leverage what you know, even if it's completely unfamiliar territory. For example, knowing one programming language will help you in learning another. Once you are exposed to different paradigms, you will be able to determine the closest relative technology to draw from. For example, if you need to use C# and don't know it, you could draw on your knowledge of Java or C++ to get going. It's not going to be a one-to-one and there are usually different methods of accomplishing what you need, but it's a good starting point.

So, in situations like this, it's best to estimate the implementation based on something you already know. Add in some padding for fixing issues and dealing with the unknown (usually a small percentage of the total estimate). On top of this, you add some additional time for research and learning to get up to speed on any new technology you will need to use. This estimate can be affected by things like availability of documentation (like API documentation, blog posts, questions on these sites).

Now that that's out of the way, we get to the other matter: predetermined deadlines. It's one thing to miss your own estimations as they are your responsibility, but it's quite another to be given a deadline that is unrealistic (which I'm guessing is happening in your case). In this situation, it is best to still perform your own estimate to see if the deadline is feasible or not. If it isn't, let your supervisor know as soon as possible what your estimated deadline is and why it is different. If you can provide a breakdown of the various tasks and hours needed to complete each, it would help support your estimate.

If management is not receptive to your input, then it may be time to look elsewhere. The more accurate your estimates are over time, the more likely that management will listen to you if your estimates differ from theirs. This relies on management being reasonable and objective, of course.

One more thing - you didn't mention this, but if you are allowed vacation benefits, use them. Don't let them go unused. You won't be doing yourself or anyone you work for any favors if your health or focus deteriorates to the point where you aren't able to complete projects favorably. If you aren't allowed to take vacations because a project is always due by x date and it conflicts with vacation, it is time to look elsewhere - especially with the way you're expected to fulfill these requirements.

I wish you good luck.

share|improve this answer

You are absolutely right in your feelings. There's a lot of falseness going on right now around the following areas:

"Full Stack Engineer". It's baloney. I don't know anyone who is excellent on the backend languages, excllent in the database and excellent on the front end. People might be good at half a dozen languages and/or three different database systems but there's still gonna be a lot they are novices at.

"Jack of all trades, master of none" senior folks understand this and learn that they need to choose areas to specialize in.

"10,000 hours". A common reference to being really good ('expert) at something. Compare that to the hours you're spending in each of these areas. You might need to live to be 178 to get expert in them all.

So the above is not "the answer", it's agreement and more fodder for your cannon... because the answer is that you need to set up a meeting with management and let them know that these projects have been great, you've loved helping the company out in all these different areas. But you are suffering. It's affecting your health. You're stressed. You want to deliver a high quality on-time product, but these circumstances are making it insanely hard. It's made you even question your future at the company. If you're both good and highly valued it shouldn't be a problem.

share|improve this answer

This kind of work is typical in interactive agencies. An endless stream of unrelated, throwaway projects under impossible deadlines.

Look at this as a potentially useful career stage but be ready to move on before you burn out. You cannot change this business and its needs.

share|improve this answer
    
What is an interactive agency? I'm afraid I'm not familiar with that term. –  user16764 Mar 12 '12 at 15:56

Start reserving time for estimation. The less familiar you are with a technology, the more time you need in order to produce a good estimate.

Try to get a fixed amount of time to produce something exploratory toward the needs given. You should have a much better idea of what you need to do after that. For instance, one or two weeks to get up to speed on Hadoop is on the low end, but it should be enough to give you more confidence in your estimates.

After that, you just need more estimation skills. Try tracking what you spend your time on. Make sure that always gets into your estimates up front. Track your estimates versus the actual time spent and factor that into future estimates.

And always give yourself a buffer.

share|improve this answer

First - make sure you know who made the commitment - if it's yours, it's your problem and you should meet it. If it's not yours, its not your problem. Tell whoever made the commitment on your behalf that you will do the best you can. Now the trick - don't make commitments you can't keep. Stick to your guns.

You are being bullied -whats the laws in your country around that?

A couple of useful phases I have used (sparingly, only when I have other options)

  • "You cannot negotiate estimates, what features do you want to drop? What about quality?"
  • "I don't do death march."
  • "If you think x can be done in y, You do it. I'll enjoy watching you fail."
  • "Where did that estimate/timeline come from? Well, get them to do it"
  • "Project management is like a spring, the more you compress it, the bigger the mess when it slips, feeling lucky?"
  • "You do your job, let me do mine"
  • "I'd love to make that commitment, and I understand that you need x by y and how important it is to you. To make this work I need (fill in what will make the biggest difference)"
share|improve this answer
    
Most of those are very confrontational and I don't think will help with addressing the underlying problem. They'll just get you a reputation as being difficult and/or a troublemaker. –  Burhan Ali Mar 24 '12 at 19:33

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.