2

I'm leading a small subproject in my company, and I've never lead any project before in my career and this miniproject according to my manager is supposed to be an exercise on leadership.

I did a task breakdown and assigned them. One of these tasks was of the form

Develop a function/API with signature Output functionName(Input1,Input2), the function should perform TaskX

Where TaskX was described pretty much in detail. It was pretty clear and direct and also quite self contained.

I got delivered however quite a big class where the requested API was essentially a member function of a class, the class had also data members that are not really useful for sake of the function itself (for example it has a completely useless viewer for sake of the function). I did the code review and I was trying to explain how I would've done it, including code snippets (which were like 20/30 lines of code) this also included the body of the function.

For some reason, not quite clear to me, I keep getting delivered a big class whose feature and implementation I don't think are entirely correct, but that's not the point. The point is that if I wanted to use that member function I had to instantiate quite a big object which doesn't make much sense.

So to me the goal of the task hasn't be achieved, and I've tried to talk through exactly what I want and why but somehow I still keep getting resistance. Also bear in mind given how short the function was I was expecting this to be done in at most three days (and this was an over-estimate since the function at the end was really short in terms of code) but it's been two weeks now. The reason for taking this long it's because together with the actual meat of the task I'm getting a whole class, as described, and a few scripts and a IDE project which I honestly don't need. The only thing I would physically need is one or two source files.

I've already talked about this to my line manager and essentially the only thing I got out of this conversation was that the engineer I'm currently working with has the tendency to overdo things. So my question here is what's the best way to deal with this situation in the future?

