大规模快速发展

Jez Humble在 GOTO Berlin 2015会议上讨论了限制大规模快速发展的组织障碍,并提到了如何解决这些障碍。InfoQ对他进行了采访,主要关于我们如何专注于价值而不是成本,为什么对工件的共识非常的有价值,当你不知道客户需要的特性时就会产生浪费和以低廉的代价快速发现客户需求,和如何使用改进 Kata概念实现持续改进。

\\

InfoQ:您提到在大多数组织中,人们把更多的精力投入到成本的预算上而不是潜在商业价值的预测中。我们是如何陷入这种局面的?

\\
\

Humble:在演讲中,我引用了 Douglas Hubbard为CTO杂志写的一篇文章,Douglas Hubbard是优秀著作“How to Measure Anything”的作者。“即使项目中有着非常不确定的开发成本,我们也没有发现这些成本对投资决策有着重要的参考价值……唯一重要的未知因素是项目是否会被取消。次重要的是系统的使用,包括如何快速推出系统和究竟是否有人在使用系统。”我们陷入这种局面是因为度量成本相对比较容易,而商业价值(根据 ROI、生命周期利润度量,或者任何你在意的产品度量值)则更加的困难。

\\

不能充分理解的是,无关紧要的初始开发成本有哪些。对于一个成功的产品,不断的开发和维护成本将会消耗初始开发成本(企业通常会花费70-80%的 IT预算来保持正常生产和扩大现有系统的产能。)对于一个不成功的产品(大部分是他们这种产品),这是一种沉没成本。不幸的是如果项目取消或者产品没有使用,企业往往不会评估开发成本并将其作为限制不利因素的方法。如果他们这么做了,他们就能更好地开发原型,与实际用户一起验证产品的假设,而这正是精益创业(遵循数十年的良好实践,从 Winston Royce的原创“瀑布式”论文开始)提倡的。

\
\\

InfoQ:更重要的是我们如何摆脱它,专注价值而不是成本。对此您有什么好的建议吗?

\\
\

Humble:我认为从根本上来讲,你需要确保客户会为你解决的实际问题买单——要么钱要么时间。许多产品——包括内部 IT系统——在这方面做得非常不好。内部 IT的标准化常常让问题变得更加的糟糕——人们被迫使用没有考虑他们需求的设计系统。作为一个行业,我们应该发现需要解决的实际问题,从而更认真地考虑用户体验,然后决定有效解决问题需要的最小工作量。Jeff Patton讨论了最小化输出和最大化成果。

\\

很多时候我们都是直接跳到解决方案,并痴迷于尽可能广泛的交付解决方案。与直接跳到设计和构建解决方案相比,类似影响地图(impact mapping)的工具通过寻求可能达到成果的方法,帮助人们专注于他们想要达到的成果,然后设计试验来测试哪种方法消耗的成本和精力最低。

\
\\

InfoQ:您提到对工件的共识非常的有价值。您能举例说明一下吗?

\\
\

Humble:在敏捷方法中,用户故事卡片是经典方法中的一个方法。正如之前 Ron Jeffries指出的,故事卡片被设计成一种令牌,用于交流的提醒。令牌不是规范文档——交流产生的共识才是。任何文档都不能取代共识——需求文档从根本上是抽象泄漏(leaky abstraction)(这并不是说他们没有用,他们只在拥有共识的情况下才能发挥作用)。影响地图也一样——影响地图练习的关键是通过行动产生的共识,这种共识不是由影响地图产生的,它只是我们交流的一种提醒令牌。

\\

有观点认为交流和共识是重要,但会让很多人产生焦虑,尤其当你要大规模处理构建时。需要建立共识的通信带宽将以指数方式增加团队规模。解决方法不是建立更多流程——文档不能取代共识,相反,应该精心架构(包括系统和组织)从而减少更小、跨职能团队之间的依赖。分布式系统的兴起更加暴露解决这个问题的急迫性,分布式系统架构对组织架构有很多重要启发,但是许多组织仍然没有重视这些启发。

\
\\

InfoQ:您能解释一下当你不知道你的客户真正需要哪种特性时,就会产生浪费?

\\
\

Humble:我乐于引用Ronny Kohavi在 Amazon和 Microsoft上运行的在线试验,多年数据显示我们认为是好主意的2/3特性实际交付的都是0或者负价值。即使你没有测试你的特性,也只有不到一半的特性会给你的组织交付价值。其它都是巨大的资源浪费——在不构建实际可以交付价值的特性中有一个机会成本,维护他们加入你系统的特性、复杂性的成本可以降低发展他们的成本。

