Feedback Boards

All feedback from every channel in one organized board.

Merge duplicates and see true demand behind every idea.

Auto-notify users when their request ships.

Feedback Boards

Brownfield project: what it is, why it matters & examples

A software project that builds on existing infrastructure and code rather than starting from scratch.

Brownfield project

A brownfield project develops software within the context of existing systems, infrastructure, and constraints. Unlike greenfield projects that start fresh, brownfield work inherits legacy code, established databases, existing integrations, and organizational history. The term comes from urban planning, where brownfield land has previous development that affects new construction.

Why it matters

Most software work is brownfield. While greenfield projects get more attention, the majority of development happens on existing systems-adding features, fixing problems, modernizing technology, and evolving products. Understanding how brownfield development differs from greenfield helps teams set realistic expectations and approach the work effectively.

Brownfield projects face constraints that greenfield projects don't. You can't choose your technology stack freely. You must understand existing systems before changing them. Changes affect real users with real data. These constraints aren't bad-they reflect the reality of working on systems that matter enough to have accumulated history.

The challenges

Understanding existing systems is often the first hurdle. Documentation may be outdated or missing. Original developers may be gone. The code may reflect decisions that made sense years ago but seem strange now.

Legacy constraints limit options. The database schema, API contracts, and technology choices of the past constrain what you can do today. Sometimes you can work around constraints; sometimes you must work within them.

Testing gaps are common in older systems. Code written before testing was standard practice may lack coverage, making changes risky.

Data complexity adds weight to every change. Existing data must be migrated, transformed, or maintained during changes. You can't just start fresh.

Change risk is ever-present. Every modification to a brownfield system might break something that currently works. The blast radius of changes is often unclear.

Strategies for success

Invest in understanding first. Before changing code, understand what it does and why. Read it carefully, trace flows, talk to anyone with history. This investment pays off in fewer surprises.

Add tests before changing code. If existing tests are insufficient, add characterization tests that capture current behavior. Then you can refactor with confidence that you're preserving functionality.

Strangle gradually rather than replacing completely. The strangler fig pattern incrementally replaces old functionality with new. Build new capabilities alongside old ones, gradually shifting traffic, until the old system can be retired.

Make data changes carefully. Schema changes should be backward compatible. The expand-contract pattern-add new structures, migrate, then remove old ones-reduces risk.

Improve incrementally. Resist the urge to fix everything at once. Focus improvements on areas you're already changing, gradually raising quality where it matters.

The strangler fig pattern

This approach, named after vines that gradually envelop trees, is particularly powerful for brownfield modernization:

Build new functionality alongside the existing system. Route some traffic to the new implementation while the old continues operating.

Gradually expand what the new system handles. Each increment is small and reversible.

Eventually, the new system handles everything. Decommission the old system.

This approach avoids the risks of big-bang rewrites while making steady progress toward modernization.

Brownfield vs. greenfield mindset

Greenfield thinking is optimistic about possibility-you can build anything with the right technology choices. Brownfield thinking is realistic about constraints-you must work with what exists while carefully improving it.

Brownfield requires patience. Changes take longer because you must understand existing systems. Progress feels slower because you're not building from nothing.

Brownfield also requires humility. The previous developers weren't stupid; they made reasonable decisions with the information and constraints they had. Code that looks strange often has reasons you don't yet understand.

When to invest in understanding

Not every brownfield project requires deep archaeological digs. The investment in understanding should match the scope of changes:

For small, isolated changes, understand the immediate area and make the modification.

For significant feature additions, understand the relevant subsystems thoroughly.

For major modernizations or rewrites, comprehensive understanding is essential before starting.

The value of brownfield work

Despite the challenges, brownfield work often delivers more value than greenfield. Existing systems have users, revenue, and proven value. Improvements to these systems have immediate impact.

Brownfield work also builds important skills. Engineers who can navigate legacy systems, understand existing architectures, and improve code incrementally are valuable. These skills transfer across organizations and technologies.

The best brownfield developers combine technical skill with empathy-for the previous developers who built the system, for the users who depend on it, and for the future developers who will inherit their changes.

Feedback that drives growth

Start collecting feedback today

Launch a beautiful, AI-powered feedback portal in minutes. Capture requests, prioritize with confidence, and keep customers in the loop automatically.