技术管理- 怎样做好技术规划?

2023-11-15

1.前言

      随着团队的人数的提高与成员的技术水平不断提高,同时业务的发展也对团队/个人提出了更高的要求,所以也要不断向技术方向进行努力探索,“动如一人” 是我们始终坚持的团队理念,个人能力强弱并不能决定整个团队的研发效率水平,只有大家都有了体系化的思考能力,才能让团队形成向上的技术氛围驱动力,促使每个成员都对开发技术有更高的追求。目前我们后台团队采用的是java技术栈,技术虽然稳定,但是使用的中间件工具始终在更新迭代,越来越多新的特性,新的使用姿势都是后台开团队需要作出完整的规划去适应与挖掘。

综上所述,为业务提供更好、更快的发展支撑、促使形成良好的团队技术氛围、技术发展的趋势都是驱使我们需做好技术规划的重要原因。

2.什么是技术规划?

首先,我们先理解下什么是规划?

规划,意思就是个人组织制定的比较全面长远的发展计划,是对未来整体性、长期性、基本性问题的思考和考量,设计未来整套行动的方案

基于规划的三个特性我们可以将其与技术相关联,那我们需要考虑哪些方面呢?

**整体性:技术规划一定是对现有系统有体系化的思考,得出一个全面整体的改进方案,不在停留在某些具体优化点之上;**比如现在我们这边的后台都是领域服务为主,每个领域服务需要单独进行流量/授权的管控,我们就在想能不能接入统一网关,对流量、授权等管控,这就需要进行架构、领域、系统之间的总体考虑;

**长期性:技术规划一般周期都在在季度、半年度甚至年度,这就意味着这件事情是比较长期稳定的,需要持续推进的;**某些方向或者方案确定下来,就需要进行长时间的“运营”,比如引入一个新的中间件工具,就要遵从从可行性分析->使用->优化改进,需要像“版本迭代”的概念。

**方向性:技术规划需要针对某个方向,提出一个较为长远的目标,设计全面的发展计划和行动方案;**技术方向往往是多样的,如研发效率,后台架构性能等多个方向,这里需要我们进行优先级的划分,比如下一阶段需要承载大流量,那我们就把架构性能优先级调高。

3.怎样做好一个技术规划?

3.1 前期准备

        团队中有新有老,成员的开发水平参差不齐,而且每个人对研发的整体架构与流程的理解也不一样。所以在做技术规划前,我们需要让大家都对目前的后台的研发架构与体系规范有较好的理解。以我们团队的后台业务架构为例,当前业务的主要应用场景是在校园/企事业的素质教育、组织宣传、家庭共享等,具体的业务架构如下图所示。

目前按照技术研发的三个阶段”开发、编译&部署、线上运行“,我们梳理了每个阶段涉及到的技术组件/工具,在开发阶段分为组件/中间件/业务工具/代码&文档规范/协作等技术点,形成技术全景图,方便大家对后台技术栈有个清晰的认识。

3.2 技术方向

根据我们现有的支撑业务、部门职责、部门的资源等实际情况,可分为业务支撑/系统架构性能/技术氛围建设/研发质量/技术规范/研发效等六大技术方向。其中每个技术方向应该考虑一些情况:

业务支撑方向:业务支撑始终是作为技术规划的重中之中,一切都是都是为了给业务提供更好、更快、更高效的后台服务,这个方向需要考虑到产品规划支撑(新业务/新产品线需要的技术要求)、第三方的项目对接(数据对接/项目管理)、 整研发流程优化;

系统架构性能方向:服务可用性(SLA指标)服务并发性能(QPS/TPS) 可伸缩性(考虑扩容方案)安全性(安全架构/数据保护/审计)开放能力(开放接口/领域能力)运维能力(问题排查/FAQ场景支持)等;

研发效率方向:这里主要是大家写少些重复代码,能共用的部分提取出来,将重复编写代码的时间用在框架的理解上;关注业务工具优化、CBB共用组件建设、新工具/框架/语言等方面;

研发质量方向: 质量是产品的生命,主要考虑单元测试覆盖率,自动化测试工具,如何提升测试效率,压力测试等方面;

技术规范: 主要是为了提高整个团队的,从开发、文档、运维等过程中提炼出一套标准的行为准则,类似于“阿里开发手册”,这个在我们团队是很看重的,既避免了重复踩坑,又能进行团队的技术积累,并进行最佳实践,一举多得;

技术氛围建设: 主要是让大家共建一个学习成长的技术氛围,让成员对技术、效率、质量有更高的追求。

3.3 目标

