最近接了一个横向任务,组织团队的周度技术分享,目标是一年完成30场,依据目标和定位完成了本指南。
基本原则
技术分享时应秉持的基本原则
- 应有团队和个人、奉献者(统筹人)的概念,同时匹配团队激励、个人激励和最佳奉献者激励;团队应该打开工作内容边界,成员应该来自各内容方向
- 评分标准不应该过于模糊,否则没有意义,应由客观的基础分值以及分团队的主观综合结论得出。
- 应有心愿单激励机制,促进大家共同聚焦到感兴趣的事情上
- 选题应有规范和框架,具体到某个小类,这样收获才有目标性,发布分享主题时大家才能快速判断是否是自己感兴趣的
- 流程和分享的模版应该有固定范式,避免随意的格式导致随意的内容,评分也应该部分参考于此
- 参会原则,应有良好的参会习惯,不浪费大家的时间,参会时尽量不处理工作问题,完全不处理个人问题
基于基本原则来制定基本规范
基本概念
包括分享类型、积分规则、分享小队、心愿单、分享模板、分享流程、分享激励
分享类型
分享选题应该具体且来自一个确定的框架下:
积分规则
要有非常细致的积分规则,才能保证激励的准确性:
- 初始积分:所有人均有初始积分【100分】,每个小队各有【200分】,2022年M3开始,到年底共有10个月,43周,保证每队至少分享10次,保证每人至少分享3次,4人的小队在额外周【43-40】进行额外分享。月底核算的积分会成为下月的初始积分。
- 心愿单积分:为防止组内恶意互相悬赏,悬赏提出人和领取人为同一组,则悬赏积分上限为【10分】,为不同组时,悬赏积分上限为【20分】
- 分享积分核算规则:课件质量&组织流程质量【5分】+其它3个小队每队5分上限的评分【5(好评如潮),4(多半推荐),3(褒贬不一),2(多半差评),1(差评如潮)】,所以单场分享分享人可以获得的上限为:20分
- 团队积分规则:轮值分享小队在分享前一周会接收问询是否照常举办该次分享,若本小组在应当排期时未提供分享,则从责任小队基础分扣减小队团队积分20分加到主动承担本次分享的成员所在小队,本次分享者及小队统筹者也按常规流程评价增加个人积分,如果也没有主动分享的,那么这20分纯消失扣减
- 提问积分奖励,单次分享释放三个问题,提问者,也即互动者,提一个问题,个人加一分。
基于以上细致的积分,激励一定会准确:课件质量&组织流程质量【5分】的计算规则:
分享小队
设立小队的目标是使得竞技更加有激励性和荣誉感
- 打破小组边界,按照商户研发群成员顺序表从上到下分割划分,保证每个小组至少有两个方向任务的成员
- 统筹人工作内容:安排组内成员做分享、会议室预订、PPT||wiki文档的收集及质量把控、分享前预告内容及会议室、分享时主持分享会议及节奏、分享后统计分享反馈及计算分享积分
- 统筹人收获激励:小组的每次分享最终成员个人得分计算出结果后,统筹人本人获得个人积分=分享成员本次分享所得积分*5%
- 分享排期:每个月4周4个小队必须各出一个分享人,如果确定不分享,别的小队成员参与后,则扣减团队基本分数,参见【积分规则说明】
小队的人员规则如下:
心愿单
心愿单代表了一种内容的指向性激励
- 任何人都可以在心愿单上填写项目,并且挂出悬赏积分,领取心愿者在分享结束后可以获得=本场分享积分+悬赏积分提出人满意度,同时提出人扣减积分为悬赏积分提出人满意度
- 领取人领取心愿单任务后,所在小队在轮到该小队分享时安排此次分享任务
- 当列表中有多个且都被同一小队内的成员领取的心愿时。该小队按照如下顺序比较排期:领取人存在+附议人最多+悬赏积分最高,按顺序从左到右判断三个条件,满足即返回,相等继续判断。保证有人讲+最多人有人想听+激励最给力
心愿单表格式
基本流程
每个月的各个周由小队顺序分享:ABCD
分享前
例如当前周为W1,本周分享团队为A队,下周分享团队为B队
- 本周一分享团队统筹人:收集分享者资料,把控资料的质量。确定会议时间,收集大家的时间
- 下周分享的小队统筹人:确定好分享人、分享题目并在下周一收集和整理资料
分享时
分享时,统筹人进行会议签到,召唤大家到会议室参会,把控流程,确保1小时内结束。分享人先进行提纲目录介绍,然后开始分享,结束后问答环节回答三个提问问题
分享后
分享结束后,统筹人统计各个团队给出的分值,各团队的分值为团队内成员匿名打分的平均分。
分享激励
依据原则所覆盖的处置实体进行激励
- 年度积分最高小队:团队积分+所有成员个人积分的总和。从团建经费拿出RMB______元或等值礼品给小队进行奖励
- 年度积分个人前三:个人积分总和。从团建经费拿出RMB_____元或等值礼品给第一名,从团建经费拿出RMB_____元或等值礼品给第二名,从团建经费拿出RMB_____元或等值礼品给第三名
- 年度最佳统筹者:个人统筹积分总和(即统筹人的点位积分收益)。从团建经费拿出RMB______元或等值礼品给小队进行奖励
按照以上方式进行激励
分组积分计算代码
分组积分的计算代码如下
package com.example.springboot; import com.example.springboot.service.ScoreSum; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import java.io.FileWriter; /** * * @Name ScoreSumTest * * @Description * * @author tianmaolin * * @Date 2022/3/7 */ @SpringBootTest public class ScoreSumTest { @Resource private ScoreSum scoreSum; @Test public void getScoreSumTest() { float score = scoreSum.getFinalScore(); System.out.println("finalScore:"+score); } }
计算代码,分四组,分享者以外的其它三个组,每个组的平均分计算综合
package com.example.springboot.service; import com.example.springboot.dao.PeopleWithScoreDao; import com.example.springboot.model.PeopleWithScore; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * * @Name ScoreSum * * @Description * * @author tianmaolin * * @Date 2022/3/7 */ @Service public class ScoreSum { @Resource private PeopleWithScoreDao peopleWithScoreDao; private final String[] a_group = new String[]{"a1", "a2", "a3"}; private final String[] b_group = new String[]{"b1", "b2", "b3"}; private final String[] c_group = new String[]{"c1", "c2", "c3"}; private final String[] d_group = new String[]{"d1", "d2", "d3"}; private final String sharePeople_group = "a"; public float getFinalScore() { List<PeopleWithScore> peopleWithScoreList = peopleWithScoreDao.getPeopleWithScoreDaoList(); for (PeopleWithScore people : peopleWithScoreList) { if (Arrays.asList(a_group).contains(people.getName())) { people.setGroupName("a"); } if (Arrays.asList(b_group).contains(people.getName())) { people.setGroupName("b"); } if (Arrays.asList(c_group).contains(people.getName())) { people.setGroupName("c"); } if (Arrays.asList(d_group).contains(people.getName())) { people.setGroupName("d"); } } peopleWithScoreList.removeIf(x -> x.getGroupName().equals(sharePeople_group)); Map<String, List<PeopleWithScore>> maps = peopleWithScoreList.stream().collect(Collectors.groupingBy(PeopleWithScore::getGroupName)); float finalScore = 0; for (String key : maps.keySet()) { float keyScore = getGroupScore(maps.get(key)); System.out.println("key is " + key + " score is " + keyScore); finalScore += keyScore; } return finalScore; } private float getGroupScore(List<PeopleWithScore> peopleWithScoreList) { float groupScore = 0; for (PeopleWithScore peopleWithScore : peopleWithScoreList) { float a = peopleWithScore.getScoreOne(); float b = peopleWithScore.getScoreTwo(); float c = peopleWithScore.getScoreThree(); float peopleScore = (a + b + c) / 3; groupScore += peopleScore; } return groupScore / peopleWithScoreList.size(); } }