Don’t Let Mindless Complexity Ruin Your Project

To be more agile, you need to keep it simple.

Many of us have a tendency to make things too complicated. In an effort to cover every angle or get all the facts on the table, we overwhelm the reader or listener with too much information. This creates confusion, causes mental fatigue, and leads to poor decisions.

Complexity is not inherently bad. For example, running a $10M project is fundamentally more complex than running a $1M project. Problems develop when we keep adding complexity to deal with new issues that arise, but the new complexity doesn’t add any value.

Complexity breeds complexity.

Internal complexity increases whenever we add new products or services, hire new people, introduce new processes, start strategic initiatives, add layers of management, or add new data sources. There are also external forces that increase complexity in the form of new markets, new competitors, regulatory changes, and economic swings.

IT complexity is also part of the problem. Complex technology restrains businesses by making it difficult to add or remove systems within the infrastructure. It is often a challenge to change existing systems as there is a cascade effect that ripples across the entire enterprise every time any system is upgraded or replaced.

Technology should be making it easier for businesses to manage change. Instead, we often make it more difficult.

Justify it. Reduce it. Get rid of it.

Think about these issues within the context of your next project. As software systems get larger, we need more management, more documentation, more risk analysis, more design models, more test code, more memory, more storage, more bandwidth — more, more, and more. Don’t keep piling on mindless complexity.

When changing a business process, ask “How can we do this faster and simpler?”. Business processes are often overly complex with so many checks and balances that everything slows to a crawl including decision-making. Justify every step in the process and look for ways to eliminate each one.

When adding a new function to a software system, ask “What can this new function replace or make obsolete?”. Simply appending more code and more options to the software without a value justification will only create support problems.

When adding new artifacts to the software development process, ask “Who will use this artifact? What value will that person derive?”. Use the answers to decide how much formality the artifact requires, if it’s needed at all.

When incorporating new policies or procedures into your software development process, ask “Why are these needed? What value do they add?”. Everything you add creates more work. Work is costly. Justify it.

When finding the solution to a problem, ask “Are we solving the right problem? What is the simplest solution that will work?”. Always lean toward the simplest solution to every problem. You can always expand the solution later (assuming you’ve followed good design practices).

Every business wants to be more agile. So stop adding mindless complexity.

Updated: August 24, 2011 — 9:41 pm