While not a programming project, I am currently in a position similar to you - elected group leader in a 5-person group assignment. We will be finished two weeks early, so I would say that the group has been a success. A few things that I did, as group leader, to ensure that this happened (I am also drawing on experience of managing projects in a 'real world' situation, so perhaps have a little more advantage):
Set ground rules from the offset. Make sure that everyone knows what is expected of them: Meeting attendance, work deadlines, what to do if they are struggling. We have a system at our university where people can be removed from groups if they are not 'pulling their weight.' If your uni has a similar thing, the steps taken for you to initiate that procedure should also be outlined. For example, miss two meetings and you will be 'yellow carded'. Miss another, then it's a 'red card'.
Break the assignment into manageable chunks and then decide on a time line. If you already know what should be done each week, it will be much easier to assign tasks each week. Or, of course, whatever time frame you decide on.
Meetings. There should be an initial meeting where everything above is decided on, probably a rather long meeting (our first meeting took 90 minutes). In that meeting, set out tasks to be completed before the next meeting. Then, in each subsequent meeting, validate the work that has been done by each person, ensuring it is both complete and correct. And then, of course, delegate tasks to be completed for the next meeting. And so on...
Each person, pair, or whatever, should go away and do the work themselves, independently. Because meeting times are so short (as were ours), they should be about making sure everything is completed, plans are made and tasks are delegated.
Communication. I set up a forum for the members of my group to communicate about the work they are doing and to upload completed material. I also have a specific sub-forum where people can post up any problems they might have - with a rule that they should do so within plenty of time of the next meeting - so that others can help, or tasks can be re-assigned. It's important that each meeting has minutes taken and an agenda set for the next meeting. I get these uploaded to the forum so that anyone who did miss a meeting isn't left in the dark and know exactly what they need to do.
Because your project is a programming project, the following may well help the group stay organised and cohesive:
Early on - preferably in the first meeting - break your program into 'modules' or classes/procedures/whatever; basically, manageable, stand-alone chunks of code to be written. These can then be assigned to someone each week. To make sure that time won't be wasted on changing code needlessly later on, decide on your global variables, if any. It might be a good idea to also decide on the methods and properties of each class before any coding starts.
As sgolodetz suggested, you might also want to use version control to keep track of code as it's being written. Again, if you do this, make sure that rules/guidelines are in place for when/how often to update.
Perhaps arrange that people working on related tasks meet up between meetings to make sure their code integrates well. This way, they can work together to make sure each person's code 'cooperates' with the other's.
I think the key here is to be organised. Have a strict, detailed plan and stick to it as much as possible.
In university, at least, I think it's important to have a certain amount of ruthlessness - remember that if people don't pull their weight it will affect your grade as well. It might just be me, but once the rules are set, they should be abided by and breaking them (ie: Not completing work or not letting people know you're struggling, not turning up for meetings, etc) should always result in the 'card' system - as would have been agreed at the start. It's your future on the line, so don't let people who don't care jeopardise that.
没有一种最好的方法来制定、委派和监控任务。但重要的是,您可以将工作负载(尽可能多地)划分并并行化为大小合理的任务,并确定它们之间的依赖关系。我们小组在存储库中维护了一个 TODO 文件,其中包含任务、日期和错误列表。我们根据各种因素对任务进行优先级排序,例如它们是强制性要求还是可选细节(想想莫斯科)、它们是否在关键路径上、它们所附加的风险/不确定性有多大等。我们根据情况为大多数任务分配了一两个人取决于他们的优势以及他们是否真的想要完成这项任务,但我们也将一些任务留给任何想要的人(这也有潜在的危险)。我们几个更强大的程序员也扮演“浮动角色”,这意味着我们可以帮助完成任何任务。关键点是任务描述应包含会议中讨论的任何内容……内容、原因和几个“如何”句子作为启动(即“要完成此任务,您可能需要阅读 blablabla”) )...任何能让你的队友轻松陷入任务的东西。
I was one of the leaders of a team project (6 people) last year at university. Based on my experience, I have a couple of key points.
While forums, online chat, email, SVN commit messages etc. are all very good communication mechanisms (and I do recommend them), nothing is more important than weekly meetings. These should involve delegating/discussing/monitoring tasks, talking about general issues and the bigger picture, making group decisions, and simply using your app and identifying issues with it as a group. By doing this, it becomes instantly obvious where people are at with their tasks, where they might be confused, and whether they understand what needs to be done. This is crucial because the feeling of being 'lost' and having no idea where to start is often the biggest obstacle to making progress, rather than laziness. And besides, group decisions are best made in person where you can bounce ideas off each other... and this all helps to establish a sense of shared ownership.
There is no one best way to formulate, delegate and monitor tasks. But it is important that you can divide and parallelise (as much as possible) the workload into sensibly sized tasks and identify dependencies between them. Our group maintained a TODO file in our repository which consisted of a list of tasks, dates, and bugs. We prioritised tasks according to factors such as whether they were mandatory requirements or optional niceties (think MoSCoW), whether they were on the critical path, how much risk/uncertainty was attached to them etc. We allocated one or two people to most tasks based on their strengths and whether they actually wanted to do the task, but we also left some tasks open to whoever wanted them (this is potentially dangerous too). A couple of us stronger programmers also played 'floating roles' meaning we could help out with any task. A key point is that the task descriptions should contain anything discussed in the meeting... the what, the why and a couple of 'how' sentences as a kickstart (i.e. "to accomplish this, you might want to read up on blablabla")... anything which makes it easy for your teammates to slip into a task.
Assigning people to tasks - you need to figure out where people's strengths and weaknesses lie, break down the project into chunks and assign them accordingly
Monitoring - a big problem with projects where people are working remotely is that they may not do the work on time; you need to think about how to keep on top of this (e.g. use version control, and look at the check-ins) - to make this work, everyone needs to buy into it up-front
Strategic reserve - it might be worth having one person (perhaps you if you're the strongest programmer) who takes on tasks across the project that other people are finding difficult to prevent people getting bogged down
First, set up a version control system for the project. This serves the purpose of the code that has been checked in is available to all the team, you can revert to earlier versions if someone breaks something, and all decent professional shops use source control, so it is a job skill it is good to be in the habit of using.
Now you have a way to check on progress. If Joe hasn't cheked anything in, you know he is not doing the work. IF Sally quits in mid_term, you have a record of everything she already did.
Another thing you want to so is code review. Everybody's code gets reviewed by one or more other people. You will all learn a lot from this and this too is a necessary skill for the professional developer.
Plan what has to be done in what order. Make sure the people developing the stuff that everything else depends on are the most reliable devs on your team and that they will meet their early deadlines or nobody else will be able to do their parts.
Weekly progress meetings and don't be afraid to call someone out for not doing his or her part. The sooner you identify a person not pulling his weight, the sooner you can address the issue.
发布评论
评论(4)
虽然不是一个编程项目,但我目前的处境与您类似 - 在 5 人小组作业中当选小组组长。我们将提前两周完成,所以我想说这个小组是成功的。作为小组领导,我做了一些事情来确保这种情况发生(我还借鉴了在“现实世界”情况下管理项目的经验,因此也许有更多优势):
因为您的项目是一个编程项目,所以以下内容很可能有助于团队保持组织性和凝聚力:
我认为这里的关键是组织起来。制定严格、详细的计划并尽可能坚持下去。
至少在大学里,我认为保持一定程度的冷酷很重要——记住,如果人们不尽自己的力量,它也会影响你的成绩。可能只是我个人的问题,但规则一旦制定,就应该始终遵守并打破它们(即:不完成工作或不让人们知道你正在挣扎,不参加会议等) 结果是“卡”系统——正如一开始就商定的那样。这是你的未来,所以不要让那些不在乎的人危及你的未来。
While not a programming project, I am currently in a position similar to you - elected group leader in a 5-person group assignment. We will be finished two weeks early, so I would say that the group has been a success. A few things that I did, as group leader, to ensure that this happened (I am also drawing on experience of managing projects in a 'real world' situation, so perhaps have a little more advantage):
Because your project is a programming project, the following may well help the group stay organised and cohesive:
I think the key here is to be organised. Have a strict, detailed plan and stick to it as much as possible.
In university, at least, I think it's important to have a certain amount of ruthlessness - remember that if people don't pull their weight it will affect your grade as well. It might just be me, but once the rules are set, they should be abided by and breaking them (ie: Not completing work or not letting people know you're struggling, not turning up for meetings, etc) should always result in the 'card' system - as would have been agreed at the start. It's your future on the line, so don't let people who don't care jeopardise that.
去年我在大学时是一个团队项目(6人)的领导者之一。根据我的经验,我有几个要点。
虽然论坛、在线聊天、电子邮件、SVN 提交消息等都是非常好的沟通机制(我确实推荐它们),但没有什么比每周会议更重要的了。这些应该包括委派/讨论/监控任务,讨论一般问题和大局,做出小组决策,以及简单地使用您的应用程序并作为一个小组来识别问题。通过这样做,人们在执行任务时的进度、他们可能会在哪些方面感到困惑以及他们是否理解需要做什么就立即变得显而易见。这一点至关重要,因为“迷失”和不知道从哪里开始的感觉往往是取得进步的最大障碍,而不是懒惰。此外,团队决策最好亲自做出,这样你们可以互相交流想法……这一切都有助于建立一种共享所有权的感觉。
没有一种最好的方法来制定、委派和监控任务。但重要的是,您可以将工作负载(尽可能多地)划分并并行化为大小合理的任务,并确定它们之间的依赖关系。我们小组在存储库中维护了一个 TODO 文件,其中包含任务、日期和错误列表。我们根据各种因素对任务进行优先级排序,例如它们是强制性要求还是可选细节(想想莫斯科)、它们是否在关键路径上、它们所附加的风险/不确定性有多大等。我们根据情况为大多数任务分配了一两个人取决于他们的优势以及他们是否真的想要完成这项任务,但我们也将一些任务留给任何想要的人(这也有潜在的危险)。我们几个更强大的程序员也扮演“浮动角色”,这意味着我们可以帮助完成任何任务。关键点是任务描述应包含会议中讨论的任何内容……内容、原因和几个“如何”句子作为启动(即“要完成此任务,您可能需要阅读 blablabla”) )...任何能让你的队友轻松陷入任务的东西。
I was one of the leaders of a team project (6 people) last year at university. Based on my experience, I have a couple of key points.
While forums, online chat, email, SVN commit messages etc. are all very good communication mechanisms (and I do recommend them), nothing is more important than weekly meetings. These should involve delegating/discussing/monitoring tasks, talking about general issues and the bigger picture, making group decisions, and simply using your app and identifying issues with it as a group. By doing this, it becomes instantly obvious where people are at with their tasks, where they might be confused, and whether they understand what needs to be done. This is crucial because the feeling of being 'lost' and having no idea where to start is often the biggest obstacle to making progress, rather than laziness. And besides, group decisions are best made in person where you can bounce ideas off each other... and this all helps to establish a sense of shared ownership.
There is no one best way to formulate, delegate and monitor tasks. But it is important that you can divide and parallelise (as much as possible) the workload into sensibly sized tasks and identify dependencies between them. Our group maintained a TODO file in our repository which consisted of a list of tasks, dates, and bugs. We prioritised tasks according to factors such as whether they were mandatory requirements or optional niceties (think MoSCoW), whether they were on the critical path, how much risk/uncertainty was attached to them etc. We allocated one or two people to most tasks based on their strengths and whether they actually wanted to do the task, but we also left some tasks open to whoever wanted them (this is potentially dangerous too). A couple of us stronger programmers also played 'floating roles' meaning we could help out with any task. A key point is that the task descriptions should contain anything discussed in the meeting... the what, the why and a couple of 'how' sentences as a kickstart (i.e. "to accomplish this, you might want to read up on blablabla")... anything which makes it easy for your teammates to slip into a task.
一些想法:
A few thoughts:
首先,为项目建立版本控制系统。这样做的目的是,已签入的代码可供所有团队使用,如果有人破坏了某些东西,您可以恢复到早期版本,并且所有像样的专业商店都使用源代码控制,因此这是一项工作技能,这是很好的在使用习惯中。
现在您可以通过一种方法来检查进度。如果乔没有签收任何东西,你就知道他没有做这项工作。如果莎莉在期中退出,你就会记录她已经做过的一切。
您想要的另一件事是代码审查。每个人的代码都会经过一个或多个其他人的审查。你们都会从中学到很多东西,这也是专业开发人员的必备技能。
计划必须按什么顺序完成什么。确保开发其他一切都依赖的东西的人是团队中最可靠的开发人员,并且他们将在早期截止日期前完成,否则没有其他人能够完成他们的部分。
每周召开进度会议,不要害怕批评某人没有尽到自己的职责。你越早发现某个人没有尽自己的职责,你就能越早解决这个问题。
First, set up a version control system for the project. This serves the purpose of the code that has been checked in is available to all the team, you can revert to earlier versions if someone breaks something, and all decent professional shops use source control, so it is a job skill it is good to be in the habit of using.
Now you have a way to check on progress. If Joe hasn't cheked anything in, you know he is not doing the work. IF Sally quits in mid_term, you have a record of everything she already did.
Another thing you want to so is code review. Everybody's code gets reviewed by one or more other people. You will all learn a lot from this and this too is a necessary skill for the professional developer.
Plan what has to be done in what order. Make sure the people developing the stuff that everything else depends on are the most reliable devs on your team and that they will meet their early deadlines or nobody else will be able to do their parts.
Weekly progress meetings and don't be afraid to call someone out for not doing his or her part. The sooner you identify a person not pulling his weight, the sooner you can address the issue.