‘壹’ 如何带领好一个软件开发团队
我记得10年前在cisco的一个面试, 几个问题记忆尤深:
1) How do you recognize the contribution of your team member?
2)Can you remember the name of your team member's other part?
还记得大胡子CEO讲的一句话,一个团队重要的是公平, 我觉得追求公平这是
人的天性。 我个人经验, 公平是目标, 平衡是手段, 沟通是工具。
软件开发团队的难点在于你如何评估每个人的贡献, 不容易。 单纯的代码量是没意义的。
一个简单的修改后面可能是几天, 几星期, 甚至更长时间的辛苦工作。 我曾经听到过抱怨,
老板问改动了多少, 哥们回答道1行, 老板问要这么长时间?
所以好的软件部门经理或项目经理, 要有sense,这是行业经验积累来的。 还有就是沟通,
全面的沟通, 超出工作范围的沟通, 沟通是弥补行业经验的手段。
软件开发团队人的因素很强, 每个人就是一部”生产机器“,很多脾气很大, 不好沟通。作为leader重要的是从哪里, 哪方面为他们提供帮助, 我想除了技术之外还有很多, 你可以从这方面作为出发点。比如职业规划, 比如人际关系。
一点拙见, 希望有帮组。
‘贰’ 如何解决软件研发团队管理的问题
高效软件开发团队的特征
高效的软件开发团队是建立在合理的开发流程及团队成员密切的合作的基础之上的,成员共同的迎接挑战、有效的计划、协调和管理各自的工作以至完成明确的目标,高效的开发团队具有如下特征:
1、 具有明确且有挑战性的共同目标
一个具有明确的而且有挑战性目标的团队比目标不明确或不具有很大的挑战性目标的团队效率高得多,通常技术人员往往会因为完成了某个明确的任务,而且这个任务的完成具有挑战性的意义而感到自豪,反过来团队成员为了获取这种自豪的感觉而更加积极的工作从而带来团队开发的高效率,如作为系统设计人员很清楚的知道在什么时候要做到什么,什么时候开始做,什么时候必须完成,为了完成工作必须面临哪些挑战,怎么解决这些困难等为设计出一个高质量的软件项目提供了重要保证,而模模糊糊的去设计一个系统或模模糊糊的就去编写代码是非常危险的,而且会为此付出高昂代价,因此高效的软件开发团队具有挑战性的共同目标。
2、 团队具有很强的凝聚力
在一个高效的软件开发团队中,成员们凝聚为一个整体共同进行工作,他们是相互支持、互相交流、互相尊重的,而不是相互推卸责任、保守、相互指责的,在一些散乱的开发团队中往往存在这样的问题,一些程序员是比较保守的,明明知道另外的模块中需要用到一段与自己已经编写完成但有些难度的程序代码,他也不愿拿出来给其它程序员共享,不愿与系统设计人员交流,这样给项目的进度造成了些不可度量的因素。
3、 具有融洽的交流环境
在一个开发团队中,每个人行使自己的职责,如需求分析人员制定需求规格说明、系统设计人员做系统概要设计和详细设计、项目经理配置项目开发环境并且制定项目计划等,但每个人的工作不可能做到完美的,如系统概要设计的文档可能有个别地方词不达意,做详细设计的时候就可能会造成误解,项目经理制定计划时可能忽略了某种风险的存在而造成执行者过于紧张的压力等等情况都需要大家通过交流、反馈的手段然后协商解决的,因此高效的软件开发团队是具有融洽的交流环境的,而不是那种简单的命令执行式的。
4、 具有共同的工作规范和框架
高效软件开发团队具有规范性及共同框架的工作,对于项目管理具有规范的项目开发计划,对于分析设计具有规范和统一框架的文档及审评标准,对于代码具有程序规范条例,对于测试有规范且可推理的测试计划及测试报告等等。并且所有成员都明白自己的职责,知道必须完成什么计划?由谁来完成?什么时候开始?什么时候结束?按什么顺序?等,总之一个高效的开发团队无论是工作内容还是工作流程都具有不同程度的规范性和标准风格的框架。
5、 采用合理的开发过程
软件的开发不同于一般商品的研发和生产,开发过程中会面临着各种难以预测的风险,比如需求的变化、人员的异动、技术的瓶颈、同行的竞争等,高效的软件开发团队往往是采用了合理的开发过程去控制开发过程中的风险、提高软件的质量、降低开发费用,这样的团队会根据自身的必要程度决定要执行哪些工作?如配置管理、资源管理、版本控制、代码控制等,团队还合理的分划并定义开发过程的里程碑,决定每项活动内容的底线和审评标准,决定各项活动的先后关系或迭代的关系等。总之高效的软件开发团队的开发过程的原则是高效率、高质量、低成本。
‘叁’ IT公司的项目组入职了新的程序员,如何带好这些新员工
不少软件开发团队每年都有新的开发人员要加入,其中以初级程序员居多,要想让这些初级程序员能够快速融入开发团队并实现价值,需要从以下三个方面入手:
第一:以开发实践能力进行人员划分。 新入项目组的准程序员往往有两种情况,一种情况是刚刚走出大学校门的计算机专业毕业生,另一种情况是自主学习通过面试的非计算机专业毕业生。这两种准程序员在进入岗位之前可以根据实践能力进行人员划分,实践能力较强的可以直接安排进项目组中,而实践能力较差的准程序员则安排到实习岗位上。按照 历史 经验来看,不少实践能力较差的程序员如果直接安排到开发岗位上,往往会导致其放弃这份工作。
第二:老带新。 按照 历史 经验来看,让程序员快速成长的方式无非就是通过实际项目的锻炼,对于学习能力较强的程序员来说,如果有专人指导的情况下会很快融入到开发团队中,有的程序员在一个月之内就可以完成功能模块的开发。老带新的原则有三点,其一是软件开发团队所使用的技术结构要交代清楚;其二是软件开发过程中所使用的开发工具和开发流程要交代清楚;其三是给出具体的参考案例。
第三:安排清晰的工作任务。 对于初入项目组的开发人员来说,由于其自身的专业知识积累还比较少,在项目理解力上还有待提高,所以在安排具体开发任务的时候一定要详细,越详细越好,同时要给出明确的功能边界,防止出现不可控的事情发生,比如哪些数据是不能动的,哪些功能和资源是不能调用的等等。有的时候“无知”是最可怕的敌人,不少初级程序员进行的“删库”等操作都是在“实验”的心态下完成的。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言!
我是程序员出身,现在也管理着一个项目,手下最多的时候也有十几号人;但是说实话,在管理方面,我还是比较欠缺的,我也一直在学习和摸索;当项目组入职了新的程序员的话,我经常会这样做:
先沟通,大方向要保持统一
每当项目组入职了新的程序员,我会第一时间和他们沟通,主要让对方快速地知晓项目的基本信息,并了解我们大的方向、观点、风格,我是希望在某些地方能和组员保持一致,例如:
制定计划
下面就要给新人制定计划了,这一点在前期很重要,否则新人就会面临无事可做的尴尬;
安排开发任务
通常,我们一两周后就会给新人安排一些开发任务,当然这个过程也是从易到难:
代码检查
对于新人,代码检查一定要做;如果是工作时间段的新人,每一行代码都检查一遍都不为过。
最后,我会给新人一些成长方面的建议,让他们觉得在这个项目中能学到东西;毕竟我没有权利给他们涨工资,只能通过这种方式留住员工了。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
建议从以下几方面考虑:
1、人员能力考查和培养。人员的能力参差不齐,需要根据岗位进行有目标的培养;
2、业务技能提升。想把工作做好,不了解业务,不理解自己做的东西,早晚要出现与预期偏差较大的情况。
3、工作态度和心态的培养。
4、尽早了解项目内容和项目团队,将人员在项目中的定位和需要的技术提前告知,告知项目计划和提示工作的难点。
5、组织一点团队活动,早点融入项目。
第一:熟悉你们开发工具、开发环境、运营环境……
第二:熟悉上下开发工序对接组别和责任人……比如开发该项目的前端、后台、测试等不同组别以及其他开发外项目组外的不同部门打交道的人员。
第三:项目说明书、整体功能、进程,所负责的分割模块……要完完全全提供出来。
每个人都是从新人成长过来的,在我工作的五年间也带过很多新人,最近刚好有个毕业生来公司实习,领导让我带,这边就分享一下我具体是怎么操作的(开发的角度):
总而言之,带新人还是比较累的,对大部分公司而言,技术要求并不是很高,所以新人真的比较难上手的不是技术,而是业务和表结构逻辑的不熟悉,作为新人,公司的打算就是从零开始培养,因此基础并不是最重要的,学习的态度才是公司看重的。
以上为个人观点,欢迎在评论中发表自己不同的观点,喜欢的加个关注,谢谢。
以十人以下的团队来说一下。首先是和员工相处好,其实这一点做到并不难,就是正常的相处,怎么愉快怎么来(当然不能坏规矩)。我做的最大尺度一次是这样:有个毕业生干着干着就哭了,一问之后知道直接原因是程序员的工作内容和自己原来想的不一样,主要原因是刚到北京体会到了巨大的压力。当时我就拉着她到对面肯德基去坐会了,点了饮料和薯条,聊了一下,顺便开导开导她,舒缓一下情绪,这事就这么解决了。其次,作为领导请安排划分好工作内容,不要频繁变更,否则影响威望值。这也是保证工作可以顺利开展的基础。安排工作时请考虑员工的能力和经验,还要考虑员工的兴趣,这点也很重要,很大程度影响积极性。
在小团队中只要工作能顺利完成了,一般问题就不会很大了。其它:可以观察一下每个人的喜好,然后看机会适度的介绍这方面的内容。比如我就专门给一个员工培训过数据结构,而她也很愿意介绍自己认识的人来工作,双赢的结果。员工做好的地方及时表扬,自己做错的地方及时承担责任,等等。总之将心比心的对待员工,小团队还是好带的。
教会徒弟,饿死师傅,等你教会他们,你就该退了,理由:你三十多,奔四了,负担大,不能加班,养不起你!中国现状,保留必要绝活,留几招吧!为养家!
先让他做点小项目,锻炼一下,把以前已经完成客户的项目拿出来给他做,练手,看看功底如何
如果功底好,则主要锻炼他的思维能力
如果功底不好则多锻炼他的技能
首先是能力要过关,之后就是交流要能顺畅,其他的问题都不是问题,只是经验和熟悉而已。
‘肆’ 如何提高软件开发团队的协作效率
分工合理,责任明确
团队是由个人组成的,团队中的个人往往经历不同、背景不同、性格有差异、水平有高低。在团队形成后、正式开工前,首先应该进行合理分工,要结合每个人的特点和爱好,充分发挥出每个人的特长。因为如果工作不愉快、不顺手的话,效率自然低下。分工完成后,每个人对应的职责也就确定了。这时应该同每一位团队成员进行明确申明,最好以文字形式落实到个人并与日常绩效考核挂钩,以避免互相推诿、相互等待的情况出现。
制定高效的沟通机制
分工完成后团队即开始工作,此时必须保证信息在整个团队内的畅通,特别是互相之间有工作关联的同事,在发现问题时需要及时提出,以免造成不必要的工时浪费。 但软件开发本身是一种需要精力集中并且安静的工作,多次临时性的打断会造成开发思路的停滞,因此团队负责人最好能够每天在固定的时间段内组织大家进行沟 通,并了解工作的进度。而固定的时间也会让大家形成习惯,使效率得到提升。
发现团队瓶颈
大家往往会陷入一种误区,认为团队中每个员工效率发挥到极致的时候就是这个团队效率最高的时候。但经过企业管理实践不断的论证,这种想法其实是非常可怕的谬 论。正确的做法应该是将整个团队看成一个整体,再去谈效率问题。团队的分工协作就好比是生产的流水线,流水线的整体生产效率不取决于流水线上效率最高的环节,而取决于效率最低、速度最慢的环节。当流水线上某一环节出现故障而停滞时,整个流水线也就停滞了。这也是常说的木桶原理。所以我们必须时刻去发现团队 中的短板,尽一切力量帮助它,提高它的效率。这样,也许会牺牲局部某些个人的效率,但经过一段时间的实施后,你可能会惊奇地发现整个团队的效率变高了。
定期检查,及时调整
流水线的机器是死的,而程序员们是活的。因此团队的瓶颈也许会因为调整而发生变化,这时需要团队负责人审时度势,及时进行调整。也许需要修正前期的分工,也 许需要改变正在使用的技术,甚至是更换无法胜任的团队成员。让整个团队的工作效率保持在一个较高的并且能够相互匹配的水平,这样做非常重要。
总结
团队是一个整体,不能靠每个员工进行单打独斗,要始终牢记团队的最终效用取决于团队中效率最低的环节。进行合理分工是预防瓶颈发生的前提,而建立高效的沟通 机制则是发现瓶颈的有效方法。当瓶颈环节出现后要尽团队最大力量去发挥其效用,而当瓶颈发生变化时需及时做出调整,才能提高团队协作的效率。