什么是爹式开发?

标签: 开发 | 发表时间:2011-09-09 21:35 | 作者:gigix Suave
出处:http://gigix.thoughtworkers.org/

这几天跟Simore在车上聊研发云和 持续交付 ,聊来聊去就聊出了一个新概念:开发即交付——Development As Delivery,缩写DAD,也就是“爹式开发”。

免责声明:爹式开发绝大部分理念和实践是基于持续交付的。我们发明这个概念主要是为了搞笑。

在持续集成的场景下,每当程序员提交代码,就会触发一次完整的构建(包括编译、静态检查、部署、自动测试等),确保软件系统可用并且符合质量要求。但持续集成之后的软件往往仍然没有针对真实环境进行验证,没有考虑投入真实环境使用的各种问题,因此“符合质量要求”与“达到可发布水平”之间还有明显的距离,我们称之为 软件交付的最后一英里

为了解决这最后一英里的问题,我们有了持续交付。持续交付的核心是 构建流水线 :流水线越靠后的阶段,验证越接近真实环境。当一个发布候选版本最终通过正规的发布过程被部署在非常类似生产环境的UAT或者staging环境上然后执行了大量的自动化功能测试,我们就可以说:这个发布候选版本已经为交付做好了准备。

然而,问题是,我们为什么需要等到提交代码之后才做这一切?为什么不在提交代码之前就确认我刚编写的代码已经达到了交付要求,然后每个人都提交绝对高质量的代码?

其中一个重要的原因是历史相关的:我们已经太习惯于测试环境(尤其是与生产环境相仿的测试环境)的匮乏了。因为这样的环境是昂贵而不易获得的,所以我们要让它成为整个团队共享的资源;因为要让它被整个团队共享,所以我们要降低它的使用频率,所以要把它放在构建流水线的最后一环。

但研发云将改变现状。测试环境将不再昂贵:它可能仍然需要5台服务器,但由于每个环境的使用率只有10%,所以整体来说它没有那么贵。并且它也不再难以获得:云计算平台方便的开通(provision)加上自动配置工具例如Chef方便的配置(configuration),让我们只要一条命令加三十秒等待就能得到一套接近生产环境的测试环境。

于是我们的观念将发生一个根本性的转变。从前当我们讲“开发环境”,我们讲的所有东西都是基于“每个人一台电脑”这个假设。但这个假设不是必要的。我们每个人都可以有一整套生产环境来做开发。你仍然做单元测试,你仍然降低耦合,但此刻你不再与生产环境隔离——你随时身处在生产环境中,你随时可以看到刚写的代码在生产环境中如何工作,并且你写的所有代码将通过生产级别的验证之后才提交。

这时候我们已经不必再强调“持续交付”,因为我们的开发就是交付(Development As Delivery,DAD)。这就是“爹式开发”。

当然它不会那么容易就实现。一切使你无法做到爹式开发的障碍,我们都称之为“坑爹”。所以,在一个践行爹式开发的团队中,我们的口号就是“不坑爹”。

附录:由于爹式开发要求每个程序员充分了解生产环境,因此会极大地促进 DevOps 在团队中的推广。最终,爹式开发会造就一种新的、具备开发和运维全面技能的人才,他们会把开发和运维工作全部搞定。这些人开展运维工作的方式,称为“多技能运维模型”(Multi-skill Operation Model),缩写MOM,简称“妈式运维”。

相关 [开发] 推荐:

Android开发Tips

- - CSDN博客推荐文章
欢迎Follow我的 GitHub, 关注我的 CSDN.. 介绍一些, 在Android开发中, 会经常使用的小知识点.. submodule与git可以保持实时同步. 导入, 路径多于一个, 前面不添加冒号(:).. 使用PackageManager.. // 检查App是否安装 private boolean appInstalledOrNot(String uri) {.

WPS for Linux 开发中

- Quantum - Wow! Ubuntu
据消息称,WPS for Linux 办公套件目前正在开发中,如图:. # 本文采用CC协议进行授权,转载本文请注明本文链接. - Twitter / 微博 / 问答 / 投稿 / 加入我们 wow0slx6bcs721xo1udcc. - 高性价比 Ubuntu VPS / 本站架设于 PhotonVPS / 定制 Ubuntu T-Shirt.

iOS开发资源

- - Starming星光社最新更新
iOS App UI 欣赏、分享精美的App界面设计. iOS代码实例搜索、iOS特效示例、iOS代码例子下载. 以web的形式提供iOS UI设计的素材,你可以在web上拖动一些控件做出简单的ios 应用效果,并且生成一个URL,能分享给其他人. 一款 Photoshop 插件,由 UI Parade 推出的一款针对iOS UI 的设计工具,设计师动动鼠标即可制作精美的 iOS 应用原型.

开发笔记(1)

- liuce.cn - 云风的 BLOG
折腾了好久,终于可以开始正式项目开发了. 之前的这段日子,我们陷落在公司的股权分配问题中,纠结于到底需要几个人到位才启动;更是反复讨论,到底应该做个怎样的游戏. 林林总总,终于,在已经到位的几位同学的摩拳擦掌中,叮当决定自己挂帅开始干了. 就这么不到十个人,空旷的办公室,跟我们起先想像的情况不太一样.

Jenkins的plugin开发

- - CSDN博客研发管理推荐文章
       Jenkins强大的功能主要靠其丰富的plugin体现,之前的一篇博客《 Jenkins安装plugin》中介绍了如何找到并安装需要的plugin. 虽然目前已经有大量非常优秀的plugin可供使用,但是有时候仍需要自己开发一些满足项目特殊要求的plugin. 下面通过一个简单实例,介绍Jenkins的plugin的整个开发过程.

kettle 开发总结

- - CSDN博客推荐文章
2.在用file exists 控件的时候,当用到“文本文件输入”时,文本文件中需要一定的格式,类似下图:. ;当然也可以已经创建了相应的表,然后直接按“确定”按钮就行,如果相应的表和输入的列数及列属性不一样时,也可以在sql按钮的语句中取修改. 在使用file exists时,输入也可以用表输入.

kafka开发实例

- - 互联网 - ITeye博客
//启动zookeeper server (用&是为了能退出命令行):. //启动kafka server: . 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

浅说Flux开发

- - 淡忘~浅思
前段时间,写了篇关于React的文件: React:组件的生命周期,比较详细的说了下React组件的生命周期. 说道 React,很容易可以联想到 Flux. 今天以 React 介绍及实践教程 一文中的demo为示例,简单说说 Flux 的开发方式. Flux 是 Facebook 用户建立客户端 Web 应用的前端架构, 它通过利用一个单向的数据流补充了 React 的组合视图组件.

Cppentry程序开发

- -
最近修改公司线上kafka集群配置然后直接kill掉进程来重启集群发现所有生产者都无法写入数据导致丢了数据,栽了一个大坑,接下来的工作肯定是补坑找原因,就分享一下. 系统环境说明:kafka版本为0.8.1.1,kafka集群配置为10.12.0.23:2181,10.12.0.24:2181,10.12.0.25:2181/kafka,因此在zookeeper中的根路径为:/kafka.

Nginx模块开发入门

- ripwu - 博客园-EricZhang&#39;s Technology Blog
Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%. 与Apache相比,Nginx在高并发情况下具有巨大的性能优势. Nginx属于典型的微内核设计,其内核非常简洁和优雅,同时具有非常高的可扩展性.