I've just finished my master and I'm starting to dig into the laboral world, i.e. learning how programming teams and technology companies work in the real world. I'm starting to design the idea of my own service or product based on free software, and I will require a well coupled, enthusiast and fluid team to build and the idea. My problem is that I'm not sure which would be the best skills to ask for a programming team of 4-5 members.

I have many friends and acquaintances, with whom I've worked during my studies. Must of those ones I have in mind are very capable and smart people, with a good logic and programming base, although some of them have some characteristics that I believe that could influtiate negatively in the group: lack of communication, fear to debate ideas, hard to give when debating, lack of structured programming (testing, good commenting, previous design and analysis).

Some of them have this negative characteristics, but must of them have a lot of enthusiasm, nice working skills (from an individual point of view), and ability to see the whole picture.

The question is: how to pick the best team for a large scale project, with a lot of programming? Which of these negative skills do you think are just too influential? Which can be softened with good leadership? Wich good skills are to be expected? And any other opinion about social and programming skills of a programming team.

closed as too broad by gnat, user53019, user40980, david.pfx, Dan Pichelman May 19 '14 at 2:24

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.


Team chemistry is something that is difficult to predict. How long a project will take to finish is difficult to predict. Really, life is difficult to predict. Your best bet is to choose the people you feel will work well together, get them started, and see what happens. Next, adjust your team as needed.It will be obvious what areas will need to be improved, and what is going smoothly, if you ask for feedback on these items from your team.

The scientific method is generally the best way to achieve results. Don't spend too much time hypothesizing, go ahead and get observing, so that you can take action.


Joel Spolsky said:

In principle, it’s simple. You’re looking for people who are

  1. Smart, and
  2. Get things done.

Steve Yegge liked that principle and expanded on it a bit with Done and Gets Things Smart.

I've managed teams for 5 years now, after 15 years of development. My own principle is much like Spoelsky's only not as elegantly worded. Programmers are problem solvers who use software to solve the problems. In that sense, a good programmer will use whatever tool is the best for the job, although that often means one of the handful they know best (good luck finding a .Net developer who believes Lisp is the best tool for a job).

While all of my interviews do have some development specific questions, they tend to be generic and not toolset based. I would rather have people who understand OO (our current app suite is OO), and show an ability to understand, learn, and embrace.

All of that said, they do need to show they have the ability to write sound logic in some language. I've come across way too many developers who can talk the talk but can't walk the walk.

  • posts here move around based on votes, so be sure to clarify what you mean by "that principle" – Davy8 Nov 13 '10 at 19:07
  • "The best tool for the job" implicitly includes "The best tool accessible to the person doing the job" - learning a whole new language and ecosystem is usually enough to make it inaccessible. – user1249 Nov 19 '10 at 17:47
  • This looks like an answer for "who to pick a good programmer?", not "how to compose a great team"? – Martin Wickman Jan 8 '11 at 21:45

A great team member have a number of characteristics, as in the list below. This is not specific to programming, but applies to all types of teams where collaboration is expected to happen:

  • Acknowledges and works through conflict openly
  • Considers and uses new ideas and suggestions from others
  • Encourages feedback on own behavior
  • Understands and is committed to team objectives.
  • Shares openly and authentically with others regarding personal feelings, opinions, thoughts, and perceptions about problems and conditions
  • Involves others in the decision-making process
  • Trusts, supports, and has genuine concern for other team members.
  • "Owns" problems rather than blaming them on others
  • When listening, attempts to hear and interpret communication from other's points of view
  • Influences others by involving them in the issue(s)
  • Encourages the development of other team members
  • Respects and is tolerant of individual differences
  • Does not engage in win/lose activities with other team members
  • Has skills in understanding what's going on in the group

Use this list as a way to measure your potential team members.

This is more or less the perfect team member, someone I would sure like to work with. If you can find people like this and who also knows a thing or two about programming, then you have a winning team.

More info here.

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