技术团队做项目需求的工作过程中,经常会出现一些反复不断的问题,这些问题会严重影响团队的工作效率,同时也会给团队的士气带来重大的影响。接下来,我们来讨论一下这些问题发生的具体场景,造成的问题原因,以及如何预防和解决这些问题方法技巧。
今天来看第一个常见的问题:当所有的需求或任务都是第一优先级的时候,你该怎么办呢?
一切都很重要紧急
这是指每个需求、任务和问题都被定义为最高优先级,技术团队管理者只是经常检查不同任务的进度,而不给开发人员适当的时间来完成任务等。
这个问题发生的常见情况有以下几种:
- 项目进入核心攻关阶段遇到严重问题
- 或者项目进入临近的截止日期
- 项目进行中间需求方案发生重大的变更
- 或有时是由于来自于需求方(客户,业务方)的压力
- 或面对需求方和研发团队之间缺乏合理的缓冲区
- 来自于大 Boss 的需求,等等
在工作中,工作要分轻重缓急,这个策略无论对于个人,还是对于一个团队都是十分重要的。当一切都是很重要紧急时候,其实也就是都不重要紧急了。
背后的原因
对于一切任务、需求都是很紧急现象,为什么会成为一个严重影响技术团队效能的问题,主要原因有以下几点:
-
这是一个非常明显的迹象,表明管理团队正处于混乱之中。问题没有得到适当的评估或分类。它会迅速侵蚀团队对领导的信任和信心,从而有效地领导这个项目或团队。
-
这会在团队和管理层之间形成一种“我们 vs 他们”的对立关系,因为这会导致沟通紧张,并且这种情况将很难逆转。
-
这样做的影响将远远超过即将到来的截止日期,这种信任和动机的侵蚀所带来的影响将远远大于将截止日期稍微推迟一点所带来的成本。
-
在许多情况下,团队已经非常努力地工作在项目上,并且已经承受了很大的压力。将每件事都分配为高优先级并不会影响团队完成的工作量,但是它会降低识别和解决真正紧急或高价值问题的能力。
-
更不用说看到每一项任务都被分配为紧急任务的给团队心态带来的消极影响了。
解决之法
解决这个问题的核心是让团队时刻聚焦在核心目标之上,管理者必须要让团队尽可能专注于交付最高价值/最好的产品是至关重要的,即使需要加班或者压缩工期等。
对于产品需求要做价值大小,紧急程度的合理分类,确保研发资源投入到关键需求;对于项目无论最后期限如何临近,都要对问题进行适当的分类,仅仅分配一个新的优先级并不能帮助你在截止日期前完成任务。
团队管理者可以试试这些方法:
- 定期盘点需要投入研发的需求和任务,管理好需求池
- 把需求和任务合理分类,例如:低优先级,好的优先级,中等优先级,高优先级和关键优先级等
- 延迟交付:进行中的项目遇到问题后重新做交付时间的评估
- 或者寻找减少截止日期范围或移动截止日期的方法,例如砍需求,分期交付等
减少工作范围或推迟交付并不总是可行的,但是如果你的团队已经在加班冲刺中,如果还把所有任务都分配到很紧急状态并不能帮助你更好的完成工作,并且只会降低团队的效率和士气。
如果这会与需求方(客户或业务方)发生冲突的结果,那就需要管理者和需求方做有效的沟通,寻求合理解决方案
最后
[ 10s ] thds: 10 tps: 158.87 qps: 3191.79 (r/w/o: 2235.67/637.48/318.64) lat (ms,95%): 78.60 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 10 tps: 167.70 qps: 3351.32 (r/w/o: 2346.74/669.18/335.39) lat (ms,95%): 70.55 err/s: 0.00 reconn/s: 0.00
[ 30s ] thds: 10 tps: 166.61 qps: 3333.69 (r/w/o: 2333.53/666.84/333.32) lat (ms,95%): 71.83 err/s: 0.00 reconn/s: 0.00
[ 40s ] thds: 10 tps: 162.60 qps: 3251.71 (r/w/o: 2276.33/650.28/325.09) lat (ms,95%): 77.19 err/s: 0.00 reconn/s: 0.00
[ 50s ] thds: 10 tps: 166.00 qps: 3321.84 (r/w/o: 2324.83/664.91/332.10) lat (ms,95%): 73.13 err/s: 0.00 reconn/s: 0.00
[ 60s ] thds: 10 tps: 168.10 qps: 3359.81 (r/w/o: 2351.84/671.78/336.19) lat (ms,95%): 70.55 err/s: 0.00 reconn/s: 0.00
[ 70s ] thds: 10 tps: 157.59 qps: 3150.10 (r/w/o: 2205.33/629.58/315.19) lat (ms,95%): 77.19 err/s: 0.00 reconn/s: 0.00
[ 80s ] thds: 10 tps: 166.21 qps: 3326.41 (r/w/o: 2328.24/665.74/332.42) lat (ms,95%): 71.83 err/s: 0.00 reconn/s: 0.00
[ 90s ] thds: 10 tps: 168.40 qps: 3365.31 (r/w/o: 2355.40/673.30/336.60) lat (ms,95%): 70.55 err/s: 0.00 reconn/s: 0.00
[ 100s ] thds: 10 tps: 166.10 qps: 3324.53 (r/w/o: 2327.32/664.81/332.40) lat (ms,95%): 71.83 err/s: 0.00 reconn/s: 0.00
[ 110s ] thds: 10 tps: 166.10 qps: 3322.55 (r/w/o: 2325.66/664.69/332.19) lat (ms,95%): 73.13 err/s: 0.00 reconn/s: 0.00
[ 120s ] thds: 10 tps: 165.00 qps: 3298.45 (r/w/o: 2309.23/659.21/330.00) lat (ms,95%): 74.46 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 277242 --读总数
write: 79212 --写总数
other: 39606 --其他操作,如(www.shicaiyulezc.cn www.wyuleezc.cn commit,alter,delete)
total: 396060 --全部总数
transactions: 19803 (164.93 per sec.) --TPS,总事务数(TPS,每秒事务数)
queries: 396060 (3298.53 per sec.) --读写事务数(QPS,每秒事务数)
ignored errors: 0 (0.00 per sec.) --忽略的错误数
reconnects: 0 (www.yixinpt2.cn 0.00 per sec.) --重新连接数
General statistics: --统计结果
total time: 120.0702s --总耗时
total number of events: 19803 --共发生了多少事务数
Latency (ms): --响应时长统计
min: 13.76 --最小耗时
avg: 60.61 --平均耗时
max: 377.66 --最长耗时
95th percentile: 73.13 --95%请求最大响应时间
sum: 1200356.69 --总耗时
Threads fairness: --与线程相关的指标
events (avg/stddev): 1980.3000/9.90 --事件(平均值/偏差)
execution time (avg/stddev): 120.0357/0.02 --执行时间(平均值/偏差)
using TickEvent = std::function<void(std::int64_t elapsed_ms)>;
using TickRunCallback = std::function<void()>
using clock = std::chrono::high_resolution_clock;
Tick(std::int64_www.jintianxuesha.com t tick_ms,
std::int64_t life_ms =www.hengxinzhce.cn std::numeric_limits<std::int64_t>::max());
Tick(TickEvent tick_event, www.feihongyul.cn std::int64_t tick_ms,
std::int64_t life_ms = std::numeric_limits<www.uuedzc.cn std::int64_t>::max(),
TickRunCallback run_beg = nullptr,
TickRunCallback run_end = nullptr);
virtual ~Tick(www.qiaoheibpt.com )www.jujinyule.com ;
bool IsRunning(www.yachengyl.cn) const;
void Start(www.baichuangyule.cn);
void Stop(bool wait_life_over www.letianhuanchao.cn= false);
const std::chrono::www.jinmazx.cn www.bhylzc.cn time_point<clock> &GetTimeStart() const;
void SetTickEvent(TickEvent &&tick_event);
void SetTickEvent(www.zhuyngyule.cn const TickEvent &tick_event);
void SetRunBegCallback(www.shicaiyulezc.cn www.wyuleezc.cn TickRunCallback &&run_beg);
void SetRunBegCallback(www.pingguoyul.cn www.kunlunyxgw.com const TickRunCallback &run_beg);
void SetRunEndCallback(TickRunCallback &&run_end);
void SetRunEndCallback(const TickRunCallback &run_end);
总之,面对所有的需求,任务和问题的情况下,技术团队内部要建立一个合理的缓冲区,在内部对需求和问题重新评估一个合理的优先级,以一种有助于高效交付最佳产品的方式来工作。
管理者不能只是一个简单的任务分发器,不能仅仅把问题压力转移到团队成员身上去。
团队管理者要做好过滤器和缓冲器的工作,确保团队工作处于一个合理的节奏之中,节奏感很重要哦。