“Few of you will work on a greenfield project, maybe one or two the first few years. Make sure that you are prepared for brownfield work.”
In the very beginning when I started learning programming at school we started of learning programming without generics and dynamic, which got us all very curious. As we started learning that – eager to know what is to come- we asked our teacher why didn’t start of straight away with the good bits. The quote above is what he replied, and what he meant was that it was important to be able to work on legacy projects, and to be aware of restrictions and possibilities.
I must have been the odd one out, because since I started programming I’ve only been on two brownfield projects, and quite a few greenfield ones- and I’ve enjoyed the luxury knowing that it might change at any moment. And that is how I came to think of this question, is greenfield good and brownfield bad?
Let’s start of by explaining the two terms, greenfield is often a new project, untouched and therefore with restrictions (aside from those from the customer etc.).
In many disciplines a greenfield is a project that 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.
Brownfield is a project that already exists and you have to work with the existing code be that change it, maintain it or whatever.
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.
When you read the Brownfield Land definition in Wikipedia the way Brownfield is explained is often how I fell it is viewed even in software:
Brownfield sites are abandoned or underused industrial and commercial facilities available for re-use. Expansion or redevelopment of such a facility may be complicated by real or perceived environmental contaminations.
It’s something negative. But is it? Notice how I didn’t use the word legacy code. This is where I might be wrong, but for me legacy code is unsupported code- and code that will very likely cause grief and problems.
I’ve seen legacy code in a Brownfield project, and I’ve seen Brownfield projects that are far from legacy. But nonetheless Greenfield seems to symbolize the ultimate freedom, it’s pure and untouched and you get to play creator and work on those ‘the-perfect-project-dreams’ (which as I’ve understood rarely work out). The irony is that as soon as you write those first few lines of code it isn’t green anymore, and wait long enough without change and it even becomes legacy.
I doubt I gave an answer here, I probably just offered an opinion, and my opinion is that to be correct- Brownfield merely states the state of the project and not the quality or whether or not it’s legacy, and therefore while Greenfield gives you more freedom, it isn’t about good and bad projects, but just different project states- both with pros and cons.
Curious to hear what you think 🙂