What are greenfield and brownfield applications?

Language AgnosticTerminology

Language Agnostic Problem Overview


I read the following sentence in the Fluent NHibernate wiki:

>...; however, for most greenfield applications (and quite a few brownfield ones too) auto mapping will be more than capable.

What are greenfield and brownfield applications?

Language Agnostic Solutions


Solution 1 - Language Agnostic

Greenfield

> in other disciplines like software engineering, a greenfield is also a project which lacks any constraints imposed by prior work. The analogy is to that of construction on greenfield land where there is no need to remodel or demolish an existing structure.

(from http://en.wikipedia.org/wiki/Greenfield_project)

Brownfield

> Brownfield development is a term commonly used in the IT industry to describe problem spaces needing the development and deployment of new software systems in the immediate presence of existing (legacy) software applications/systems. This implies that any new software architecture must take into account and coexist with live software already in situ.

(from http://en.wikipedia.org/wiki/Brownfield_(software_development))

Solution 2 - Language Agnostic

I think it might be related to the urban planning terms "greenfield land" and "brownfield land". Greenfield land is undeveloped land - agricultural, landscaping, or natural. Brownfield land is developed land.

A brownfield application is an existing application, while a greenfield application is one that is not yet made or is in very early stages of development.

Solution 3 - Language Agnostic

Greenfield apps: new development, no prior work done that poses constraints on your solution. I think the term comes from un "unplowed, green" field.

Brownfield: existing application, lots of existing stuff to consider, etc.

See this post.

Solution 4 - Language Agnostic

I would guess it's an analogy to building

  • a greenfield site is virgin ground - i.e. a new project, starting a new software project from scratch
  • a brownfield site is one where existing structures need to dismantled first, i.e. building within an existing software project

Solution 5 - Language Agnostic

Based on what I know of James Gregory (the guy behind Fluent NHibernate), I think the Wikipedia entry for brownfield is a little on the theoretical side. In Brownfield Application Development, we define it as:

> a project, or codebase, that was > previously created and may be > contaminated by poor practices, > structure, and design but has the > potential to be revived through > comprehensive and directed refactoring

Short version: An existing project that needs work but is still actively developed (unlike most legacy systems).

Solution 6 - Language Agnostic

There is much debate surrounding a company's decision to 'greenfield' or 'brownfield' or refactor legacy code.

The decision needs to be made in consideration of many factors - not the least being the available funds to develop a greenfield application. In many cases the legacy app is the company's current cash cow and any greenfield replacement of that legacy code won't make a single red dollar until it is has been fully developed and in the hands of the first paying customer.

While the preference for most software engineers is START NEW GREENFIELD PROJECT because they usually hate OPC (Other People's Code) it may not always be in the long term financial of the company.

I wrote an article that analyses the risks involved with greenfield projects basing it on a very real experience at a company I worked for 20+ years ago (showing my age now ;). You can read it here:

http://stepaheadsoftware.blogspot.com.au/2012/09/greenfield-or-refactor-legacy-code-base.html

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSvishView Question on Stackoverflow
Solution 1 - Language AgnosticBombeView Answer on Stackoverflow
Solution 2 - Language AgnosticThomas OwensView Answer on Stackoverflow
Solution 3 - Language AgnostictijmenvdkView Answer on Stackoverflow
Solution 4 - Language AgnosticPaul DixonView Answer on Stackoverflow
Solution 5 - Language AgnosticKyle BaleyView Answer on Stackoverflow
Solution 6 - Language AgnosticVolksmanView Answer on Stackoverflow