The terms greenfield site and brownfield site have their origin in urban planning. Greenfield means using fresh farm land for building projects. Brownfield means reusing existing industrial sites for new purposes.
A greenfield software project is a fresh start project that lets you make design decisions without regards to an existing codebase. Productivity is high, as you are not bound by an existing code base. A brown field project is the opposite: Maintaining legacy code. Productivity is low. Working on a brown field project often feels like dragging through mud.
Here are two paradoxes:
- Brownfield projects are more common than green field projects. All the while most developers treasure greenfield more than brownfield.
- The computer science schools spend more time teaching greenfield-related techniques than brownfield. Meanwhile, a greenfield project may start green but before long it becomes brown. Even the code you wrote yourself will seem unintelligible in 6 months.
Most projects that I participate in have a color somwwhere between green and brown. Often there is a legacy app written in VB6 and it has to be rewritten in C#. The existing app is considered the blueprint and all of its functionality must be duplicated in the new app. Plus all the new features that the customer expects to be thrown in while we’re at it.
These kind of projects requires you to reuse some legacy code and allows you to make some greenfield decisions.
How to color the projects? Black field project? Too sinister. Blue field? Well the symbolism is not as clear as the terms green and brown. What’s your favorite color?