78

In February I was hired as a Software Developer Apprentice. I mainly code in C# which I have learnt in this apprenticeship. I am currently rewriting a programme the company currently uses. Within this program I have to use iTextSharp that I have never learnt, to create a PDF using all the winform controls the user has filled out. How should I tell my employer that I am unable to complete this part of the program? I cannot ask any other member of my department because no one else is a programmer and none of them know how to code.

I asked this question because this is first ever job and I really wasn't sure what to do because of my deadline. I am learning iTextSharp and my employer is aware of this. It's just that I was scared I will miss my deadline and get fired for it. I had a few weeks of training in London but no one in my workplace is training me. None of them know how to code.

6
  • 1
    Comments are not for extended discussion; this conversation has been moved to chat.
    – enderland
    Commented Dec 6, 2016 at 18:52
  • Regarding your edit: "no one in my workplace is training me, none of them know how to code". The existing answers still apply to this situation, just that "see if someone in your company can help" is not an option for you. There are still plenty of other alternative solutions though. Commented Dec 6, 2016 at 20:59
  • 3
    This is not an answer, but a potential work-around. One of my C# projects also required that the app produce a PDF output file. I had neither the time nor experience to hand code it using an API. I ended up including a (background) PDF virtual printer driver with the application, rendering the printout in a memory XAML page and sending it to PrintDialog.PrintVisual with the PDF printer as a hard-coded print server printer selection. Its crude, but it worked for me. Commented Dec 7, 2016 at 14:54
  • 12
    "Software Developer Apprentice" - Apprentice to whom? That person should be your mentor. Commented Dec 7, 2016 at 22:19
  • 2
    Some of the answers are a bit preachy. The key thing to keep in mind is that you will not get fired for slipping a deadline because of a hard and unexpected problem as long as you're upfront about it.
    – teego1967
    Commented Dec 8, 2016 at 10:52

10 Answers 10

212

First, change your attitude.

It is not that you cannot complete the task, it is that you lack the knowledge and expertise.

The difference? If you say "I can't do it" to your employer, you may as well pack your things, because you are DONE.

If you say "I don't have the knowledge or expertise" then management can address that by either upskilling you or by sending resources in your direction to assist.

Never say you cannot do a task. Do some research on your own so that you can approach management. "Boss, I haven't done this before but I found a class I can take for "X" hundred dollars. or "Boss, I haven't done this before but I found some great online stuff and should be able to get up to speed by "X"" or, failing that. "Boss, I haven't done this before, is there someone in the company who can show me how?" If it is something that simply cannot be learned in the required timeframe then as Mehrdad said, bring this up to management immediately, and ask for additional resources be directed to you.

If you go into management, have a solution ready. It shows initiative. Also, admitting that something is beyond you will increase confidence in you, not decrease it. The last thing I ever want is to be working with someone who does not know their limitations, and have to go back and fix a mess.

It is both responsible and professional to alert management to show-stoppers and present options. It is irresponsible and unprofessional to just throw up your hands and say "I cant do it?

11
  • 19
    @RichardU: Regarding your answer, what about things where the required "expertise" is something along the lines of a Ph.D.? Like say, making good image recognition software for a self-driving car? Would you still expect the OP to go and say "Boss, I haven't done this before, but if you'd like to fund a Ph.D., I can go learn"? Or would you expect him to just say "Boss, I can't do this, this is something Ph.D. still struggle with"? My main point being, there seem to be situations in which it's OK to say you can't do something, but you just completely ruled them out... maybe mention that?
    – user541686
    Commented Dec 6, 2016 at 13:08
  • 2
    Also, you may want to add something like "I should have told you this right away, but to be honest I didn't know the best way to tell you." Commented Dec 6, 2016 at 17:53
  • 6
    While this is good advice in general, I would still lose a lot of confidence in a person if they asked me for several hundred dollars for a training course to learn how to use a popular, but relatively small, PDF library...
    – jpmc26
    Commented Dec 6, 2016 at 22:42
  • 14
    "Never say you cannot do a task." - I would argue that there are cases where you really can't do something, because the requirement just isn't feasible or because a necessary component doesn't exist/work the way you want. For the OP this isn't the case, but someone else might find this question and be literally unable to complete their appointed task. Commented Dec 7, 2016 at 11:13
  • 12
    @Mehrdad "Boss I haven't done this before but I found some resources online which seem to suggest this task is unreasonably difficult without/even with hiring an expert"
    – Mark S.
    Commented Dec 7, 2016 at 12:34
