Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

A software project that I am working on involves me and another programmer. The project involved an engine backend with an MVC front end. Initially I did alot of the work on the project and so setup some simple design methodologies mainly surrounding abstraction and template strategy.

For quite a while I have been off the engine backend and working on the website. However I have still maintained an interest in the engine as I was informed that I might be back on it at some point.

The project is under a very tight deadline so we are all rushing like made to get it finished on both the front end and back end.

I don't consider myself to be a great programmer and so I never try and enforce any particular design or set of methodologies on people as I'm not always sure I'm right and like to have other people offer their opinions to try and come up with better solutions. However I have noticed changes being made to this engine code that is really starting to irk me. When I confronted the developer to suggest he do the work another way he said he didn't see the point as there seemed little benefit considering the tight deadlines.

I had to try and explain that the haack he had put in could mean further development after release and I didn't think it was fair to make others pick up the slack when we could fix it now. I spent about 30mins going through what I had done and at the end of it he asked me to pretty much write the code so he could just copy it.

The basis of what was I had initialy setup was:

  • An abstract class x
  • An abstract factory class to create concrete instances of x

What had happened was he had put a couple of if statements that could easily have been put as virtual/abstrace methods on the abstract class and then implemented accordingly as the new change followed the same principle of other methods on the abstract class already.

This seems trivial to me, however he couldn't even grasp this even when I showed him the classes involved.

Now my question is:

  1. Is this unfair to assume he should have grasped this concept. I realise that we are on tight deadlines but I thought it was trivial. The programmer is supposed to be at least an intermediate level.
  2. This has happened in a number of places and I have constantly tried to get him to change but he doesn't seem to. Should I just ignore it?
  3. Should I raise this issue elsewhere, or just suck it and when I'm put back on the project just go around changing all these things.

His part of the project is not going to be finished which is why I will have to go back on and help him out. I really don't want too, as he has taken a project with not great, but ok architecture and really put in alot of messy code that more than often didn't follow what was trying to be achieved.

If the question is too vague or ranty, please let me know and I'll try and edit accordingly.

EDITED: The project is expected to continue after the initial deadline as there is already follow up work planned and work that we did not fit in and has been agreed to be implemented later.

share|improve this question

closed as off-topic by Ixrec, GlenH7, Scant Roger, Matthieu M., gnat Dec 23 '15 at 21:06

  • This question does not appear to be about software development within the scope defined in the help center.
If this question can be reworded to fit the rules in the help center, please edit the question.

You're not alone... Sometimes I want to share a new design I've seen and I end up having to explain it in layman's terms... Not so exciting anymore. – wleao Aug 2 '11 at 4:14
I wouldn't mind if he as a junior programmer but he has been given a very important part of the project as he is supposed to be an intermediate level. I've tried numerous times to have discussions about design, why we did something but he just gives me a blank stare. Just not sure what I can do to proceed from here really. – dreza Aug 2 '11 at 4:19
Is this affecting your job? The outcome of the project? Does this project have a client? A boss? If the answers to all those question' were Yes Yes Yes Yes... Then you should start thinking of discussing it with your colleague and your boss. – wleao Aug 2 '11 at 4:26
I'm voting to close this question as off-topic because it's not about programming, it's about interacting with people in the workplace. – Ixrec Dec 21 '15 at 15:30
I'd go with cattle-prod... but I think workplace.SE would consider that bad practice. – James Snell Dec 21 '15 at 15:42
up vote 9 down vote accepted

From supervising maybe upwards of 200 developers over the last 25 years, I reckon - the proportion of developers who are intuitively comfortable with the kind of design abstractions you are talking about - is something like a third. My approach has evolved from expecting to fix this with coaching, training and encouragement, to still working on the coaching etc. - but recognizing that this comfort has an innate quality to it, and you often can't change it. You asked if it's fair. I think the bit that isn't fair is for your management to expect a development team member to carry the responsibility for this tension and the impact of it. If you have a leader around - try explaining the tension to them in THEIR terms not yours. It's not about the other developer - it's about efficiency, future impact and risk = bottom line and therefore a clear management responsibility. Hunt for organisational solutions that exploit your relevant skills. Can you take on more design guidance work, and the other guy do more of the finishing. Don't assume all developers wouldn't want this role - many developers love being good at finishing stuff to satisfy customers fast - and are grateful for a quality design environment to be provided by someone else.

