Managing Complexity through Simplicity
Everything should be made as simple as possible, but not simpler. – Albert Einstein
In my last blog post I talked about how building a service platform is really complex. So how do you manage that complexity in the most effective way? To manage the complexity in building, deploying and managing a global service platform, you need to make your design as simple as possible. This is extremely important in the early stages of design, given the fact that getting to the final solution is going to result in an explosion in complexity. It is a chain reaction where every small feature has the potential to create a massive hairball down the road. That is why design choices you make in the early stages are crucial. It is important to make a conscious (and well thought out) decision about every new feature you are introducing into the service.
I believe that the best tool we have to manage complexity is the single word: “why”. Why do we need this feature? Why do we need a box-based solution? Why do we need a service offering? You need to play devil’s advocate. If nothing else, it forces everyone on the team to justify their choices. And it helps you better understand why you are doing what you are doing as a company.
Engineering teams tend to over-engineer. Product groups always want every feature possible built into the solution. This ’everything’ leads to complexity.
Architects always need to keep in mind:
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away. – Antoine de Saint-Exupery