3.2.1 目标来源

        技术规划目标的来源主要由产品规划、业界对标等等,比如产品规划里面的下半年需要拉新50w,日活要100w+,qps要达到3000+,设备日活要达到6w+,瞬间峰值要支持10w+QPS等等性能指标,还比如需要支撑新的业务场景,如拓展其他行业的业务场景就考虑是否需要组织架构基础信息的中台建设。目前做业界对标是比较难的,特别是我们做2B业务的,主要是考虑到产品与业务形态差异性非常大,单纯地对比指标其实是没有多大意义。

3.2.2 目标设定

      技术目标的设定需要满足SMART原则,即是具体的(Specific)可衡量的(Measurable)可以达到的(Attainable)必须和其他目标具有相关性(Relevant)有明确的截止期限(Time-based)。举一个栗子:例如制定了一个“提高系统的可用性”目标,显而易见这个目标是完全不符合标准的,可以改成这样,“H2(下半年)-Q3(第三季度)-7(月份) 设备领域服务xxxx接口可用性要达到99.9%以上 (目前是99.5%)”

3.4 目标分解

       将每个大的目标拆分为小的目标,有助于分析目标的合理性,目标分解的越具体,目标的可达成率越高。目标分解后可作为每月的技术规划目标放入个人/团队的目标管理中,有目标就有输出物, 最小输出物粒度应该是可运行的系统或具有结构的文档。

3.5 关键行动

       这是跟目标紧密相关的,每个关键行动都是为了围绕实现技术目标而展开的,其中的关键行动也以个人的周/日工作计划相关。关键行动同样强调输出总结,应把握好节奏。

3.6 技术规划管理文档模版

我们围绕目标/目标分解/关键行动/责任人等使用了简单文档进行管理,如下表所示,其中的的事项是以提升系统架构性能的方向作为一个例子。

规划方向

目标

目标分解

关键行动

状态

责任人

系统架构性能

H2-Q3(下半年Q3季度目标): 提高xx领域服务的QPS到xxx+

Q3-M7(7月份目标):xxx领域服务的a接口的QPS达到xxx+

Q3-M8:xxx领域服务的b接口的QPS达到xxx+

Q3-M7-W1(7月份第一周):搭建压测环境,进行压测;

Q3-M7-W2:根据压测结果调优,将a接口的qps优化到xxx

@xxxx

4.注意事项

4.1 团队共识

        要想行动一致,落地有力,达成全员共识是非常重要的事情。技术规划从第一版到最终确定行动,起码需要两周的时间,期间我们会去召开多次讨论或会议,并结合商务、产品、项目管理、前端、硬件等不同的协作方的建议与想法,对每一个方向的每一个目标进行反复斟酌。最后有个“收尾”仪式,像启动项目一样,让大家都明白这个规划的重要性。

4.2 检查机制

        我们后台成立了差不多三年,技术规划已经做了两年了,但是实际落地效果还算不错,总结出来是需要有一套强有力的检查机制,通常情况下我们会指定了两位团队成员作为技术规划落地的“监督员”, 详细检查机制如下:

1.每周周六监督员会在群里发出进度截图与链接,并@到每个人。

2.每个月14号,29号监督员会在群里发出进度截图与链接,并@到每个人。

3.每个月15号,30号监督员会召开约会议室进行总结,并@到每个人参加。

5.小结

        本篇主要是对近期在团队中做技术规划的过程总结,阐述了团队的技术规划的重要性,针对技术规划中的方向、目标、目标分解、关键行动,以及规划落地过程中的注意事项、检查机制等问题,向大家展示了我们的一些实践经验,希望大家能在技术规划中带来一定的启发。


作者:代码的色彩
链接:https://juejin.cn/post/6844904201160491016
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

