views:

867

answers:

19

Let's say, for example, that a marketing group in your company asks you, a sole web developer, to build a widget (some type of web application, web feature, etc.) in 2 weeks.

Given the following hypothetical facts:

  • Your normal work duties involve building web pages in HTML and CSS and with a very limited knowledge of JavaScript.
  • Building this widget would require programming in PHP (or a similar web programming language) for which you have no knowledge or experience.
  • You have no formal training in programming or computer science.
  • You have a full workload of normal, yet demanding high-priority projects already on your plate, and don't have a realistic way to fit in the work hours it would take to (1) research the specifications for developing said widget, (2) research a feasible third party solution, (3) learn enough about the programming language in order to write code from scratch, or incorporate pre-written code, and finally -- after all the necessary research, learning, and planning (4) actually produce a working version of the widget.
  • Your best-guessed estimate for presenting a working version of the widget is a month or longer, and the marketing group has little (if any) flexibility in their deadline. (Certainly, not a month or more.)
  • Given all the daunting facts above, you're sweating profusely; however, you really want to take on this project as you have a genuine interest in it, and if you could somehow pull it off, it would beef up your portfolio and possibly lead to even greater opportunities within the company and beyond.
  • The stress from your lack of knowledge/experience and the high risk of failure could result in an adverse effect (to some x degree) on your job, career, and/or life.

Do you:

a. Spend all your nights and weekends (i.e., off time) for the next 2 weeks feverishly reading blogs and books in an attempt to scrape up enough knowledge to put something together (but risk building something that fails miserably).

b. Give the marketing group a sincere, yet blunt answer that you simply don't have the time and they need to look elsewhere (therefore losing a project opportunity and risking that you will never be asked again to do something like this within the company).

c. Give the marketing group a sincere, yet blunt answer that you're not the best person to build this widget, as you don't have the capabilities at this time (therefore giving you the time to acquire the necessary knowledge at your own pace, but then again, losing an opportunity and risking that you will never be asked again to do something like this in the company).

d. None of the above (please specify).

+31  A: 

If you have integrity as a developer, you should know which answer to pick. If you don't believe you can deliver a professional product in the given time span, you should definitely turn the offer down. Learn new languages at your own expense, but never at the expense of the customer.

I'm sorry if my answer comes across as somewhat harsh, but the kind of behavior answer .a implies gives us all a bad name.

Eran Galperin
This is tough, but the marketing guys are trying to take serious advantage of you. They won't understand how much effort you'd put into this and would be impressed with nothing short of obviously working code.
Terry Donaghe
Terry, good point. Eran, I agree with your response, but, how would you turn it down?
I would try find someone I trust that can get it done, and recommend him instead. I would explain to the marketing guys that currently there is someone more qualified to handle this as you are still unsure you can handle it. Being upfront will earn you trust in future dealings with those people.
Eran Galperin
@ CodeCurious: Rather than turn it down outright, estimate how long all those tasks are going to take (including learning new technologies), and present it as "Yes you can have it, but this is how long it will take".
Mitch Wheat
if the called you and asked you to build them a house would you learn carpentry? How about if they asked you to drive an 18 wheeler filled with chickens, would you learn to drive a rig? you'd easily say i dont't do that..
baash05
+4  A: 

I would explain to them why you believe it's not possible to carry out the task matching their criteria. Especially if they are not developers themselves, the people making the requests often have absolutely no concept how much effort it will take to achieve them. Don't be timid, just present them with exactly the facts you have here.

Kamil Kisiel
+4  A: 

I would go with b or c.

You really need to dedicate and focus specific time to just improving your skills, one skill at a time. I mean take your time and understand things. This is an investment in your future and your value to others. You will gain increased confidence, be able to more easily address problems as they arise, and feel more empowered to take on greater challenges.

If you continually scrape by without understanding the fundamentals of your environment, eventually this will catch up to you. You will perpetually be in a panic mode. You will never really know how long it takes to do things. Every problem will freak you out. Your development will involve overcoming one unplanned frustration after another. When you're in this mode, feel like you're up to your neck, its time to take a step back, take a deep breath, and learn.

Learning, btw, is so fundamental to being a software engineer. Not only are there the gazillion tools/languages/etc software professionals have dreamed up to make things "easier", there's the problem domain of the application you are trying to write. Software engineering is rarely done in a vacuum, its done in a problem domain you need to gain at least some proficiency in.

So you won't have much of a future unless you can figure out how to wisely invest time in your own professional development.

Doug T.
A: 

If it's a very simple PHP project, and you've got the guts, go for it.

If it's something more complex than that, then you probably will fail miserably. Don't do it. If you're looking to understand more programming, do it on your time—you should have at least a couple personal projects under your belt before you embark on a project that's even slightly complex.

