阅读更多
随着云计算带来的低创业门槛、大数据潮流的盛行,越来越多的人加入了这场创业风暴。然而众多的淘金者中,真正满载而归的却是少之又少。这里为大家分享HighScalabilty创始人Tod Hoff结合南极穿越之争带来的成功软件架构经验,及成功团队需具备的一些特性。以下为译文。



每个软件打造的核心都存在一次漫长的探险,或许你会觉得夸张,但是在 皇家卑诗省博物馆参观Race to End of Earth(罗威探险家 Roald Amundsen和英国海军官员 Robert Scott于1911年-1912年完成的 穿越南极之战)展览时,两支队伍采用的不同途径让我备受启发——那些同样存在于软件开发过程中决定成败原则。

我希望我可以重现 参观时的体验。随着参观的进行,我不断的对Scott的选择产生质疑,并叹服于Amundsen的老道,其中核心直指开发的两个极端Agile(Amundsen)与Waterfall (Scott)。

首先我们看两个比赛的背景知识

简而言之,率先抵达南极的队伍获胜。两个领队以完全不同的途径去完成这一目标,方法源于他们不同的目标、经验以及气质。比赛的结果是Amundsen比Scott早33天抵达,同样队伍的状态上Amundsen更是远胜Scott。归途中,Amundsen队伍无损,而Scott小队全军覆没。

更多的细节可以参考:

我们的重点则是可以运用于软件打造中的知识:

1. 单一的目标

这点让我感受颇深:Amundsen唯一的目标就是以最快的速度抵达目标,而Scott则要兼顾科学研究。

对于Scott来说,科学研究这个使命甚至优于资源与人员配备。而Amundsen的所有目的都是赢得比赛,还有平安归来。

想比之下Scott的双重目标存在很多矛盾。不错,那时确实不乏悠久的帆船科学研究历史(比如达尔文),然而达尔文并不是进行比赛,他们的船很大,同时科学研究只是附加目标,而环境也远没有南极那么恶劣及荒无人烟。

Fred Wilson在谈专注的力量时 经常引Steve Jobs为例——“我们专注于打造一个适合所有场景电脑的生产线,然后逐渐关闭其它的生产线”。专注是类似Minimal Viable Products及 time box scheduling产品背后的原动力,Amundsen专注在比赛上,所以一切策略都以这个为目标展开。

2. 使用简单,已被验证的技术

比赛中最难以接受的就是Scott的计划选择了一组复杂且未经验证的运输技术。

Amundsen的计划是简单的,他们选用狗拉雪橇;而在那时,狗拉雪橇的这个技术无疑是得到论证的,因此奇怪的应该是不选用狗的人。

然而在早先的旅行中Scott对狗有着非常不好的体验,所以他并未选用这个运输途径。取而代之的是,Scott选用了motor-sledge,这是机动雪橇的早期版本。在那个时候,这还是个试验中的技术,最终3架motor-sledge都在途中损坏。然而当下的问题不是讨论他们为什么有那么差的体验,而土著人民却非常善于用狗,而是缺乏对事物的详细了解并往下定论。



小马的任务是搬运补给,但是很小的蹄子让其不能胜任工作,因为它很容易受到潮湿和冰冻的侵害。9匹小马在旅行开始时就失去了作用,然而马和motor-sledge的补给只能储存在船上。对比而言,狗无疑更适应战场,它们可以吃南极洲捕获的企鹅和海豹肉。

使用人力拉沉重的雪橇,本来只作为应急,但是马和motor-sledge的缺失让这个方案执行了3/4的旅途。而雪橇还在不停变重,因为沿途他们不得不收集一些岩石以作科学研究。这样,问题就在于他们根本没有足够的食物以支撑整个过程。他们并不清楚,一天吃4000卡路里的他们却需要消耗6000到10000卡路里的能量。



3. 定制、测试、重复

Amundsen的计划很周密,不留任何漏洞。当他发现设备达不到需求时,会自己动手,他亲自做了防风镜、滑雪板、犬绳及肉干。这种自力更生正是开发者需要具备的品质:

所有Amundsen的工具都出自自己的工坊,并经过一次又一次的提炼。Amundsen在制造工具时使用了两个信条:第一,远甚于批量生产的设备;第二,参与制造,可以确保设备在比赛中的表现。



4. 冷静且无情的

捕获焦点,必须具备认知重点的能力,只做必要的事情。

