SE企画与上线记录
2019-08-10 / modified at 2024-04-07 / 6k words / 21 mins

最近半年终于从零上线了一个公司内部的startup项目,领队专家能力很强,我个人也学到了很多,特此记录。

首先强调一下,我这里的startup并不是风投的创业项目,而是toB的企业内部项目。它立足于大公司平台,面向内外部客户提供企业向的SaaS服务。但是也不要觉得大公司就等于低效官僚,大公司内部更聪明、无底线的利己主义与模仿者很多,同样需要找到方向、组建团队,交付项目。假如项目失败,无论级别都将被淘汰掉。

本文面向读者:自己有3~5年技术经验,写够了CURD,希望自己能够设计落地方案的读者。本文关注点在实施流程,入门工程师与高级管理者可能收获不多。

本文虽然是2019的文章,但是后续仍有持续补充。

快速结论

如果不想读完本文,可以先看结论

  • 方向与愿景:已经完成了从零到一的规划,找准典型场景,顶层设计方向要大致正确
  • 需求:要明确语境,长/短期诉求,明确SaaS中产品/需求的定制界限
  • 落地技术方案:要用拿来主义思维(购买或者开源项目)来节约时间,成熟度从40(POC)到60(MVP),再到100进行延展,不要开始就深入源码( go spelunking through the source code)与高并发来证明你的技术
  • 过程效率:能找人干活而不要自己全干,更要有高度成熟的DevOps/Agile/Meeting等经验框架来管理过程
  • 团队组建与招聘:在起步阶段,要找比自己优秀的,有主动能力的(同样的成本,宁可要1.5能力 * 1人 而不是 1能力 * 2人),详见Management的Tag

上面每个决策失误都将消耗珍贵的起步时间作为学费

背景

本文不涉及的内容

下面这些难度超纲,我就不瞎写了,本文假设下面均已经搞定

  • 本部门与Sponsor通过各种方式磋商(ROI价值分析/竞品/受益群体),达成了要投资(人力/时间/采购/投资)的诉求与决策
  • 部门级、公司级、平台级的宏观战略比较清晰
  • 团队基本组建成型(Sponsor的客户也要有人全职跟踪与验收),组织有活力与执行力
  • 项目节奏的把控,趋势/风口的追逐

再次强调,本文只是工程师维度的搬砖改良与效率压缩的记录,仍然是泰勒模式的践行,尚不能达到决策层。但是你就算是作为搬砖者,投入的也是珍贵的全职时间,要明白项目有啥用,PPT如何写

你所拥有的

  • 上层提出的一个宏观模糊的,需要3到5年才能完成的目标
  • 上层初步与客户对出的业务流程
  • 运气好有几个人给你带,运气不好需要自己面试挖人组建团队,运气最差是连HC都没有

你需要做的

以下为项目开始只做一次的

  • 验证上层战略是否可行
  • 在上层讨论的基础上完善业务流程细节,画出包含细节的Workflow
  • 制定技术方案选型、初步做出POC与MVP并演示汇报

以下为项目稳定后每个迭代的搬砖工作,只要有经验方法与良好的招聘流程就可以转为砸人天,可以看我以前的文章

  • 挖掘客户需求,落地到平台需求
  • 设计需技术方案细节,堆人上,并盯着编码人员不要走偏或瞎搞
  • 招聘与学习型组织建设、处理求助、开会、AAR、DevOps、WIKI、JIRA等等…

参考流程

本文主要流程

$2SE概念(需求分析)对齐语境观察现象并整理为概念收集业界/ROI方案输出WIKI文档补全领域问题Work Breakdown StructureTimeline DiagramPOC产品WBS菜单设计一对一/一对多关系整理技术设计最简方案POC可行性验证落地方案与折衷PAAS层技术层SAAS层Portal层CICDMVP开始项目推广优先覆盖场景完善运营/计费方案偿还债务/扩张项目技术债务长期短期规划带人挖人培训推广与场景SaaS落地场景导入事例toB推广

