项目管理这些事儿敏捷开发与项目管理ACT | 敏捷教练工具箱

Part5 系统设计篇

2019-12-15  本文已影响0人  JackMA杰黑马

21 | 架构设计:普通程序员也能实现复杂系统?

为什么软件项目需要架构设计?

精英稀缺、全栈稀缺,通过架构设计让普通程序员也能参与其中,一起实现复杂系统。

复杂系统,需求不确定、技术复杂。

Chaos.jpg

技术的复杂性体现在

架构设计要解决技术复杂性的问题

什么是架构设计?

架构设计,就是通过组织人员和技术,低成本满足需求以及需求的变化,保障软件稳定高效运行。

目标

用最小的人力成本来满足需求的开发和响应需求的变化,

用最小的运行成本来保障软件的运行。

常见的架构设计

架构设计之

组织人员和技术进行系统和团队拆分,

安排好切分后的排列关系,

使拆分后的各部分能通过约定好的协议相互通信,

共同实现预想的结果。

如何做好架构设计?

一、分析需求,满足业务需求是架构设计最基础的目标。分析功能、界面、用户、场景。

二、选择相似的、成熟的架构设计方案。选择架构方案、开发语言、框架,根据项目情况、团队情况综合考虑。

三、自顶向下层层细化

四、验证和优化架构设计方案。架构设计并非一成不表,在实际开发的过程中,需要根据实际情况不断进行优化和调整。

22 | 如何为项目做好技术选型?

技术选型就是项目决策

技术选型看起来是个技术的选择,但其实是一个和项目情况密切相关的项目决策。

项目决策中常见的坑

如何做好技术选型?

四个阶段,问题定义、调研、验证、决策。

问题定义

为什么需要技术选型?技术选型的目标是什么?

提升开发效率,降低开发成本,不是为了使用新酷技术。

Make It Work!Make It Right!Make It Fast!

只有明确了技术选型的目标,才能有一个标准可以来评判该选择哪一个方案。

调研

从以下方面对技术进行分析

验证

试用、demo,做的过程中才能知道,选择的技术选型是不是真的能满足技术选型的目标。

决策

在调研和验证完成后,就可以召集所有利益相关人一起,就选择的方案有一个调研结果评审的会议,让大家提出自己的意见,做出最终的决策。

讨论区归纳

宝玉老师的选型原则

23 | 架构师:不想当架构师的程序员不是好程序员

前言

拿破仑那句名言:“不想当将军的士兵不是好士兵。”原句是Every French soldier carries a marshal’s baton in his knapsack”,意思是“每个士兵背包里都应该装有元帅的权杖”。

其实拿破仑的本意是激励每一名上战场的士兵都要有大局观,有元帅的思维,并不需要每一个人都一定去当将军、当元帅。

这同样适用于技术领域,对程序员来说,并不代表一定要有一个架构师的头衔,而应该心中有大局观,有架构师的思维。从而能理解架构设计,能写出好的程序。

什么是架构师思维?

架构师思维,其实就是这几种思维的集合。

抽象思维

抽象思维可以说是整个架构设计的基础。需求进行抽象建模,隐藏无关紧要的细节,在高层次的架构设计。

分治思维

对复杂系统分而治之,分解成小的、简单的部分。但光分解还是不够的,还需要保证分解后的部分能够通过约定好的协议集成在一起。

复用思维

通过对相同内容的抽象,让其能复用于不同的场景。

迭代思维

好的架构设计,通常不是一步到位,而是先满足好当前业务需求,然后随着业务的变化而逐步演进。

好的架构师什么样?

一个好的架构师,不仅技术要好,还要懂业务;能从整体设计架构,也能在局部实现功能。

好的架构师,应具备以下几个条件:

架构师能力模型.jpg

如何成为好的架构师?

从程序员开始,付出比普通程序员更多的努力,成为好的架构师,没有捷径。

宝玉老师的建议:

24 | 技术债务:是继续修修补补凑合着用,还是推翻重来?

什么是技术债务?

技术债务,就是软件项目中对架构质量和代码质量的透支。

技术债务是有利息的

债务的“利息”,就是在后面对软件做修改的时候,需要额外的时间成本。

技术债务不一定都是坏的

刻意欠债的场景,如

提升短期的开发速度,让软件能尽快推出,抢占市场。

快速原型开发中,通过欠技术债务的方式快速开发快速验证。

技术债务产生的原因

《重构》中 Martin Fowler从两个维度分析技术债务产生的原因

1. 轻率(reckless)还是谨慎(prudent);

2. 有意(deliberate)还是无意(inadvertent)。

TD Quadrant.png

不同债务定义、现象及影响

定义:团队因为成本、时间的原因,故意走捷径没有设计、不遵守好的开发实践,没有后续计划改善债务。

现象:不做设计直接编码,后期也没有打算重构代码。或者是团队成员以新手程序员为主,没有足够的资深程序员指导和审查代码。

影响:通常这类债务会一直积累,会导致利息越来越多,最终带来的负面效果会越来越大。

定义:团队清楚知道技术债务的收益和后果,并且也制定了后续的计划去完善架构和提升代码质量的情况。

现象:比如说为了尽快发布产品,先采用“快猛糙”的方式开发,后续再对代码进行重构。

影响:因为能及时偿还,所以既可以短期有一定时间上的收益,长期也不会造成负面影响。

定义:团队不知道技术债务,也不知道要后续要偿还技术债务的情况。

现象:对于什么是架构设计,什么是好的开发实践一无所知,代码一团糟。

影响:这类债务最危险,既没得到技术债务的收益,还要偿还其产生的利息。

定义:团队其实很重视架构设计和技术债务,但因为业务的变化,或者其他客观因素的原因,所产生的债务。

现象:设计的时候,无法准确预测后面业务的发展,随着业务的发展,设计无法满足好新的需求。

影响:债务难以避免,但如果能及时的对架构升级、重构,就能保证不会造成严重的影响。

如何管理技术债务?

software design effort.png

Is it worth the effort to design software well?

策略:让技术债务控制在临界点之下

识别技术债务

选择处理技术债务策略

三种策略并没有绝对好坏,需要根据当前项目场景灵活选择。

实施策略

实施策略的关键就在于要落实成开发任务,做为项目计划的一部分。

预防才是最好的方法

课后感

上一篇下一篇

猜你喜欢

热点阅读