2.2.1 绿地与棕地

绿地(greenfield)和棕地(brownfield)这两个术语在项目执行过程中经常被提到,广泛应用于IT、建筑、制造等行业。它们和项目开发相关,具体的含义如下。

● 绿地:绿地项目指开发一个全新的应用程序,我们可以自由选择架构、平台和所有其他技术。整个开发过程从头开始,需要分析需求,指定技术方案,并逐一实现。

● 棕地:棕地项目是指已经做了一些工作的项目。对于软件行业来说,更新和改造现有的应用都可以被看作棕地项目。我们需要先分析遗留系统,可能会从代码审计开始,充分了解功能上的实现细节。在工业领域,棕地通常意味着废弃和污染,它的颜色很形象地体现了这种特性。软件行业的棕地项目倒不至于这么严重,但对于接手的开发者来说确实要比开发绿地项目面临更多的限制。

绿地项目在技术选型和设计方案上几乎没有限制,不会受到遗留系统技术栈的束缚,不需要与遗留代码集成,在实现层面上更加自由。典型的绿地软件项目一般有如下两种。

● 开发一个全新的应用程序,实现全新的业务。

● 用一种新语言重写一个旧的系统,只实现原有的业务逻辑,但不使用任何旧代码。

开发绿地项目听上去很有优势,也是开发者普遍喜欢的一种方式。毕竟,在一张白纸上作画比修改别人的作品要轻松得多。不过这种项目的缺点也比较明显,就是投入较大,成本较高,落地时间更长。需要考虑的因素包括团队、项目管理、硬件、平台、基础设施等,不仅只有开发过程本身。项目的范围也需要仔细规划,与业务需求保持一致,并避免项目方向出现错误。因此,如果你的团队受限于成本和时间,希望快速迁移到新的技术栈,选择绿地方式并不适合。

棕地项目通常从遗留代码中获得便利,降低了开发新项目所花费的成本。然而,在一定程度上它会阻碍开发者的设计灵活性。很多项目由于设计糟糕、实现混乱,或者执行不力等原因被放弃,开发者甚至不愿意再动一行其中的代码,更希望重新开始。但客户基于成本和时间的考虑更愿意尝试让它们复活而不是推翻重来。当然,也不是所有的棕地项目都一无是处,只要代码结构良好、不受污染,项目易于维护,富有经验的开发团队依然可以很好地接手棕地项目。典型的棕地项目一般具有以下特点。

● 将新特性整合到现有系统。

● 修改现有代码以满足业务的变更。

● 优化现有系统的性能,提升应用程序的质量属性。

对于遗留系统的改造,团队需要根据自身情况在绿地和棕地之间做出选择。如果时间和成本容许,希望彻底抛弃旧技术债务并拥抱新的技术栈,可以直接设计绿地项目。对于资源有限,希望在不影响线上业务的情况下逐渐过渡到新技术栈的场景,选择棕地方式更合理。