101

Stop generalizing the problem. Break it down instead.

Your initial complaint:

I have to use iTextSharp that I have never learnt

Is not a valid problem statement in a software development world. You will be always learning things, if you want to stay in the industry. Even for something you thought you had good grasp on.

You need to work with PDF? Great, what exactly do you need to do in PDF? Make a list of things:

  • Add text?
  • Add images?
  • Use custom fonts?
  • Provide support for end-user editing (aka data forms)?

Next do a google search on "iTextSharp tutorial", I found this:

Which is highly voted and contains links to more tutorial at the bottom. There is a high chance it will solve 80% of your problems.

Solve the easiest problem from that list, that is adding text (for example). Suppose you don't have time for the rest - present the case to you boss.

"Here is a list of things we need to do, I found a tutorial on this, now I can do it. I found a tutorial on a couple other things, but haven't gone through them yet. These 2 items I didn't find on the internet."

And let them decide. With this attitude you will not only keep the job, but are also at risk of being promoted to regular Software Developer in the near future (and then Senior, if you are successful in breaking down more complex matters).

8
  • 87
    Is not a valid problem statement in a software development world. You will be always learning things, if you want to stay in the industry. +1. If you ain't learnin, you dyin.
    – WernerCD
    Commented Dec 6, 2016 at 3:55
  • 23
    And if you survive long enough "never learned" will become "I don't remember how to do use X, so I have to revise a bit".
    – Andy Dent
    Commented Dec 6, 2016 at 6:24
  • 6
    Absolutely agreed except with "Solve the easiest problem from that list". I'd always start with the hardest problem first. If I can solve that I know that the rest will be easy (possibly still lots of work, but most likely doable). On the other hand if I invest lots of time solving the trivial cases before I find out the API is not capable of doing what I want, I've wasted lots of time and effort.
    – Voo
    Commented Dec 6, 2016 at 12:33
  • 10
    @Voo The only time that might not work is in a situation like this where the developer is completely green. If you don't even know what to Google for, getting one or two simple things out of the way will get you more familiar in a lower-stress situation than trying to learn what to look for while learning the environment. But yes, after one or two easy things, try the hardest.
    – krillgar
    Commented Dec 6, 2016 at 12:34
  • 4
    +1 If you ever stop learning, you are obsolete and will be replaced with a newer model.
    – kindall
    Commented Dec 7, 2016 at 1:39
27

I have gotten clients and huge projects without out knowing how to use tools in the tool chain. For example, I have never even heard of iTextSharp, but if a current client, or perspective client asked me to do something with it I would. Again I have landed clients and projects with unknown tools, and even languages in the mix. How?

Just be honest.

I have never user iTextSharp before, so it's a bit of an unknown. It will slow me down a bit as I figure out how to use it.

Then, reassure.

But like anything else it's just a tool. It may take me some time, but I can learn to use it.

From that point

It's up to your employer/(prospective) client to decide if your other skills warrant the loss in productivity of learning a new tool. One of a few things will happen.

  1. You're fired, they move on, you're transferred etc. This would be very rare, but it's a possibility.
  2. They use a different tool. Most companies don't care how it works so long as it works. If you're more comfortable with a different tool, say so. There may be other reasons they use iTextSharp, so they may not switch, but they could. I'd guess, for a corporate environment, they would switch 40% of the time.
  3. They go "Ok, go figure it out" and provide you with training, books, sites, or other materials. I'd say a 60% chance of this happening.