本文与理论上的“软件工程”是不同的,而更加偏向于集成商的角色。更加推荐简化的MM(市场管理)流程或者IPD(集成产品开发)流程。

愿景与实施

愿景大致正确

格鲁夫曾经说过,在一个组织中,某管理层的战略/愿景,通常即是高他一层的经理人考虑的战术,而你作为执行者是负责实施上级战略的。

大前研一也曾经说过,做任何事情,都要以顾客的顾客为中心,所以你的技能不能只满足于编码或当包工头,而是让所有人都满意,因此你个人就算是只写CURD代码也要高看一层。

此外还有创造性张力, 格物致知, 形而上学等类似术语,我这里就不掉书袋了,这些属于都强调了最高方向的重要性。

以企业向IT项目为例

角色战略战术关键事项
Sponsor提高过程管理效率30%,助力数字化转型找IT部门来实施定下时间,出钱、出需求与验收,防止钱白花了
PM打造一个全部门/公司/甚至超越IBM的XXX系统愿景制定3年规划对齐上游,防止下面瞎搞
SE对抽象的需求进行外显化,进行Demo演示,设计技术方案,参与核心编码设计方案、管理搬砖过程对齐需求/买买买,实施进度,防止下面瞎搞
编码工通过编码完成需求,分享编码手册与经验搬砖干活量化/流水线化招聘标准,确保交付质量

通过这种分析方法,可以把所有人的思路给连接起来,有了最高战略,我们才有共同目标,这样就可以引入方法论框架进行实施。上述过程在H公司叫做【对齐(Aligenment)】,一旦方向大致正确,就用超高的执行力实施。

如果你与其他人的理念不合适,那么就赶紧散伙。如果你自己都不认可所做的项目,我觉得还是换家公司吧。

方向错误会发生什么

假如客户无法自己想要什么,那么可能会把IT团队给累死,部门名声差了,后面就没人敢接这个部门的活了。这里是很常见的,有一本《管理咨询的神话》就专门介绍战略规划是多么愚蠢。

假如领导挖掘需求能力较弱/二传手,脑子里是浆糊,或者天天开会效率低,那么就算是CURD的业务,你也要996搬砖,万一项目搞砸了,就等着34岁被淘汰。这类市场观察与用户画像的能力可能是需要交学费的。

假如我对抽象领域的“externalization”能力较弱,软件架构能力差,那么要么996,要么走人。

当然这些话题扯远了,我这里主要还是想强调先方向、后方案、再实施。假如你是技术设计者,切忌上来就陷入代码细节、高可用与源码分析,这样你就把下面的实施人力给浪费了。

其他必要条件

除了方向正确外,还需要有强执行力、有活力的组织与技术视野确保成功开头,执行过程中需要有流程与经验支持,有了流程才能守破离,否则瞎搞会导致下面996加班/跑路。

现状分析

高层领导与客户交流是高纬度的战略,因此这种方案一般是需要2~3年才能彻底完成的项目,而下面干活的肯定不止你一个,因此你要把属于你的活给抽出来,自己搞一个思维树。

收集现象,对齐语境,建立符号的知识树

举个例子,我做的X项目中有大量的领域术语(terminology)缩写,甚至连中文资料都很少,你需要如下操作

  • 通过搜索引擎了解符号缩写的深度与广度,甚至去参考术语相关的IT产品、商业产品是什么样
  • 去图书馆等专门的知识渠道去过一遍知识,你不用完全读懂书,只要知道这个流程需要哪些步骤就可以了
  • 将上述过程整理为Wiki/Gitbook,与客户再用术语对齐一遍,补充备注。

你在这个阶段是顾问的角色,将Wiki协同发布后,后面你就可以用这些符号与客户在同一个语境下交互了。

还原现象的细节(enrichment)

这里是隐性的,经验的,感性的,无法量化的知识,要用基于story的观察方式进行描述。本文这里主要使用了还原论作为框架

