前言
追求软件产品竞争力的企业,都会追求研发效能极致。对研发效能提升的投资是非常有价值的,因为如果一个开发者每天节可以节省一小时,即使一个50人的开发团队,总体节省的数字是非常可观的。
研发效能提升不仅仅是要提供更好的编程规范,开发工具,快速获得的流水线等硬件,也要对开发者提供贴心的软服务。因为目前软件开发不再单体活动,是一群人协作完成。因而个体问题转变了成社会问题:大家如何高效地协同、沟通和互动,团队与环境如何对开发者的工作产生影响。
软件开发要以人为本,对软件开发者群体进行研究。比如开发者之间是如何建立关系,关系是如何的管理,如何让参与者都有意愿,聚集有价值的活动,产生更大的能量,最终开发出有竞争力的软件。
软件开发特点
随着网络技术的广泛应用,当公司大了,公司的研发也可以玩起分布式。
- 时空分布性:开发各小组分布在不同的地理位置,在不同的工作时间相互合作进行产品开发。由于时空,背景等多种差异,开发人员在交流上的不及时或不顺畅,会造成通知不及时,重复设计,数据不一致等问题。
- 群组协作性:协同产品开发采用开发人员群体协作的方式,各项任务只能通过密切的协作才能完成,项目管理重心会转移到成员间协同工作。
- 面向任务性:软件协作开发不是面向问题的,而是面向任务的, 一项任务,多个开发者承担完成一个共同的任务而协同工作。分工不明确或不合理,会导致不必要的纷争和出现错误。
开发人员感知
一个大型系统软件的开发是建立团队成员相互分工又紧密协作的基础上,每个开发者在开发过程中,在不同阶段有着不同职责,尤其是信息不对称情形下,开发者可能不知道做什么或者下一步要做什么,也可能不知道别人在做什么,怎么与另一人协同进行交互。这无疑会降低整个团队的效率与软件的质量。
在现实生活中,人们通过感知来对环境作出反应。感知是对他人活动的了解,这些活动为自己的活动提供一个上下文,用来确保个人的活动能与群体整体活动相关,并以群体的目标和发展指标来评价个人活动。
感知包括对成员身份的感知,时间空间的感知,行为的感知等多个方面。从感知信息的角度看,协作成员之间的感知还包括如下几种类型:
- 组织感知:充分理解协作成员的组织结构,以及合作团队合作的整体目标,以此作为个体活动的指导方向。
- 环境感知:对整个动态系统的当前状态及外部环境的感知。
- 成员感知:对成员角色,责任,权限,具备的能力; 成员在协作中承担的任务, 以及所处的位置,状态的感知。
- 社会感知:对人员之间的社会关系,及某些社会协议,风俗,规则,习惯的感知。
- 行为感知:对协作任务的目的、协作任务的完成情况,协作过程中产生的对其它成员的协作请求,协作任务与其它系统其它任务之间的关系感知。
- 过程感知:在工作任务流中,成员要对任务的划分、活动在任务中所处的位置以及任务过程的感知。
开发者良好的群体感知是进行协同工作的前提,在一个软件开发过程中,察觉、认识和理解其它开发者的活动是人人互动协作的基础。群体感知是为了每个协作者建立全局的、一致的协作环境,并在此基础上提供成员与环境,成员与成员之间交互途径。
协同支撑体系
- 作业体系
既然软件开发需要协作,那得有面向软件开发的作业体系。从代码编辑器、包管理器、环境供给,代码托管提供实打实的服务等等,这些作业体系必须的流畅。软件应用如何被创建?如何构建和打包?如何进行部署?运行状态如何?只有这些问题解决了,产品功能才能有条不紊地演进下去。
作业体系的信息应该是公开透明,才能提升开发者的感知。IT系统要能让参与者感知到:参与者的状态,参加的活动状态,参与者的环境状态,项目状态,系统状态等。
开源软件让我们看到分布式,任务性的群体协同在软件开发上成功。开源软件的作业体系不仅是一种依托开放、开源的软件合作社群,而且正向基于分享、交互与群体智慧的同侪生产方式发展。在此方式下,使用者与设计者、开发者、维护者之间不再壁垒森严,交互是开源协同的核心。
- 项目管理
在群体的工作中,每个开发人员相当网络中一个节点,开发人员会与其它人员形成交互,假设两个开发者从事同一个任务的开发,可以视为存在一条合作连边,多个开发者形成了复杂开发网络。
高效基础设施提升效率前提,但它也不是万能的。全面提升产品研发交付效率,还得是一个从无序到有序的 “熵减” 过程,只能通过外部干预,才能让它不断的朝着更快更安全的方向发展。
所以需要“拉通”的角色,把复杂开发网络有效运转,这个角色是非常的重要。项目的可见性如何保证?瓶颈点如何消除?项目的健康度如何?所以项目管理就是不遗余力地消除短板的过程。
- 内容平台
开发工作是一项知识生产活动,这些抽象的知识往往存在于每位开发者的大脑中,如果不能以一种可重现的方式分享出来,就会极大的增加沟通成本,所以,我们需要一种载体,将所有人的知识成果保存下来,这是一种无形资产。
不得不吐槽一下,DBox,Hi3ms根本无法把软件开发过程产生知识承载起来。Wiki是一种方式,能够比较好结构化知识库来记载信息和知识,急需一个面向开发人员的内容平台,并且有相应的协同能力,能够打通一些研发作业工具,而不是一个孤立的文档管理。
信息安全管理对企业非常有价值,但执行过程中不能太过于僵化,能通过技术解决的就用技术解决,能通过法律解决也就用法律解决,权限控制应该减少对开发人员的不使用流畅感知。
- 编码辅助
工欲善其事必先利其器,人们发明集成开发环境,到各种智能化的辅助工具,甚至开箱即用的开发框架,这是考虑对如何更便捷的得到编码产物的优化手段。
当然编码辅助还可能有很多很多,把编码经验工具化。如质量检测辅助, 帮助快速检测到应用程序和基础库代码中的各种安全漏洞和质量问题;代码更新辅助,帮助进行大规模代码库重构,重构提供自动化参考,也提供了人为监督和偶尔干预的方式。
疫情之下,Code Any Where也显示越来越重要,云开发可能是一种趋势,实时代码共享和协作,可以通过链接将项目共享给其他人,也可以设置实时协作以允许其他人在编辑器中编辑文件。
结语
所谓万变不离其宗,任何花哨的酷炫解决方案,都不应离开开发者日常的工作内容。无论是在硬件还是软件上,都要朝着提升开发者的感知,让信息组织更有效,对信息感知更合理,通过在线协作,多端协同,在线分享,提供协同的个性化、智能化,提高工作效率。