\
\\

InfoQ:您能举例说明如何以低廉的代价快速发现客户需求?

\\
\

Humble:多年来,UX社区提出了各种方法用于客户研究,从非常低的保真度——简易原型——到非常高的保真度(A/B测试)。对我来讲,精益创业运动最重要的成就是分享了许多用于测试想法的高明方法。其中最出名的一个故事是 Ries书中描述的 Zappos如何在没有供应链的情况下开始的——Nick Swinmurn会走进商店,买下已经从网站订购好了的鞋子,并通过邮局邮寄。

\\

随着产品的发展,与科学一样,设计优秀试验成了最难的部分,但是它为快速挖掘伟大的产品提供了最好的机会。然而,这些仍然没有普遍实行或者可以在商学院学到,人们仍然感觉非常的难以做到,可能是因为它需要创意而不是执行千篇一律的过程。

\
\\

InfoQ:您在演讲中提到了改进 Kata的概念。您能简要介绍一下它,并展示如何使用它实现持续改进?

\\
\

Humble:改进 Kata是用于工艺改进的一种科学的试验方法,是一种反映产品开发的试验方法。在 Mike Rother的著作 Toyota Kata书中有详细描述,在他的网站上有许多免费可用的创意共享材料和练习手册。Rother花费了很多年的时间研究 Toyota如何通过制造比对手速度更快,更便宜,但是质量更高的汽车,从而持续保持市场领先地位。

\\

他发现 Toyota管理者不会告诉员工如何开展工作。相反,组织内的人们共同努力,建立一个长期挑战(明确定义的可度量指标)。然后,在项目或者团队层面,他们从记录目前的工作过程开始,然后为过程设定短期可度量的目标,这个目标可以帮助他们完成挑战。管理人员的重点工作是当员工尝试试验完成目标时提供支持帮助。

\\

改进 Kata的关键在于将过程改进工作作为每个人日常工作的习惯性的一部分。Rother指出,如果我们不能一直努力改善我们的过程,他们就会逐渐僵化——尤其是在面对我们组织变化状况时。有效风险管理是一种需要持续努力评估和改进过程的活动能力,这不能通过指挥和控制的方式有效完成。相反,操作过程的人必须拥有尝试改进的权利。

\\

在我写新书的时候最打动我的是, 精益企业也发觉到用于工艺改进的试验方法与企业比如 Amazon开创的用于产品开发的试验方法的相似之处。他们都提供了一种实现高弹性和适应性强的大规模组织的方法——这是瀑布式或者当前敏捷扩展框架的替代方案,实际上他们几乎不能破坏如今在许多企业盛行的高度封闭的、指挥和控制信息流和决策。

\
\\

查看英文原文:Moving Fast at Scale

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

粘滞位 File文件内容

t权限(粘滞位): 是‘不可删除’权限,就是说即使某用户拥有这个文件的rwx权限,可以随意修改文件内容,但是就是不能删除,甚至不能修改文件名,只有root才行。t权限也可以直接用 chmod ot/at fil…

hdu 3864 素数分解

题意&#xff1a;求n是否只有4个因子&#xff0c;如果是就输出除1外的所有因子。 模板题&#xff0c;就不排版了 1 #include<cstdio>2 #include<iostream>3 #include<algorithm>4 #include<cstring>5 #include<cmath>6 #include<queue>7 #…

QQuickRenderControl

2019独角兽企业重金招聘Python工程师标准>>> http://doc.qt.io/qt-5/qquickrendercontrol.html http://translate.google.com.hk/translate?hlzh-CN&slauto&tlen&uhttp%3A%2F%2Fhabrahabr.ru%2Fpost%2F247477%2F http://www.kdab.com/overview-qt3d-2-…

线程的控制(创建、等待、终止)、分离线程

一、线程控制 1、线程&#xff1a;线程是资源调度的基本单位&#xff0c;线程是进程内部的一个执行流&#xff0c;在进程的地址空间内运行。在Linux 下没有真正意义上的线程&#xff0c;线程是用进程模拟的&#xff0c;又被称为轻量级进程。 2、由于同⼀一进程的多个线程共享同…

从netty-example分析Netty组件

分析netty从源码开始 准备工作&#xff1a; 1.下载源代码&#xff1a;https://github.com/netty/netty.git 我下载的版本为4.1 2. eclipse导入maven工程。 netty提供了一个netty-example工程&#xff0c; 分类如下&#xff1a; Fundamental Echo ‐ the very basic client and …

