We're all seeking simple truths where there aren't any.
I believe it is time for a new manifesto. A manifesto of complexity. With this manifesto we must recognize that it is human to prefer simple solutions, but also that the world is more complex than we think. Well, here it is…
The Complex Manifesto
Each Problem Has Multiple Solutions There's not just one way to solve the Rubik's cube. There's not one best way to run a business. There's not one best strategy to win at Risk. And there is not one best way to run a software project. Yes, we're human, and we like to be the ones who are right (even me). But we admit that others can be right as well.
Solutions Depend on the Problem's Situation The form of each species depends on its environment. The best strategies in football depend on the opponents. The best marketing depends on the customers. And the best software development practices depend on the project. In software development there are lots of princes and nobles, but context is king.
Changing Context Requires Changing Solutions When environments change, so do species. And good strategies for social networking now are different from what they were before. (Follow me on Twitter now, and we'll see how things have changed next year.) Therefore, when software project environmentschange, their processes much change accordingly.
Some Solutions are More Prevalent Than Others Even before humans, ants and antarctic krill are the most successful species in the world. And tit-for-tat is one of the most prevalent survival strategies. But the silly looking blobfish has its place in the world too. And no game strategy is always superior. Likewise, some software development practices are wildly successful, but they will never replace all others.
For Every Solution There is a Best Situation There's a good time and place for the Northern hairy-nosed wombat to exist. Granted, it's place in the grand tree of life is not big. But it is there. And I probably won a few games of Risk with some very strange strategies myself. Likewise, even the most uncommon software practices have their proper time and place in the world.
Solutions Change Themselves by Changing Their Situations Movies that are released change the playing field of the movie business itself, and the new movies that are made. The memes in our mind change the way we think, and the new memes that we are willing to adopt. Similarly, our software practices change our projects' environments and the way we change the practices themselves. Any practice that is static, is likely to fail in the end.
Understanding Complexity Helps in Applying Simplicity Biologists, businesses and governments have often done much harm by not understanding the complexity of the world. Those who don't understand the way things work, have a hard time anticipating which simple solutions might work in solving complex problems. Even worse, simple regulations can have devastating effects when complexity is underestimated.
It Is Impossible to Predict the Best Solution Though anticipation is valuable, it is impossible to know for sure which solutions will work, and which won't. Only with empirical findings in a real context can any claims be made of the success of a solution. We admit what we don't know, and that we have to try software practices in order to know if they work in our context.
The pure and simple truth is rarely pure and never simple. – Oscar Wilde
Everything should be made as simple as possible, but not simpler. – Albert Einstein
For every problem there is a solution which is clear, simple, and wrong. – Henry Louis Mencken
It is simplicity that makes the uneducated more effective than the educated when addressing popular audiences. – Aristotle
The Complex Manifesto does not invalidate any existing values, principles, guidelines, or practices. On the contrary, it says that all are valuable, when seen in their proper context. In software development, discussions should not be about who is right and who is wrong. Instead, people should concern themselves with who is right in which situations. We should not be interested in user stories vs. use cases, agile vs. cmmi, xp vs. scrum, or lean vs. agile. We should be interested in when to use what.
It is my hope that all software developers and managers learn to understand that there's no need to flame each other over methods, frameworks, principles, and practices. In a complex world there's a time and place (whether small or big) for every idea. The real challenge is in finding out which idea belongs where.
Thanks for reading! If you agree with this, then feel free to sign this article with your name. It's only a real manifesto when there are some signatures underneath it! 🙂 Oh, and forward the link to your friends too!