The important thing here is that you be honest, upfront, and never say can't. Can't is evil. You can, you just need time to learn. Just let your manager know your issue, ASAP.

20

Make sure you inform your manager about the real situation, and the real problem you face. It's not you are "unable to finish the task", which is not something they can really work with, but rather "You lack experience required for the task, you have a hard time obtaining that experience due to lack of learning material, and you won't get it done by the deadline."

This will give your manager all the information they need to either:

  • Inform the stakeholders that the project will go over time, so you have time to learn
  • Help you find better resources. Maybe they can hire someone to help you, or send you on paid training

Remember that you and your manager work together to complete the work. If you can't make the deadline because of something that is blocking your progress, you need to tell them exactly what it is, so that you can look for solutions together.

By being clear about why you can't do it in the time/budget set for the task, you can work with the manager to change either the scope or the time/budget of the task, so it becomes something that you can do. In the end, your manager will rather that you finish something less complex or extend your deadline over you not delivering at all.

12

First, make sure you're using the right tool for the job.

You haven't shared with us what conclusion you came to that convinced you that you should be using iTextSharp. Are you using a machete, when a pair of scissors would do the trick? This is a common pattern I've seen with junior developers. What does that mean? That means:

  • The non-technical boss says, "generate a PDF"
  • The developer runs to Google, and searches "C# and PDF"
  • The developer fixates on whatever comes up as the first search result as the only tool to be interested in.

Making Abstractions for Tool Selection

One thing that you'll have to learn as a developer is to not always take requirements literally, and to consider the tool to use for the job. What does this mean?

If your boss said there was a meeting for work at a restaurant five miles from the office, would you pick your feet as the tool to make that happen? Or how about at a restaurant four hundred miles away? In all these cases, a reasonable person would abstract that a different mode of transportation would be required.

As a developer, you're going to have to become very savvy at tool selection, or you'll frustrate yourself and waste a lot of time.

For most business cases, I'd bet that over 90% of the time, a desire for PDF generation can be accomplished with a report-writing tool such as SSRS (does not require SQL Server) or Crystal Reports. Both of these can generate a PDF, and you'd never need to learn a thing about the inner workings of the Portable Document Format specification -- which are arduous. Both have a GUI, which simplifies things; because in iTextSharp, you have to code everything that shows up on a page.

But your boss can't tell you that, as a non-technical manager. You have to figure this kind of stuff out. For tool selection, you have to think in terms of reliability, maintainability, and scalability. The role is more than just delivering a bunch of thrown-together code, if you're going to be successful in the long run.

Tutorials and Support

You must go through a few short tutorials before you select the right tool. How easy can you take a tutorial and model it to your needs? Does the tool have a support forum? If it's open source, how well is it maintained? (Don't pick a tool that's not recently maintained!) These are key points, because once you've thrown it into production, it can be hellish to get out of your project again if you discover limitations later.

You Must Justify Any Training or Consulting

You can't run to your boss every time you get stuck. Like others have written here, you'll be out the door quick. If you've properly used resources like StackOverflow, tutorials, and forums, THEN you go to your boss if you're still stuck. Never before.

9

If you're working as an apprentice you should have someone who is your mentor. You need to seek help from that person about filling gaps in your knowledge.

If it is a UK style apprenticeship then you generally have a tutor in your college. In other countries it might be someone in the company(?). However the point remains there must be an experienced programmer who has some sort of responsibility for helping you.

Firstly though tell your manager why you're struggling and what you intend to do to get back on track. The longer you sit there making no progress the worse this will get for you.

4

And have you approached your employer that you need time to learn how to create a PDF using iTextSharp?

No software developer knows everything - at least 33% of a developers time is spent learning, whether its new libraries, new languages, new versions of an existing language, or just learning how to code better in what you know. And a good proportion of that learning is done on an employers time. (although a great developer will be coding for themselves as well, and will be learning at home in the process).

So you need to approach your employer and determine their expectations in this regard - if they are unhappy that you need to learn something, then you now know something about that employer for the future and you should never commit to doing anything that you dont already know.

