language agnostic - ¿Qué son las aplicaciones greenfield y brownfield?
language-agnostic terminology (6)
Aplicaciones de Greenfield: nuevo desarrollo, ningún trabajo previo hecho que represente restricciones en su solución. Creo que el término proviene de un campo "sin refinar, verde".
Brownfield: aplicación existente, muchas cosas existentes a considerar, etc.
Leí la siguiente oración en la wiki fluida de NHibernate :
...; sin embargo, para la mayoría de las aplicaciones greenfield (y también para algunas de brownfields ) el mapeo automático será más que capaz.
¿Qué son las aplicaciones greenfield y brownfield?
Creo que podría estar relacionado con los términos de planificación urbana "tierra verde" y "tierra abandonada" . La tierra de Greenfield es tierra no desarrollada: agrícola, paisajística o natural. La tierra de Brownfield es tierra desarrollada.
Una aplicación brownfield es una aplicación existente, mientras que una aplicación greenfield es una que todavía no está hecha o está en etapas muy tempranas de desarrollo.
Supongo que es una analogía de la construcción
- un sitio nuevo es terreno virgen, es decir, un nuevo proyecto, que inicia un nuevo proyecto de software desde cero
- un sitio brownfield es aquel donde las estructuras existentes deben desmantelarse primero, es decir, construir dentro de un proyecto de software existente
Basado en lo que sé de James Gregory (el chico detrás de Fluent NHibernate), creo que la entrada de Wikipedia para brownfield es un poco teórica. En el desarrollo de aplicaciones de Brownfield , lo definimos como:
un proyecto, o base de código, que se creó previamente y puede estar contaminado por prácticas deficientes, estructura y diseño, pero tiene el potencial de ser revivido a través de la refactorización integral y dirigida
Versión corta: un proyecto existente que necesita trabajo pero que todavía se desarrolla activamente (a diferencia de la mayoría de los sistemas heredados).
Greenfield
en otras disciplinas, como la ingeniería de software, un greenfield es también un proyecto que carece de cualquier restricción impuesta por el trabajo anterior. La analogía es la de la construcción en terrenos totalmente nuevos donde no hay necesidad de remodelar o demoler una estructura existente.
(de http://en.wikipedia.org/wiki/Greenfield_project )
Brownfield
El desarrollo de Brownfield es un término comúnmente utilizado en la industria de TI para describir los espacios problemáticos que necesitan el desarrollo y despliegue de nuevos sistemas de software en presencia inmediata de aplicaciones / sistemas de software existentes (heredados). Esto implica que cualquier arquitectura de software nueva debe tener en cuenta y coexistir con el software en vivo ya in situ.
(de http://en.wikipedia.org/wiki/Brownfield_(software_development) )
Existe un gran debate en torno a la decisión de una compañía de ''greenfield'' o ''brownfield'' o refactorizar el código heredado.
La decisión debe tomarse teniendo en cuenta muchos factores, entre los que se encuentran los fondos disponibles para desarrollar una aplicación totalmente nueva. En muchos casos, la aplicación heredada es la vaca de efectivo actual de la compañía y cualquier reemplazo nuevo de ese código heredado no generará un solo dólar rojo hasta que esté completamente desarrollado y en manos del primer cliente que paga.
Si bien la preferencia para la mayoría de los ingenieros de software es START NEW GREENFIELD PROJECT porque generalmente odian a OPC (Código de otras personas), puede que no siempre sea financiero a largo plazo para la compañía.
Escribí un artículo que analiza los riesgos que implican los proyectos greenfield basándome en una experiencia muy real en una empresa donde trabajé hace más de 20 años (mostrando mi edad ahora;). Puede leerlo aquí:
http://stepaheadsoftware.blogspot.com.au/2012/09/greenfield-or-refactor-legacy-code-base.html