联系客户(1~2个人,不要拉一堆人),打开会议室的投影,打开绘图工具,然后采用问答的方式画业务总体流程图,举个例子

  • 这一步从哪里开始,后面到哪,角色是X吗?如果失败将交给谁?
  • 这里的交付件是什么,储存在什么地方?产出是否纳入版本管理?
  • 这一步分出的4小步是什么,它们输出了什么?第三步挂了是否还接着走,如果挂了怎么定位?

这种会议将非常高效,因为你是主持人,场景补全后,将这些流程图共享,这就是第二阶段的成果。

我个人比较喜欢的两个场景工具进行分析(可以看我写的npm等绘图插件),一个基于亨普尔覆盖律,一个基于休谟的齐一律

  • Work Breakdown Structure: 工作分解图,是广义的空间维度,基于功能的维度
  • Timeline Diagram: 找出流程中所有的关系人,比如BPM,泳道图,基于连续时空与因果的维度

注意这里只是符号与概念,还没有到UI/Axure/User Journey等细节

这里一定是高阶方案,千万不要陷入细节、定义或者术语(约束范围)的争论

现象分析的验收

上述所有的现象分析一定是可证伪的客观结论,一定要与用户达成一致再进行设计

  • 所有场景需要用MECE的方法进行枚举
  • 用户的“我想要/我认为”是主观的需求,暂时不在这里处理

产品设计

设计产品Feature的WBS

设计一个超大的菜单,并将上述场景承载录入到菜单层次中。此处暂时可以不用原型图,偷懒可以用Excel等工具画一个即可,再次强调不要上来就用UX工具或者UML进行DB建模。

  • 明确各个菜单与业务的一对多,多对多的关系,最好能直接写好前台的录入URL
  • 明确数据主题的资源与权限的颗粒度

这样就可以开始写Demo去忽悠客户了

设计POC(可行性验证)提案

(此操作可以与上一个任务并行执行)

技术方案需要拿来主义,可以网上查商业与开源方案,买Cookbook,甚至花钱找顾问的经验/招聘比你强的人。至于说如何设计好的架构,由于需要视野积累与业务场景,本文不多讲,但是最终汇报材料至少如下

  • 背景与ROI,业界ABCD公司的方案与度量标准,现状的不足
  • 高阶应用方案:需要有证据链,展示要有场景层,业务层(承载了什么业务)与技术基座。也可以考虑外购软件。
  • 技术可行性:科普性质的技术解释,需要有网络部署图和工时初估(精确到月)。
  • 规划下次会议需要演示的交付件与开发计划,赶紧把搬砖的活给分下去

这些搞定了,再与领导对一遍,然后再搞,架构方案是可以调整的,但是主要方向不能改。

源码分析/技术视野应该在轻松业余时间完成,上班时很难集中精力去搞,如果你的代码读的少,那么设计架构明显会很吃力,看源码逆向固然快,但是你的一天时间也被耗没了。如果招聘招的准,这一步就快。

POC与验证(Try Run)

这里你真的就要开始编码了,还是先不要急着看源码,建议先看各个框架官方的架构文档。

  • 按照技术方案,从入门到精通搭起来跑一下
  • 哪些场景痛点解决了,哪些没解决,需要怎么改?
  • 尝试编写部分代码,但是不要整个时间耗进去

把Demo报上去给客户看看,根据客户的意见补充改进,直到最终客户拍版同意实施正式开发。

此处用户会提出很多诉求,但是你本人当前时间非常珍贵,不要耗到细节中,也不要这么早当用户的客服,否则其它的就没法做了,进而影响总体功能。
另外,只用找几个客户补充验证场景即可,不要盲目扩展多个客户,否则你的人力也会被耗完
最后,要识别种子客户,明确“诉求”与“诉求的实现”的区别,你做的是SaaS产品,而不是定制外包,诉求实现的决策权在你这里