I would put money on them being fine with you spending a few days becoming proficient in a particular library, especially if its one which will be used again.

Its worth noting that most developers will have many many projects titled "Test1", "Test2", "Demo" etc, all of which are previous learning projects. They litter a developers machine :)

If the issue is with lack of documentation on particular features, meaning you cannot learn the required skillset to meet the deadline, then you need to communicate that with your employer - there are other options out there which your employer may be willing to consider instead, especially pay-for options if their documentation and shallow learning curves allow you to come up to speed quickly and deliver on time.

3
  • My employer knows that I have never used iTextSharp and I need to learn it. It's just that I am struggling to find learning material on advanced iTextSharp using c#. I also have a deadline for when this project has to be completed and I am currently unable.
    – W .Groom
    Commented Dec 5, 2016 at 13:07
  • @W.Groom well, thats a different question - if you are struggling with the learning aspect, then you need to highlight that to them. If you cannot find documentation (have you asked on StackOverflow etc?) then you need to flag that up to your employer as the reason for why the deadline is at risk. There are plenty of pay-for PDF libraries out there with excellent documentation (Aspose for example) which your employer may be willing to pay for if the deadline can then be met.
    – user34687
    Commented Dec 5, 2016 at 13:09
  • 4
    @W.Groom a quick check shows that iTextSharp is a port of iText, which on first glance seems to offer excellent documentation and samples. (On a sidenote that's one of those useful c# tricks: If a library starts with N or ends in Sharp chances are good it's a java or similar port and you'll find more and better documentation with the original project).
    – Voo
    Commented Dec 6, 2016 at 16:54
4

This answer is from my own experience as I am currently nearing the end of an apprenticeship in the UK working mainly in C#.

I came into my apprenticeship having had a completely different background and not knowing that much about IT, never mind programming. I had a programmer who I could ask for help and if I needed it I also have someone at college to ask.

Firstly you need to learn how to get help when you need it. Always, Always, research the problem yourself:

  • Read the documentation, if any
  • Read a book
  • Google it
  • StackOverflow it
  • Ask a question online

If you have thoroughly researched the problem, are still stuck and can show how, think of MCVE on SO. Then it is time to ask someone at your place of help, because doing that before searching yourself may annoy colleagues with constant interruptions.

If however you have no one at your work you definitely need to get in contact with your tutor at college. They should be able to get someone to help you or sort something else out because an apprenticeship is something to learn on, not to do a companies dirty work for them.

Lastly if you do get someone at your work to help you out think about how you will ask them for help. I usually get everything I've done written down, or just remember it, and talk/show them what I've done and tried, at a convenient time for both of us. Then we will sit down together and try and work the problem out. This is very helpful for both of us as sometimes I point out mistakes with what they are doing and we both learn.

I have only ever had to ask for help a handful of times when I've needed, mainly because I am an independent learner. Just stay calm and ask in plenty of time because otherwise you will make your colleagues pay for it by having to pick up any slack.

Remember a programmers job involves learning on the go, always be ready to ask google and research a problem. A lot of your job will rely on your ability to find information.

3

Escalate your show stopper with your management ASAP and let them know that you are seeking help online in the meantime, Then get on Stack Overflow and ask away - Don't let them get away with giving you canned answers that have little to do with your issue.

Google and youtube for any tutorial for iTextsharp - You've got plenty on your plate. Do a quick review of the tutorials and ask for a couple of days to go through the tutorials and any help from Stack Overflow, and tell them you'll have a clearer idea what you can do and what you cannot do and how long it's going to take after those two days.

1

How should I tell my employer that I am unable to complete this part of the program?

Nobody expects miracles.

Just be direct. Something like "Hey boss. I don't know enough about iTextSharp to complete the assigned task. Can we brainstorm about what I should do in this case?"

1
  • 1
    " I cannot ask any other member of my department because no one else is a programmer and none of them know how to code "
    – Xavier J
    Commented Dec 6, 2016 at 19:10

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .