This was originally posted at www.victoriacodecamp.com/blog. I'll be out in Victoria on January 26th 2008 speaking on Parachuting Into Brownfield Applications and on C# 3.0 Beyond Linq.
A common term in software development is 'greenfield'. The term is commonly used to describe a project that is starting completely from scratch and thus having no existing code base. Recently I have been searching for a term that is capable of describing the opposite of greenfield. One of the terms that is often used to describe code that exists is 'legacy'. Unfortunately the term 'legacy' has connotations that lead people to think about applications that have out lived the life of the technology that they were implemented with and no longer are being actively developed. For some people this will make them think of mainframe, green screen, COBOL, FORTRAN and other technologies. Because our minds tend to sway to distant applications and technologies like this, we create a gap between greenfield and legacy where the technology is either relevant, or nearly relevant, and the application is under active development.
Applications like this are something that we regularly see in the industry. More often than not, when you're hired onto a project, either as an employee or a contractor/consultant, you will be stepping into a project that is already under development. How do you decribe that project to your mates? It's certainly not greenfield and if you mention 'legacy' people will ask you how you ended up working on mainframes. Neither do the situation justice.
The term 'brownfield' is not as commonly used in our industry. In fact, I can't find any online references to the term in relation to software development. According to Wikipedia, brownfield is used to define land and reclamation work and can be defined as:
...land previously used for industrial purposes, or certain commercial uses, and that may be contaminated by low concentrations of hazardous waste or pollution and has the potential to be reused once it is cleaned up.
If we translate that into software development it would probably read something like this:
...project or codebase that was previously created and may be infected with poor practices, structure, implementations and moral but has the potential to be revived through comprehensive and directed refactoring.
If that is how we define a brownfield project then we can also say that they are a more common type of project for us to end up working on. If we are working on these types of projects regularly, what are some of the skills that we should have to deal with them? Over the next while I'll be posting more on this topic.