POC过程中,用户也会提出一些需求,但是作为SE,一定要平衡长期与短期诉求,定制与通用诉求,它们的投入产出是不一样的。任何情况下,都要考虑SaaS化。比如用户短期想马上用,你可以给一个简陋的版本,但是还是不要耗进去了。不要在这里直接否定用户,而是说”先评估下“婉拒;不与用户讨论底层实现,只讨论最终要求。

build an impressive proof of concept to take to later stage investors to raise more money.

准备Demo Day的POC汇报

一般来说,假如你是纯技术SE,一般是不需参与撰写这种Slider,但是没人的话就只有你来干了。可以参考各大公司的招股说明书,比如这里,或者参考顶级的Y combinator的标准。这个是有极高难度的,对于纯技术人员来说并不擅长。

设计落地方案(with gap)

当可行性ok后,也就是已经上一版本后,那么就要进行真正的设计了。

PAAS层: 尽可能快,使用厂商中立且廉价的云原生方案,亦可搭建私有云,这里是要求广度高于深度。

  • 预估出计算资源、网络(时延/带宽/网关/命名服务)、存储、备份容灾
  • 命名服务/滚动升级/蓝绿发布
  • 系统部署架构图,明确好region/datacenter层次的方案,是否需要跨WAN的强一致性
  • Telemetry:运维/监控/日志可视化/弹性伸缩

技术承载层: 指SpringBoot/Rails等开源框架的选型

  • 初期版本尽可能采用low-code、动态语言与中立的SaaS服务提高上线速度
  • 开源与第三方软件的连续性与法律合规问题
  • 内网是否需要强一致性?哪些地方有锁?哪些地方持久化?

SAAS层

  • 分片与多租户定制方案
  • 用户/群组/ACL等Authz方案,IAM等Authn方案,SOD权责分离方案
  • 基线与定制是否分离清晰

业务Portal层

  • 按照覆盖律与因果律两个维度进行设计,先不要引入复杂的交互结构
  • 合理安排定制与基线的分离点,参考GraphQL等Low-code方案
  • 自测场景用例
  • BI与运营工具,注意toB产品工具属性强,讲究场景覆盖率,用户量起初并不重要

CICD:由于当前开发人数过少,更需要自动化

  • 需要基于上述的基础方案与应用路由方案,提高自动化率
  • 设计时就要考虑二进制的可回溯性,实现可审计的源码交付

SaaS项目的主要难点是在于挖掘场景(The Challenge, the solution),并提前克服墨菲定律进行枚举分解,而不是多个问题混在一起,也不要被短期诉求/条件所限制(你先出方案,再找上级解决限制问题)。

这里推荐使用PERT图来绘制依赖关系(详见UML),依赖清楚后,把任务按照1~2天的颗粒放到总backlog里面,然后与领导讨论哪些功能先上,最终整理出一个MVP迭代计划。

这时可以开始用专业的DevOps工具导入项目,比如Azure DevOps就可以从持续集成到需求管理全部帮你搞定。

拆解一定要按照功能需求-技术实现-实施细节-度量标准的维度进行拆解,而不是用技术-功能-实施来拆解,否则项目会遗漏。

启动MVP(minimum viable product)项目

此处是最小可行版本,也就是短期诉求,我们可以先搞两个月,然后用较少的用户去试点业务流程

  • 开始找更多用户进行推广(自上而下/自下而上)
  • 功能与壳优先,尽可能将问题转化为供应链问题,去采购服务,先只考虑低并发/单DC的方案
  • 就算是第一版也要要有运营方案,再差也要有统计方法(需要导入开源BI工具)
  • 通过技术/运营手段控制总人数,但是业务流程POC的覆盖面要广

Portal场景要贴身定制,打包整理为"解决方案",并找客户使用,企业客户使用后一般会内部汇报,再由上级一层层下发使用。这种官僚流程与toC场景也极不一样。

无论你是对内IT,还是天使轮项目,都有竞争者,MVP的目标始终是通过最快试运行的运营结果获得决策者的认可,要求始终是快速出产品(quick win/Leads to Cash),而不是高并发微服务等技术细节(Buy don’t build)。