The only thing I personally thought was to sit next to him and try to walk him through the tasks I assigned to him, but often these conversations drift off to stuff not strictly related to the task (this is probably because I'm too available in giving explanations and this is doing more harm than good).

Any advice?

(Note: The project is very small it's like three engineers involved, including myself).

Update : So despite my code review I was provided again with bloated code. So the technique I have adopted to sort this out was kind of a mixture of a couple of answers I got from here.

First of all I explicity asked why I was given so much code given the task. I was given reasons (whether or not I agreed or not it doesn't really matter) but at the end we clarified what was necessary for the task, so at the end I got the 20 lines I thought were necessary. So this sorted out the current task.

As an exercise for him however I've assigned to give me some form of design/pseudocode whose implementation would allow to achieve goal the next task. Therefore we had a meeting where we discussed this. The discussion some times tended to drift off to other details (useful to understand but not important from coding point of view), I think this time however I managed to stay on track most of the time. At the end of this meeting I asked the explicit question "how many lines of code do you think you need to implement this?" he explained to me what he had to do in is opinion and this time sounded about right, I've also emphasized many times the minimal code required and I think I was understood this time.

7
  • Does the code perform TaskX? Would it be possible to extract working code from what the developer delivers? – Bernhard Döbler Aug 26 '20 at 17:49
  • Do you have any estimation sessions where you discuss the scope and implementation tickets in the group? – Helena Aug 26 '20 at 19:08
  • @BernhardDöbler it is possible, yes and I've explained how in my code review. The code performs taskX but it's too coupled to the class. Essentially my goal was to develop primitive functions and classes in a small library (so they're re-usable on their own) and the assembly a more complicated system. – user8469759 Aug 26 '20 at 19:43
  • 1
    @Daniel R. Collins. In house. – user8469759 Aug 27 '20 at 6:22
  • 2
    Can anyone explain why people are voting for closing the question? – user8469759 Aug 27 '20 at 9:15
7

The only thing I personally thought was to sit next to him and try to walk him through the tasks I assigned to him

This seems like a good idea to me. It's basically following the principle "Lead by Example".

Of course, the idea is that your team will eventually be able to do things on their own, without you having to sit next to them, but in this case seems that doing this once with this person could help.

Try getting with them, and try to do one of the tasks you have assigned them. Share with them your though process, ask them what is their thinking and reasoning, give your feedback, suggestions and corrections, but let them do the coding.

After that, let them finish the rest of the tasks on their own, and see how they managed to do so now. Perhaps this person tends to over-complicate things, and what they need is a little bit of guidance to understand and change their ways.

but often these conversations drift off to stuff not strictly related to the task (this is probably because I'm too available in giving explanations and this is doing more harm than good).

I would not frame this as a conversation; perhaps that is your mistake and why this deviates.

This should be more on the lines of Pair Programming (but, again, let them do the coding and refrain from putting code yourself as much as you can).

If you feel this person starts to deviate or to go into details that are not needed, politely put the exercise back on track and refocus on the task at hand.

6
  • Well as I mentioned in my review there was a relatively long comment with essentially the implementation I'd have done (the 20/30 lines of code) Moreover I added how I would've structured the code if he really wanted to do in that way. I'm still waiting for the actual code to be merged, but it has been a week since then and it took him a further week to give me the code currently in the repo. – user8469759 Aug 26 '20 at 17:49
  • @user8469759 I understand, but one thing is just mentioning "do this", and another is giving some guidance and doing Pair Programming and showing with examples ("why you are writing that whole Class?"... "why not just do a Static method?"..."here, something like this"... "ok, see it works? try doing the other parts like that now"). Seems to me that this person may be used to doing things their way, but you now see that you need to make them understand that there are other ways, more adequate to these tasks (and simply writing a comment or saying things may not do the trick). – DarkCygnus Aug 26 '20 at 17:54
  • I see your point.. but if he doesn't ask any help I'm not sure my initiative in guiding him would be appreciated...I don't wanna come across as ball buster essentially. – user8469759 Aug 26 '20 at 17:59
  • As the lead of this person, it's your job to make sure they are ok and delivering. It's not "ball buster" (unless you are always and 24/7 checking on them, which I sense you aren't). I'm suggesting you try to give this person more guidance and pair programming in a single task, and then see how they go with the rest of tasks... this would not be ball busting, you are just pair programming with them a single task... now, if after this you see no changes or improvements from their part then I fear this person may not be the best learner... – DarkCygnus Aug 26 '20 at 18:01
  • I guess then the next question to ask would be how to deal with "bad learners" any quick advice on that? Or should I just ask a separate question? – user8469759 Aug 26 '20 at 18:03
4

Set your engineer a challenge: Produce the minimal code to meet the requirements. This version does not have to be ready for release, just a correct implementation of the requirements.

When that is done, discuss with the engineer what else is needed to make it ready for release. What is the benefit and cost of anything that might be added?

5
  • Can you be more specific? What sort of challenge? I usually provide in the description of the tasks the actual API signature... And then I describe what should go in the body of the function like pseudocode. The reason I do this it's because I think people have their own way to implement the same logic. I think providing him code to work on is a bit too much, unless I'm missunderstanding you. – user8469759 Aug 26 '20 at 17:46
  • 1
    The challenge is for him to produce the minimal code. – Patricia Shanahan Aug 26 '20 at 17:48
  • Isn't my description of the task then equivalent to the challenge you're talking about? What was I lacking of to make crystal clear "this is the function and I want minimal code and nothing else"? – user8469759 Aug 26 '20 at 18:01
  • That is why I suggest framing it as "write the shortest, simplest code you can, even if it is not ready for release". – Patricia Shanahan Aug 26 '20 at 18:04
  • 1
    I'm going to adopt your strategy. We are going to have a Design meeting soon which is going to be a design of a very specific algorithm and I hope I can figure with him the minimal amount of code required. – user8469759 Aug 28 '20 at 4:24
0

This sounds a lot like obfuscation. Obfuscation is a practice, usually employed by developers who are not good at their jobs, whereby they ensure their job security by making their code as hard as possible to understand and work with so that they're the only one who knows how it works. Therefore, if they get fired, the company has to throw out all the work they did and redo it from scratch, because nobody understands what was done. Therefore, they think, they are less likely to get fired, because the overhead cost of replacing them is too high.

Here's what you do: If you think a project can be done in 3 days, then you set a deadline of 3 days. That's a KPI for your developer to meet; if they can't get the assignment done in 3 days, then that's a strike against them that you can use on their next performance review. If they don't believe that 3 days is enough time, they can come to you and negotiate the deadline, and at that time you can clarify the requirements with them and make them understand the assignment they are getting is not as big as they think it is, and then if they still try to deliver something really big, you can express to them that their code does not meet specifications.

The most important thing to do with a developer who is obfuscating is to not merge their code. The obfuscation scheme fails if their code is prevented from going in production. Make sure only clean code goes into production so if this developer leaves the company, you don't get stuck with a ton of tech debt.

As a caveat to all of the above: Many languages have "best practices" that look a lot like code obfuscation, e.g. interfaces definitions, lots of configuration overhead, and so on. Make sure that you understand the constraints the developer is working under; it's possible he is delivering good, clean code up to the standards of the languages/frameworks he's working with, and you're telling him to write bad, hackey code that's hard to maintain, and he's trying to tell you nicely that you're a moron and you're not listening. Keep this in mind with whatever you do.

6
  • He's not delivering good code... For example he's re-implemented the default move constructor to do exactly the same thing as a default move constructor would do. Essentially the code is very redundant and it encapsulated the actual function I need but in a way that I think it's useful. Plus obviously he's not putting enough effort even in doing this, as for example he hasn't followed any naming convention (some variables are upper case...some other lower case). There's also other stuff as well... – user8469759 Aug 26 '20 at 17:41
  • @user8469759 Fair enough. I don't have an example of the code he's written; if you're sure he's in the wrong then go with the first part. – Ertai87 Aug 26 '20 at 17:43
  • I don't think there's obfuscation anyway. It's a mini project about 3D shape analysis and he doesn't know much about it. Therefore I think there's a bit of a barrier due to the fact he doesn't know exactly what he's doing. This is why I spend quite sometime talking him through the actual goal of each part but I'm realizing there's too much talk before I actually get something, and that something isn't either what I wanted. Also possible he doesn't really care about the coding... But either way...he has to help me and I'm trying to figure a way I can behave to make this work better. – user8469759 Aug 26 '20 at 17:57
  • @user8469759 - Sounds like you should assign the work to somebody else. – Donald Aug 27 '20 at 10:39
  • @user8469759 When you hired this developer, did you indicate that 3D shape analysis would be part of the skills required for the job and did you test him on skills related to that, or did you give him a standard question out of Hacking the Coding Interview like most companies do, and test him on whether or not he read that book (hint: most developers have)? If you didn't test him on knowledge in that very specific and specialized domain, don't be upset when he joins the company and can't perform on those projects. Sounds like maybe you should hire better. – Ertai87 Aug 27 '20 at 15:18
0

If you have authority, while dealing with this developer, try to implement narrower deadlines and add specific output requirements.

Up to the point that you send him a dedicated code editor file, depending on a language you utilize (i.e. *.cs) with structure and "Put code here" in the context

This way it would be harder for him to inflate and obfuscate his work.

But, if as a result you would get an unacceptable work, you would have something to go to your higher-up with for advice / confirmation of an action required for this developer

IMHO, dealing with all kinds of subordinates, is also part of growing in to managerial role where your job is not to do the work, but to distribute assignments and integrate received results in to a final product

You must log in to answer this question.

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