The question is this and the detail follows: is there anything I can say/bring up, as a programmer, to bring him to my side?

I'd love to hear valid arguments for both sides on this one, but mostly suggestions for how to talk him around.

My situation is this: I'm working on a team project on my degree course, building a mid-sized website as a prototype for the university. All are considered equals in the group and there is no one appointed leader so the answer to this problem can't be "pull rank".

All are equals, however there is a huge gap in knowledge between members. The team member in question and I are both capable developers, though he holds no industry experience. The other three members are less capable, and two have opted out of development entirely. All three have declined to comment on the situation due to lack of knowledge.

As as a group, we are coming to decide on what technologies to use in the implementation of the website; specifically, whether to use a PHP framework (Code Igniter) or not.

I am arguing in favour, citing:

  1. Not reinventing the wheel
  2. Well written and tested code base to work from
  3. Getting going (the deadline is closer than we'd like)
  4. Speed of development
  5. Sound and maintainable design patterns and good practices

He is arguing in favour of working in the way he's used to:

  • Writing bespoke, one-time functions in to a "library" file as when he needs them
    • Functions for data access and rendering that data the page, getting/setting to and from session and get/post data etc
  • Having 1 file per page (resulting in no separation of concerns amongst control, presentation and data)

His reasons against using are framework are mostly based on him not being able to see the point: he can do all those things already. The framework doesn't change that, it just makes it harder because he has to learn the framework; he doesn't want to use code he hasn't personally written.

He has also said that it "doesn't matter the quality of the code base, since the project is only a prototype and will never be maintained". For me, that is no excuse to write unmaintainable code.

I can see why he makes those arguments, but I hold issue with his "lack of concern over maintainability" and his "disregard for good design", or even separation of concerns. However, I suspect he has never studied design patterns, so I don't know how effective demonstrating why his method could prove unmaintainable would be.

I want to get going on this project, but I don't want to do it without regard for everything I've learnt over the years. As I said before, there is no possibility of pulling rank here, nor are other team members willing to pitch in. Should I just back down and do things his way? Is he too stubborn and inexperienced to know better? Or am I being the stubborn one here?

TL;DR Inexperienced team member is being stubborn, how can I win him over?

  • 2
    It's very difficult to find the actual question in your blog post :) Please revise in a way that emphasizes the technical arguments you both make. Although we can't really tell you how to talk to a person we don't know, we could help you approach the situation from a programmers standpoint. There seems to be a good question on evolutionary prototyping in there, but I can't be sure... – yannis Jan 25 '12 at 13:56
  • 4
    Parts of this would probably would be better suited for: area51.stackexchange.com/proposals/30887/professional-matters – Karlson Jan 25 '12 at 14:04
  • 3
    he doesn't want to use code he hasn't personally written. He had better throw away his operating system, IDE, phone, traffic lights etc. – StuperUser Jan 25 '12 at 14:13
  • 4
    @AndyBursh I want to know exactly how everything works is a valid argument when learning, were re-inventing the wheel is actually acceptable. Maybe, just maybe, you could read that as a cry for help and not as stubbornness. – yannis Jan 25 '12 at 14:36
  • 4
    since the project is only a prototype and will never be maintained Final last words :) I wish I had a dollar everytime I had made this assumption and found out that the impatience and short term greed of the higher ups decided that the prototype IS the product now. – maple_shaft Jan 25 '12 at 15:04

You're not going to be able to talk him into it. It's called the Dunning-Kruger effect. He's too ignorant to know what he doesn't know, and too afraid to lose what he terms as an advantage.