$GLOBALS -- 变量

可以在$GLOBALS中获得所有的变量 $GLOBALS天然就是一个有很多内容的变量 $_SERVER $jackson "Example content";$_GET[A] A;$_GET[B] B; 于是乎 就有了 $GLOBALS[A]$GLOBALS[B]$GLOBALS[jackson]转载于:https://www.cnblogs.com/qinqiu/p/4475836.html

背景图片适应屏幕百分百

<!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1" /><title>背景图片大小</title> </head><style>body{margin: 0;…

20150504-日报

1、Delphi中的存储过程 参数 数据类型Delphi7中的使用存储过程的话&#xff0c;加入要获取输入参数的话&#xff0c;一般都是通过这样的方式&#xff1a;with spDelRights do begin if Active then Close; Parameters.Clear; Parameters.Refresh; Parameters.ParamByName(usern…

cep

cep posted on 2015-12-16 17:03 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/5051673.html

BZOJ-1036 [ZJOI2008]树的统计

树链剖分模版题。 #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cctype> #include <cmath> #define rep(i, l, r) for(int il; i<r; i) #define clr(x, c) mem…

malloc/free 和 new/delete的联系和区别

一、malloc/free 1、 函数原型&#xff1a;void* malloc(longNumBytes) 该函数分配了NumBytes个字节&#xff0c;并返回了只想这块空间的的指针。如果分配失败则返回空。 函数原型&#xff1a;Void free(void *firstBytes) 该函数是将之前用malloc分配的内存空间释放&#…

RHCS集群原理概述

一、 什么是RHCSRHCS是Red Hat Cluster Suite的缩写&#xff0c;也就是红帽集群套件&#xff0c;RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合&#xff0c;它将集群系统中三大集群架构融合一体&#xff0c;可以给web应用、数据库应用等提…

Linux学习笔记11——文件I/O之二

一、文件共享 内核使用三种数据结构表示打开的文件&#xff0c;它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。 1、每个进程在进程表中都有一个记录项&#xff0c;记录项中包含有一张打开文件描述表  2、内核为所有打开文件维持一张文件表  3、每…

死锁产生的原因及条件、如何避免死锁

一、死锁的定义 是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造、成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进程称为死锁…

Git Proxy开关

2019独角兽企业重金招聘Python工程师标准>>> 这个是配合ShadowSocks使用的&#xff0c;在~/.bash_aliases或者~/.bash_profile中设置以下代码&#xff1a; #git proxy enable alias gitpe"git config --global http.proxy socks5://127.0.0.1:1080;git config …

SAP web 开发 (第二篇 bsp 开发 mvc模式 Part2 )

单击第一个图标&#xff0c;第一个图标突出显示&#xff0c;单击第二个图标&#xff0c;第一个变灰&#xff0c;第二个突出显示&#xff0c;反之一样。单击history读取历史记录。 Controller ZCL_SUS_C_ORDER_CHANGE 1. DO_INITmethod DO_INIT. *CALL METHOD SUPER->DO_I…

cuda内存总结

&#xff11;&#xff0e;shared memory __shared__ 声明为共享内存&#xff0c;将会保存在共享内存中 &#xff12;&#xff0e;constant memory __constant__ 声明为常量内存&#xff0c;将会保存在常量内存中&#xff0c;常量内存是只读内存&#xff0c;声明时要静态的分配…

平衡二叉查找树插入节点操作( AVLTree ):旋转、调整平衡

AVL树的插入 在向一棵本来高度平衡的AVL树中插入一个新节点时&#xff0c;如果树中某个结点的平衡因子的绝对值 > 1&#xff0c;则出现了不平衡。设新插入结点为P&#xff0c;从结点P到根节点的路径上&#xff0c;每个结点为根的子树的高度都可能增加1&#xff0c;因此在每…

Fork/Join框架介绍

转http://www.infoq.com/cn/articles/fork-join-introduction/ 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架&#xff0c; 是一个把大任务分割成若干个小任务&#xff0c;最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和…

为什么析构函数可以能声明为虚函数,构造函数不可以

转自&#xff1a;http://blog.csdn.NET/chen825919148/article/details/8020550 构造函数不能声明为虚函数&#xff0c;析构函数可以声明为虚函数&#xff0c;而且有时是必须声明为虚函数。 不建议在构造函数和析构函数里面调用虚函数。 构造函数不能声明为虚函数的原因是: 1 …