Walter Sullivan在The South Pole Fifty Years After使用另一个方式完美的阐述了这个道理:

引用
登月通过一连串的火箭完成,而在这个过程中这些火箭被逐一抛弃;那个挪威人使用了同样的策略,在旅途中不断抛弃虚弱的动物,并且作为其它动物和人的食物。


5. 灵活

Amundsen原计划是去北极,但是在听说两个美国人已经抵达北极后,果断的将目标转向了南极,以获取世界第一这个奖励。

6. 从实际出发

Scott使用人拉雪橇不仅仅是为了运输,更加入了一种浪漫主义风格。Scott日记的背后甚至反射出Wagner的身影:

引用
在我的记忆中,没有任何与狗有关的探险可以达到这样的高度——人们直面险阻,并用自己的双手达到目的……无可否认的是,在这种情况下,征服才是更高贵、更华丽的胜利。


7. 技巧让一切都变得不同

Amundsen招募了多个经验老道的滑雪人并组成团队,相比,Scott的队伍无疑都是一些门外汉,并未针对需求进行训练。

8. 选择正确的团队

Scott的团队有许多来自英国的绅士,而Amundsen则选择了一些具有户外经验并有不同技能的工匠。

9. 错误的叠加

Scott的团队注定无法赢得比赛,然而他们的死亡却是由一系列的错误叠加引起。天气比预期的更冷,这样导致他们返程时在预定时间并未到达下一个补给点,补给点存放了食物、燃料及其他物资。当Scott、Wilson和Bowers三人死亡时,离下一个补给点仅11英里远。马、motor-sledge及一个错误的补给点判断,让下一个补给点离他们遥遥无期。悲剧的铸成绝不因一个错误,而是由一系列错误叠加形成。

10. 后见之明

在事情开始时没有什么是清晰可见的,然而在结果产生时一切都已尘埃落定。Scott在开始时做了他认为最合适的决策,而其它人也同意他的观点。每一个项目也是如此,没有人会愚蠢到从开始就放弃;然而通往成功的路径总是很少,并且沿途充满了太多的岔路。所以我们有必要去吸取一些成功的经验,多了解一些最佳实践。

忆往昔,不难发现成功的团队总是具备一些共同的特性:规模小、良好的引导、专注、高技巧及具备丰富的经验,同时他们还有着健壮的计划、丰富的资源以及强大的战场适应能力。

原文链接:What can the Amazing Race to the South Pole Teach us About Startups?
  • 大小: 50.8 KB
  • 大小: 15.1 KB
  • 大小: 11.9 KB
  • 大小: 25.5 KB
来自: CSDN
8
0
评论 共 6 条 请登录后发表评论
6 楼 ronnin 2013-08-23 10:03
好文章。收益匪浅。
5 楼 dwangel 2013-08-23 09:44
成功一般要满足很多必要条件,但是失败可能只是一条条件不满足,就发生了。

参见 美国航天飞机空中爆炸事件……
4 楼 dwangel 2013-08-23 09:40
jnoee 写道
很多事情发生后总是能找到合乎道理的原因。
不论是好的结果或坏的结果。