技术管理- 怎样做好技术规划? 的相关文章

  • Symfony2 多个应用程序和以 api 为中心的应用程序

    我正在尝试做一个以 Symfony2 为中心的应用程序 并重新使用 Web 前端应用程序的所有捆绑包 该应用程序将分为三个API FrontEnd BackEnd 以便我们可以像Service Bundle一样编码API并在整个应用程序中使
  • 具有行为和 ORM 的丰富域模型

    观看 Jimmy Bogard 的 NDC12 演示 Crafting Wicked Domain Models 后 http ndcoslo oktaset com Agenda http ndcoslo oktaset com Agen
  • 当 Node.js 内部仍然依赖于线程时,它如何本质上更快?

    我刚刚观看了以下视频 Node js 简介 http www yuiblog com blog 2010 05 20 video dahl 并且仍然不明白如何获得速度优势 主要是 Ryan Dahl Node js 的创建者 曾经说过 No
  • 使用 AJAX、MVC 实现 OOP PHP?

    I m new to the OOP paradigm and AJAX jQuery but would like to create a basic site employing MVC architecture in PHP with
  • 微信、whatsapp 和其他通讯应用程序背后的技术是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我渴望了解不同实时通讯应用程序的架构 他们使用任何通用协议 架构吗 Facebook斥资190亿美元收购的WhatsApp架构 htt
  • 如何将世界上所有国家/城市/州放入我的数据库?

    我有一个困难的架构和网络问题 我正在尝试为世界上每个城市制作一个关于徒步旅行的页面http www comehike com http www comehike com 我必须以某种方式导入世界上所有的城市 并按州构建它们 而州又按国家构建
  • Appengine 网站的架构指南?

    我使用 PHP 创建了难以维护的网站 因为它很容易做一些又快又脏的事情 我不想在 Google 的 appengine 上使用 Python Django 做同样的事情 使用 Django 和 appengine 创建网站有什么好的架构参考
  • 使用heroku上传文件

    据我所理解heroku http heroku com不允许存储单个 Rails 应用程序的上传文件 在他们的文档中 他们提到文件可以上传到亚马逊S3 http aws amazon com s3 实例 我目前没有 S3 帐户 因此假设我只
  • python如何表示这么大的整数?

    在C C 和Java中 整数有一定的范围 我在 Python 中意识到的一件事是我可以计算非常大的整数 例如pow 2 100 相同的等效代码 在 C 语言中 pow 2 100 显然会导致溢出 因为在 32 位体系结构中 无符号整数类型的
  • 如何动态添加 mixin 作为基类而不出现 MRO 错误?

    说我有课A B and C Class A and B都是 Class 的 mixin 类C class A object pass class B object pass class C object A B pass 这在实例化 C 类
  • n 层架构 - BLL、DAL 和接口。什么是最佳实践?

    我有一个关于 n 层架构的问题 在问这个问题之前 我想了很久 因为这里已经有很多类似的问题了 但是 在看了一天半并阅读了其他答案之后 我仍然不确定 各种看似相似的术语和不同的方法让我感到困惑 如果我在不同的类库中有一个 BLL 和一个 DA
  • 如何通过WMI确定操作系统平台?

    我试图弄清楚 WMI 中是否有一个位置可以返回可在 所有 版本的 Windows 上工作的操作系统架构 即 32 位或 64 位 当我发现以下内容时 我以为我已经弄清楚了我的Win2k8系统 Win32 OperatingSystem OS
  • 什么算作失败?

    假设我有一个伪 C 程序 For i 0 to 10 x a 2 x 5 next 30 FLOPS 的 FLOP 数量是 1 x 1 x 5 1 2 x 5 10 loop 吗 我很难理解什么是失败 请注意 指示我从何处获取 操作 计数
  • 使用多个提供程序的客户端应用程序应使用什么设计/模式?

    这是一个与设计相关的问题 假设我们有一个名为 ClientAPI 的公共 API 其中包含一些 Web 方法 例如 CreateAccount GetAccount 根据客户的不同 我们使用许多不同的提供商来满足这些请求 假设我们有 Pro
  • 呈现模型与被动视图

    我想知道上述两种模式之间的区别 当您考虑到您需要在表示模型模式中同步代码并且该代码位于表示模型本身中时 那么我认为这些模式非常相似 两者都将事件委托给演示模型 演示者 演示模型和演示者命令域模型 并且也观察域模型 当发生更改时 它们都与视图
  • 插件架构中的反射与属性

    我正在开发一个在启动时从子目录加载插件的应用程序 目前我正在通过使用反射来迭代每个程序集的类型并查找实现 IPluginModule 接口的公共类来实现此目的 由于反射涉及性能影响 并且我预计一段时间后会有多个插件 我想知道定义在程序集级别
  • 泛化和专业化——有什么区别

    我很难真正找到泛化和专业化之间的区别 以及何时使用其中之一 谁能启发我吗 最后还有一个使用 UML 的插图 Animal是一个概括 Dog是专业化 您的超类是一个通用类 但您的子类将是您的超类的专门继承者 当您沿着继承层次结构向下移动时 它
  • SOA架构数据访问

    在我的 SOA 架构中 我有几个世界碳基金服务 我的所有服务都需要访问数据库 我应该创建一个专门的 WCF 服务来负责所有数据库访问吗 或者 如果我的每个服务都有自己的数据库访问权限 可以吗 在一个版本中 我在一项服务中只实例化了一个实体层
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 使用 LINQ to SQL 的 .NET 架构的最佳设计实践(DAL 必要吗?我们真的可以使用 POCO吗?要采用的设计模式吗?)

    我避免在 net arch n 层架构上编写看起来像是另一个线程的内容 但请耐心等待 希望我和其他人一样 在选择用于企业应用程序的架构时 考虑到当今的趋势和新兴技术 仍然没有 100 满意或不清楚应采取的最佳方法 我想我正在寻求大众社区对方

随机推荐