真实世界的全栈工程师

30分钟了解《Growth:Web开发思想》

在《Growth:Web开发思想》出版以前,请参考开源电子书《Growth:全栈增长工程师实战》与《Growth: 全栈增长工程师指南》。

引言:精益与全栈

在埃里克·莱斯的《精益创业》中提到了下面的精益环路:

Lean创业

而精益的思想是在生产过程中减少的浪费,在软件开发的过程中最容易造成浪费的就是:

  1. 业务人员对于市场的理解不一致,导致做不出用户所需要的产品。这部分可以通过精益环路来提高。
  2. 开发人员对于需求的了解不清晰,导致结果与业务人员所需要的不一致。这部分则可以通过改善流程来解决。
  3. 开发人员与第三方开发商的沟通问题。呵呵。
  4. 团队内部的沟通与集成问题

当我们讨论全栈的时候,我们就是想解决沟通带来的时间浪费问题。沟通不畅最好的例子就是巴别塔

巴别塔

而前后端分离带来的第一个痛点就是:集成。如果你和我们一样采用敏捷开发流程的话,你就可以很容易看到这个问题了:

看板

当你已经完成前端功能的时候,后端还没完成。你可能就需要开发额外的业务卡,最后等后端完成时再回来集成。尽管我们会在实践上使用基于契约的开发模式:

契约API

但是一旦我们发现最初的契约不符合我们要求的时候,我们就需要重新修改前后端。这时对接这个 API 的人,就需要放下手头的工作来更新这个 API。

尽管你们已经采用了迭代式开发,但是前后端分离在一夜又将软件开发放到了解放前的瀑布流:

瀑布流

在我最初的项目里,我们采用全功能团队的模式,主要是因为团队小——小的团队一遇到一两个人请假,就可能会出现风险。尽管后来我们的团队从6个人变成了12个人,我们仍然采用这种模式。我们采用结对编程是一个方面,另外一个方面是:团队里就需要有一个人来专门解决各种大小事务。如持续集成有问题、自动构建出错、测试有问题等等,没有人愿意专门去做这样的事。

本文总结了正在撰写的《Growth:Web开发思想》里提出的一系列实践,为18个步骤:

任务切分

即将目标切换成一个个小的任务,而这些任务尽可能的遵循 SMART 原则,如这里的 18 个步骤。

Tasking

环境搭建

搭建开发所需要的基本环境,并尽最大能力地去练习 IDE 及操作系统等等日常工具的使用。

开发工具

至少包含下面这些内容:

UI原型

可以使用简单的使用 UI 工具来创建 Web 页面的原型。

UI原型

你应该会下面的这些内容:

技术选型

能根据我们的能力以及项目的需要,选择合适的工具。

技术选型

至少要有:

hello, world

能自己搭建或者寻求一些比较好的应用模板

hello, world

构建流

可以设计出整个应用的构建流程,如依赖包管理、运行服务、执行语法检测、运行测试等等

构建流

编码

至少能使用两门以上的语言,一门是 JavaScript,一门是编译语言。光只有动态语言,无法让你理解计算机语言的

编码

测试

可以编写单元测试、服务测试、UI自动化测试

测试金字塔

部署

可以完整将应用部署到服务器上

部署

你至少需要:

自动部署

在本地敲个命令,自动部署新版本的应用到服务器上。

自动化部署

分析

不仅仅要知道很多用户喜欢这个功能,还要知道为什么。

精益环路

除了使用诸如 Google Analytics / Piwik 这样的工具,对于日志来说你还需要有:

ELK

优化

即要知道程序中哪里用得多,又要能对代码进行优化。

可以结合 New Relic 这样的 APM 工具进行性能分析。

性能分析

持续集成

除了学会使用持续集成工具,你还要学习什么是持续集成。

持续集成

持续交付

就是缺少一个在持续集成与自动化部署之间的按钮。

持续交付

持续部署

将持续交付的按钮变成自动化就完了?你要改变的不是代码本身 ,还有组织架构。

持续部署

康威定律

SEO / ASO

将用户导向你的应用是一门艺术。

搜索引擎优化

回顾

由输出结果来改入输入流程,这才能提高组织和自身的水平。

Retro

Make it Right, Make it Better

PID

重构

你以为只有代码和架构可以重构么?

Refactor

Rework