但思考成功的人为什么会这么选择,从中学习,也很重要。
3 楼 jnoee 2013-08-23 09:14
很多事情发生后总是能找到合乎道理的原因。
不论是好的结果或坏的结果。
2 楼 dwangel 2013-08-22 22:13
规模小 意味着沟通成本低
1 楼 vcok 2013-08-22 21:14
规模小、良好的引导、专注、高技巧及具备丰富的经验,同时他们还有着健壮的计划、丰富的资源以及强大的战场适应能力。
===========================
同意,非常宝贵的经验。我感觉”规模小“的真正意思不是指人数少,而是指”精炼“。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 中学教师考编

    word文件 教师考编复习资料 历年真题

  • c#心跳连接

    网上一个大佬说的,心跳连接是为了保活,大概思路是持续的向服务端发送心跳包,如果一段时间没收到回应则判定下线,但是实际测试过程中发现,这样的思路根本就不可靠,因为socket很多方法是阻塞式的,而且如果一旦连接断开,接收或者发送都会发生异常,有了异常捕捉就很容易判断是不是下线了,根本没必要那么复杂:(反正.net是这样) TIPS: 1,socket建立的连接,此时如果服务端意外断开,socket还在维护中,必须要用networkstream.read或者write一次才可以得到socket正确状态 2,

  • C# Socket编程(服务端、客户端)

    【代码】C# Socket编程基础。

  • C#中的基础Socket通信实践指南

    本文还有配套的精品资源,点击获取 简介:Socket通信是网络编程的核心技术,允许程序间通过网络交换数据。在C#中,我们可以通过***命名空间下的Socket类来建立简单的服务器和客户端进行点对点通信。本篇文章详细介绍了创建基本的Socket服务器和客户端的步骤,包括绑定端口、监听连接请求、接受连接、发送与接收数据,以及如何处理异常和使用异步方法以提高性能。掌握这些基础知识...

  • C#教程 socket编程

    如何练成编程高手,编程需要恒心和毅力,最主要是要有信心,循序渐进地完成任务

  • C#中Socket的简单使用

    当两台主机通信是,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接.TCP连接则更依赖于底层的IP协议.Socket是控制层传输协议.Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口.第四步:客户端和服务端就建立起了双工同信,客户端与服务端就可以实现彼此发送消息。第三步:服务器接收连接请求后创建Socket连接,并维护这个连接队列。第二步:客户端向服务端地址和端口发起Socket请求。

  • 在C#中使用Socket通信

    文章按照 Socket 的 创建、连接、传输数据、释放资源的过程来写。给出方法、参数的详细信息。

  • 入门级C# Socket编程实现

    文章简单介绍了Socket的概念和作用,并详细介绍了如何使用C#语言实现Socket编程,实现进程之间的数据传输,可以拓展成窗口功能,文章中包含了服务器端和客户端完整代码,以及非常详细的Socket对象方法介绍和示例以及完整的实现步骤,也很方便新手学习和复现。

  • c# Socket简单介绍

    在 C# 中,Socket是一个表示网络套接字的类。套接字是一种在应用程序之间进行通信的接口,可以用来实现基于 TCP/IP 协议的网络应用程序。Socket类提供了创建、管理和维护网络连接的功能,是.NET Framework 中的一个基本网络通信类。Socket类的主要作用是提供了一种与网络设备(如网络接口卡)进行通信的方法。它可以用来创建套接字,套接字是一种在应用程序之间进行通信的接口。通过使用套接字,应用程序可以与其他应用程序进行通信,而无需关心底层的网络细节。Socket。

  • C#的Socket通讯

    1.Socket简介 Socket:称”套接字”,套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。应用程序通过”套接字”向网络发送请求或应答,它是一个针对TCP和UDP编程的接口,借助它建立TCP/UDP连接。创建Socket连接时,可以指定使用传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。当使用UDP协议进行连...

  • C#-Socket

    2、发送Send/接收Receive。3、接收Receive/发送Send。1、创建Socket对象。1)客户端(发送端)示例。4、释放资源Close。

  • C# 使用Socket进行简单的通讯

    在.Net的System.Net.Sockets 命名空间中包含托管的跨平台套接字网络实现。 System.Net 命名空间中的所有其他网络访问类均建立在套接字的此实现之上。

  • C# Socket 编程

    C# Socket 创建服务器和客户端通信。

  • proteus仿真元件符号大全

    涵盖基本常用的proteus元件仿真符号

  • houdini 16中英离线帮助文档

    houdini16离线中英文档,详细,齐全,翻译正确绝伦,你值得拥有

  • 该程序主要针对VC中多线程编写中易遇到的程序死锁现象的发生做的机理剖析。主要是针对Csinglock类的用法进行说明。

    该程序主要针对VC中多线程编写中易遇到的程序死锁现象的发生做的机理剖析。主要是针对Csinglock类的用法进行说明。

  • multisim 红绿灯可闪烁

    可以闪烁的红灯

  • 用MATLAB实现图像锐化的程序代码.m

    用MATLAB实现图像锐化的程序,包括sobel算子锐化、laplace算子锐化

  • 常用芯片手册大全 常用器件手册大全

    把我积累的常用器件手册一次性奉献给大家,如果你是搞电子电路的,肯定会有你需要的 常用单片机 RS232,RS485 外存储芯片 外部时钟芯片 各种尺寸的数码管 稳压芯片 ... ...

  • Arcgis按图斑批量出图(按卫片图斑批量出图)

    批量出图工具,用于卫片批量出图,一个图斑一个jpg,方便操作查看,主要用到的就是数据驱动工具,Arcgis版本10以上,版本太低,没有这个工具不行的

Global site tag (gtag.js) - Google Analytics