Peter Crabtree
Without having any experience in PHP, how is someone supposed to know what is a complex project. The appearance of a project's complexity does not always translate to the complexity of the code.
synchrome
Also complexity has a way of creaping into seamingly simple programming tasks.
John MacIntyre
I can attest to this. I am always underestimating how much work something takes... even when I know how to do it I often end up forgetting something until I actually do it. :(
metanaito
+3  A: 

Option "a" is right out - if you've never programmed before, there's no way you'll be able to ramp yourself up far enough to deliver a solid, robust solution in two weeks. You might be able to deliver something that kind of works in that amount of time - but it will inevitably be full of bugs and just plain bad programming. Options "b" and "c" are, as you've said, potentially career-limiting.

If your long-term goals at this company include management, you might volunteer to handle the project, with the understanding that you'd be hiring a consultant or contractor to actually write the code.

Sherm Pendley
+4  A: 

I would consult with my manager or team lead to discuss. There must be someone an a manager supervisor role who decides what project to work on and what takes priority?

If I had no manager or supervisor I would fire my marketing department :P ... just kidding.

The situation sounds like it would be impossible to take on this project under the current workload. However I would discuss with the people involved to find out more about the requirements. Perhaps it could be done differently or perhaps it's not as difficult as it sounds. If it turns out looking not possible I would have to let them know.

I would not take on a project if I didn't know how to do it or didn't have a good idea on how it could be done because that increases the chance of failure especially when you are dealing directly with marketing who will very likely change the requirements mid project if they are asking for something in 2 weeks.

Even if I could not do what was needed I could learn it on my own time so I would always discuss further to find out as many details as possible before making a decision.

metanaito
+1  A: 

I'd tell them that I am very motivated to take on this challenge and that I would do the best I can to meet their ambitious deadline; however, I haven't done this kind of project before and it would require me to come up to speed quickly with the new skills.

So this is (a) but be very upfront with them about your skills and about the timeline. The key is to let them know that you really want to do this.

If they accept, start with books -- you need to get a solid foundation -- and then move to internet searching when you're looking for targeted information.

jdigital
From past experience working with a lot of marketing people (ad firm, internal marketing at various companies, etc.) This won't work. They may say it's ok, but if you don't have a working app at the end, you're toast!
Andrew Van Slaars
@Andrew Van Slaars : agreed.
Mitch Wheat
A: 

I would ask them why on earth they are selling a service that require me to work with something that I know nothing about (ie. PHP in this case).

Seriously, if your marketing people are not selling what you know you can deliver, you have a serious issue!

Now, personally I would be sweating because I would never work for a company that had so little communication between the people that did something and the people that promised that someone would do something that someone would promise something to be done that nobody can do. I would sweat because obviously I've started working for the wrong company.

The correct way in this case is to inform the customer or potential customer that the project either:

  • a) can't be done
  • b) will take longer than promised

and that he can pick one, but not the c) option which is obviously that the customer gets what he wants in the time promised.

Unless you can work magic.

Lasse V. Karlsen
+1  A: 

If you honestly can't see yourself being able to do it, then C or B.
B maybe best from a career standpoint, but be ready to justify your assertion of not enough time.

It will mean, less pain, and pain done with faster.

It will give marketing (maybe) enough time to find an alternative, or find out that their expectations were way out of line to start with.

If you go with option A, and, as sounds likely by the way you have phrased it, it fails, you will have made enemies in marketing, who often have the ears of senior management, and all your other projects will be behind schedule too. Probably much worse from the career POV.

seanb
+1  A: 

You missed option D, which is to attempt to educate the requestor(s) that setting a deadline before evaluating the work involved and formulating a proper estimate, is putting the cart before the horse.

George Jempty
+1  A: 

Is it possible to find someone in the company who has the skills to do the project and team with them to accomplish it? Perhaps, with enough skill you could meet project deadline (though I'm guessing that the deadline is probably too short anyway, but that's another issue). Finding a mentor is a great way to learn a new skill quickly and it would enable you to keep your foot in the door.

tvanfosson
+3  A: 

Be honest and tell them you just don't have the skillset to do this effectively, and it would be a high risk for you to attempt it.

Then recommend they do one of 2 things :

  1. Have another internal or external developer do it
  2. Have you do as much as you can with your skillset, then out-source the parts you can't do.

Be positive and solution focused. They should respect your honesty, and solution focus. If they don't go else where.

Don't worry about 'never be asked again', dishonesty will lead to a very stressfull life, and it will creap into the rest of your life! In time when you gain these skills, you can whip up small things, show it to the powers that be, and they will start asking you to do more.

Good luck.

Edit: One more thing, you might have the 'brilliant' idea to copy and paste code from somewhere else to get it done. If so, don't. Even if you get it working, if anything goes wrong, or they want something tweaked, you'll be screwed.

John MacIntyre
+1  A: 

E: spend as much time as you have allocated to this task looking for something similar in the Open Source community. Grab it and start editing. Keep everyone informed of what you are doing, how much time you are spending on it and your progress.