When you are unable to reach a consensus, you must instead reach a compromise. Maybe you can split up the work so his need to learn the framework is minimal. Maybe you have some sort of "design-off" where you each do it your way for a couple weeks and then the team votes on which one is best. Maybe you can involve your sponsoring professor or whoever the customer is in resolving the tie.

  • 3
    +1 since this is occasionally happens the real world. I've been in jobs where I couldn't agree with another dev on which was best approach. So we both cranked out a POC and then examined the pros and cons of each. 9 times out of 10 we'd end up adopting a solution that was a mashup of the two POCs, and everyone learned something from the process. – Timothy Baldridge Jan 25 '12 at 17:27
  • 1
    +1 for teaching about Dunning-Kruger! Everyone needs to know about it.. – Stephen Gross Jan 25 '12 at 17:29
  • Bah. It's too easy to cite Dunning-Kruger when you disagree with someone - too easy to call them stupid. Maybe the teammate believes frameworks violate the spirit of the assignment, maybe he wants to solve, first-hand, the problems a framework solves, maybe he want to avoid the CodeIgniter, Cake, Symfony debate... My first assumption wasn't that he was an idiot. – Corbin March Jan 26 '12 at 15:01
  • 1
    @Corbin, Dunning-Kruger isn't about a lack of intelligence, it's about inexperience. Two very different things. I agree your reasons could be valid, but the OP said those weren't the arguments he was making. Instead he "doesn't see the point" of using frameworks because he can write something just as good himself from scratch in a shorter amount of time. An inexperienced person overestimating his own competence compared to a solution he admittedly knows almost nothing about is a textbook example of Dunning-Kruger. Such people can't be "talked into" something, they must be shown. – Karl Bielefeldt Jan 26 '12 at 15:47

One argument in your favor is reusability of knowledge. All team members who learn a well known and widely used framework (such as CodeIgniter) will be able to reuse their knowledge on the next project. Whereas knowledge of a haphazard, proprietary "library" is not reusable. This can resonate well with the other team members, as they probably prefer gaining some useful, reusable knowledge on this project.

Another argument might be a concrete measurement of development / maintenance costs. I imagine that a developer well versed in CodeIgniter can develop faster than your colleague writing all those proprietary functions himself. This could be demonstrated by having both you and him build an identical web page - you with CodeIgniter, he on his own way - and measure times to completion. Then make a set of modifications / extensions to the pages, again measuring time to completion. Of course, the specification should be prepared by someone independent from both of you, to fight on neutral ground.

Another - as you mentioned - is code quality. Once the web pages are ready, run the same set of acceptance tests on each, and compare bug density.

Of course, when you are under time pressure, there may be no possibility to stop and do such measurements. So you probably want a fast resolution to this dilemma. Try convincing the other team members (e.g. by having them read the upcoming answers to your post here :-), to mount some group pressure on him. In the end, if he really can't be convinced, you may want to cut the project into two parts, one for him and - ideally - one for the rest of the team, using CodeIgniter. Focus on doing your own part to the best of your abilities and let him do whatever he wants. The results will probably speak for themselves.

  • I like the idea of a speed test to demonstrate that. What kind of acceptance tests could we run? I will certainly suggest this, but I'm not sure it will sit well with him (or the group) since we all have other deadlines to manage, and I doubt anybody is particularly keen to write the spec or "waste time" (as I'm sure it'd be put) on this. – Andy Hunt Jan 25 '12 at 14:13
  • 1
    Science, it works: xkcd.com/54 – StuperUser Jan 25 '12 at 14:14

I feel you need to engage the other 3 team mates. You both need to present your arguments to them and explain things to them so that they understand. At the end of the day, they will have to work with this code base as well. And if all are equals, then they should have some say over what they wish to work with.

I think a good approach would be for each of you to outline the benefits of your respective solutions, and show the other team members why you feel it's the best way to go. Then let them decide. There are 3 of them so it'll be the tie breaker.

One thing that you'll want to point out is that if this is your Sr. project, and the other team members have no other experience, this project needs to reflect the work they can do to potential employers. If you do it right it can be a good talking point in an interview. I know I ask new grads to outline their senior project, and how it was designed and developed.

If they go with the other guy's approach, you'll have to suck it up. But don't give up hope. Come up with a good design so that the chaos he's writing won't impact everything. If you have time, do some code clean up and refactor some of his stuff and show him that he doesn't have to reinvent the wheel each time.

  • I hadn't thought about how this reflects on the others in the group, honestly. I'll be sure to point that out. – Andy Hunt Jan 25 '12 at 15:17

I feel college is like a sandbox. Most of the stuff you do there are not used in deployment. So it gives you a lot more freedom to experiment and get out of your comfort zone. Explore new stuff because failing will not have too much of an impact. Also in your situation, your team members have the extra advantage of having someone with prior knowledge helping them out.

As for the other experienced team member, he needn't have come to college if he didn't want to learn anything new. This is a good opportunity to learn something new and add it to his toolbox.

And for the inexperienced team members, their chances of being employed/better employed will increase with a framework like CodeIgniter on their resume (actually the knowledge to justify that on their resume).

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