我在这个位置就再次陷入源码分析与高可用细节了,导致投入耗费了一周。startup项目是绝对不适合应届生的,根本没有时间去培训

扩张与推广

这里是一切痛苦与团队矛盾的开始

偿还技术债务

有了POC与MVP的案例,后续推广与开发就方便多了,基本上堆人就可以搞定很多事情。

  • 偿还QuickWin带来的技术债务(比如CICD/运维/日志/代码质量等来不及做的基础设施)
  • 偿还Demo中残缺的部分,Demo吹完后,需要作为核心场景被大量使用了
  • 确保核心代码稳定,补充完善稳定模块的测试用例,这样后续才有机会重构
  • 投入较多时间去搞招人挖人培训赋能

特性开发与维护成本比可能是1:3,它们一不小心就会拖垮项目的人力。同时,也不要为了100%无债务而降低RD速度,技术债务只是可控负债而已,决策在你身上。

此处如果需要从软件工程理论角度也能进行度量分析,可以参考CMMI模型(CMMI本质也是泰勒制)

扩张节奏

后续工作主要就是一个迭代一个迭代的做场景,MVP,再按照敏捷(不管是真假敏捷,反正就是要搞定)等流程拆解与完成。场景挖掘、项目扩张都是相当复杂的问题,也是SaaS降低成本的关键因素。核心就是用调研出的通用场景来满足大量用户需求,降低定制是核心。

在扩张过程中,有如下的时间分配与节奏最难把握

  • 形成项目的惯性(高语境),降低沟通与入门成本,团结组织
  • 老场景与体验问题的打磨、跟踪、细化时间
  • 新场景的挖掘与RD开发时间
  • 当前用户的支撑、客户

你作为Owner,这时就不得不…加班了,这个与我的不加班信念抵触。要解决这些问题,就必须要有估算时间与预测成本的能力,并防止力量碎片化,然后找人、要人、培训与搬砖。

本文只是记录搬砖的,所以关于"节奏"控制就不多指导了,因为这个的确需要一个经验丰富的指挥官。

自己不能控制的,优先推动做;尽可能不要亲自部署

附录

总结与困难

通篇下来,我觉得在搬砖中,重要性依次如下

  • 招人:招聘中短短的几小时很难分辨出水平,最重要的“认知水平(认识事物的方法)”,而且voice only的面试会丢失很多互动细节。
  • 场景:认知洞察toB场景(需要有本体论、认识论的框架)
  • 推广:SaaS产品受众面很窄,打广告效率很低,小团队就靠口口相传了,读者可以研究下各种创业公司的首页菜单。
  • 技术:其实很多项目都很难达到技术门槛,而属于模式创新,初期建议用quick win/买买买的方案来实现

时间管理

有一个优秀经验的领导带你工作,的确可以帮助你少走很多弯路,节省很多时间。优秀的领导每天的工作时间分配的很棒,列举如下

  • 借助公司流程获取资源
  • 与领域客户讨论需求,与高端顾问讨论技术方案,撰写方案
  • 指引执行层,防止“瞎搞”,比如我以前做代码很容易陷入细节与源码中,领导会及时纠偏

这样可以放大自己时间的效率,把工作外包化/自动化,基本上不会有浪费。

不足

上述方案讲得基本是就是泰勒理论的生搬硬套,目前来说还是有作用的,但是缺点也很明显

  • 上述时间只要有压缩,你的技术深度就会降低
  • 做任何事情都很保守,按照模版搞,拆解的很细,很容易陷入概念的细节
  • 做事情的节奏比较依赖上层判断,限制了自己的思维,当然也很难出错
  • 万一没有Plan B,心里就会慌
  • 同事间缺少“被关注感”,所有人都陷在流程中如同机械一般

总的来说,这套方法在大型搬砖组织作为中高级螺丝钉是足够的,但是在小型组织中是不够灵活的,希望后期能够做到守破离,实现更佳的方法。

参考