share|improve this answer
Cheers pete. I just sort of assume that all developers would want be interested in design and concepts and refactoring to make something better etc I guess I have to learn that there are all types out there and it's a matter of finding the fit for each one and dealing with that. – dreza Aug 2 '11 at 9:40
I'd give you another + for the last sentence if I could. – mattnz Aug 2 '11 at 21:14

Sometimes its not the concept but the time taken to grok it. People don't get things when its explained to them quickly by someone, but give them time to go look for themelves and then they'll get it. Sometimes it takes a little time for thr concept to sink in.

I understand deadlines were tight, and knowledge is limited which may have had more of an impact than you'd like, but in this case (and I make assumptions here), did you point him at a factory design pattern document, or did you just expect him to understand your code by waving it under his nose shouting "you just don't get it man, you just don't get it" :)

I might even have done the same myself - shown people the code, expect them to instantly understand, get frustrated when they look blank, zoom through it in a vain attempt to make them understand, get annoyed when they just get even more confused, then either elbow them out of the way and do it myself or get told to sod off and do it myself if I'm so damn clever. Which is all an understandable reaction to my poor attempts as a teacher.

share|improve this answer
To be fair, that's what I did. I perhaps made the assumption that this would be easy to pickup. Will perhaps go through some of these with him and see if he is willing to read up about it – dreza Aug 2 '11 at 9:38

Abstract classes, class factories, don't get me wrong, but sounds like an artillery to kill a bird. Patterns are there to solve problems not to create them. You admitted that the project is 2 people project.

What your colleague is doing wrong, though, is that he's not following the guidelines. It will cause some mess downstream. If the project is abstracted in all ways, then he should try to follow.

share|improve this answer
I guess it is a two person project. I'm working on the web ui with another person so I guess all up it's 3 people, but that particular one was just the two of us. – dreza Aug 2 '11 at 7:30
@dreza: Anyway, try to find good arguments why the project is done how it is done. Try to feed the idea that consistency and undivided architecture is going to help maintenance and extensibility. Try to feed these ideas to your coworker. Also, maybe he has problems grasping some of the concepts, in that case, try to find simple, concrete examples that show where you can really gain something by the approach you've chosen. You have to prove that extra work is not done in vain to get your coworker to accept it without resistance. – Coder Aug 2 '11 at 8:20
cheers coder. I did think that perhaps I wasn't conveying the benefits enough but struggled to come up with a simpler thing that what I was doing. Will keep working on it though – dreza Aug 2 '11 at 9:33

You didn't want to force the pattern on him from the beginning, but you could have had a short discussion on some of the things you did. Under the time constraints, I doubt he'll be able to grasp your concept enough to be able to implement it as fast as his 'hack'. You want him to fix things now to prevent someone else/you from having to fix them later, but the project is not going to be done on time. Either he doesn't understand what you were doing or feels it will take too long and isn't worth risking a delay.

Let it be known when the project can be completed and raise concerns over these limitations in the future and the need for additional time. You're going to have some difficulty getting everyone to see it your way if the client is satisfied. It may not be right, but it is reality.

share|improve this answer
I did think I would raise these concerns after the fact, but thought this was so minor I could try and explain it to him and he would just do it. Didn't realise that making an abstract method and overriding it was such a complext programming task. – dreza Aug 2 '11 at 4:05
@Dreza - Has this colleague worked longer at this comapany then you have? – Ramhound Aug 2 '11 at 11:43
No, I have worked 1 month longer. We were both employed on for this project so on starting I had assumed we were of equal standing etc – dreza Aug 2 '11 at 19:37

Probably not a technical issue, definetly not a programmeing problem. Sounds like nothing more than then the traditional "programming for the possible future vs meeting todays deadlines" debate, which is a specific case of "I don't like the way the other guy does his job, I want him to do it my way". Happens every day in every workplace with more than 1 staff member.

Your management and salesman skills will be more important than any technical superioirty in your design if you want to "win" this one.

I suggest reading books such as "How to win firends and influence people" and "What colour is you paracute" and other people skills books.

share|improve this answer
Most of the practices given in the question are not slower alternative to what exist today. This is mostly matter of putting the piece of code at the right place, not at a radom one. So no this isn't a « programming for the possible future vs meeting todays deadlines ». Anyway, right about people skills book. – deadalnix Aug 2 '11 at 8:53

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