If you make it work, great! If not, try to always keep it demo able so you can show progress.

Don't forget to release the results as open source when you are done.

The important part here is clarity--let them know what you're up to. You will look better if you say "I don't have experience in this but let's see what we can do" then if you say "I can't do that in the time alloted". You might even blog your progress every few hours so that when they ask you can say "This" is what I've been doing!

By the way this has a much better career potential than any of your other answers.

Bill K
+2  A: 

There are a couple of different approaches I'd take here:

1) Ask higher up for direction. If you can ask your manager or team lead, they may be able to re-prioritize your work so this new thing becomes what is at the top of the heap. Additionally, it would be helpful to get someone else's take of "How important is this, really" as it may be that someone in marketing thinks this would be really cool and a few others agree but the idea has more holes than a pound of Swiss cheese when it gets scrutinized.

2) Suggest that you be given x hours of time to investigate what is involved in getting it done and how plausible it is. This is where you give yourself some time to do some of the research and estimating to see if what they are asking for is fairly simple, e.g. a web page that records what some website visitor would like to see, to rather hugely complicated, e.g. write all the code needed to replace how a company may extensively use the various software services that Google provides or some other task that would be a good Ph. D. thesis topic like solving the traveling salesmen problem in polynomial time.

The first is preferable if you have a good relationship with your boss and think that this person could act as a bit of a project manager for this so that it doesn't get out of control. On the other hand, if I didn't feel like giving that much control over to my boss the second option would be my choice though both seem to be other choices than what you list as the second choice is really about time boxing what you do so that you are telling them that you are only going to do this for X and not X^2 number of hours.

JB King
+1  A: 

Here is what you should do when you're asked a question and you don't know the answer:

Say, "I don't know."

Every other answer you might give is creating a new role for yourself: The Guy Who Doesn't Know What He's Talking About. That's what you'll be "beefing up your portfolio" with. You can imagine what opportunities being The Guy Who Doesn't Know What He's Talking About opens up for you, too.

If you worked for me, for instance, you'd soon find yourself with the opportunity of finding another job. The question, "Is this developer going to work out?" is generally a hard one to answer unless he's an obvious rock star, but being The Guy Who Doesn't Know What He's Talking About shortcuts that agonizing decision process admirably.

Robert Rossney
+1  A: 

If you are offered an “I have no idea how to do this” programming project, then the simple honest response is “I have no idea how to do this”, but obviously, you are interested, so say that too. Your enthusiasm, your desire to learn, AND your honesty should earn you a decent response.

You could ask for a little time to research the problem before committing. Given your current description of experience, problem and time frame, it seems likely that there isn't enough time, unless you can find and correctly recognize a reusable solution.

Learn from the experience. Expand your skills and be better prepared for the next chance.

dongilmore
A: 

I might accept on the condition that I be permitted to select and engage one or more experts who do understand the technology, its implementation, and the associated pitfalls. Step 1 would be asking the experts for a feasibility analysis and schedule.

Adam Liss
+1  A: 

I would choose (d). If you do (a) you're most likely setting yourself up for failure. If you do (b) you may indeed take a hit on your reputation. If you do (c) you may come across as incompetent since your customer may not know the difference between html, css, php, java, javascript, etc; and simply assume you have no business being in your profession. For (d) I would do my best to estimate how much time it would actually take me to complete the new feature(s). My estimate would include time for analysis, design, code, test, and deployment. The analysis phase could absorb the time it takes you to learn new technologies. Since there would be some unknowns I would add a small percentage of padding to my estimate. I would add a little more padding for negotiating room with my customer. After my estimate was firmed up I would present it to my customer. Here are some possible outcomes: [Outcome 1] The customer could care less about my estimate and insist that there is a hard deadline. In this case I would let the customer know I will do my best to complete the feature(s) but there is a risk that the feature(s) may not be delivered on time. I would leave it up to the customer with how to proceed. Assuming the decision was to proceed I would continue with (a) and hope for the best. The difference between this scenario and (a) is that I would have a better chance of not taking a huge hit on my reputation. [Outcome 2] The customer takes my estimate into consideration but doesn't believe it should take so long. I negotiate on the estimate and try to keep from going too far below my padding. After negotiating I continue with (a) in the hopes that I can deliver on time or earlier. [Outcome 3] The customer accepts my estimate as-is. I continue with (a) in the hopes that I can deliver on time or earlier. This scenario is obviously the best since I would have the best shot at delivering early.

rich
A: 

I had a problem like this at work.

I do .NET but had to design a template for a commercial CMS (MovableType), which required all sorts of specific knowledge. My boss was on holiday and I made it clear I was not cut out for the work and the person who is doing it now knows what a PITA the project is, due to the CMS side of things.

So, just be honest and don't be afraid to admit you haven't got the skill to do the work - especially when your skills are something else and the companies knows that (like here).

dotnetdev