Most fundamental network design attribute should be simplicity. When you have a simple network, you can have secure, flexible , scalable, understandable , in fact all important design requirements can be achieved. But having simplicity is easy to say, hard to achieve. On the other hand, some amount of complexity is required, as I explained in my complexity post earlier.
Designers should find a correct balance point where they can support technical and business requirements by adding minimum amount of necessary complexity. Network engineers tend to add more and more features to their networks to achieve required tasks. But adding, even a very basic feature to network adds extra complexity. For example adding an extra one more line ‘ access-list' entry might be required to complete the task but it adds a complexity.
You should always ask, do I really need to add that line of access list ? Or can I have the same result with prefix list or any other way , or can completely avoid ? You shouldn't look for simpler solution, you should look for simplest solution. Because, simpler solution creates more complexity but if you can find a simplest solution, it doesn't have to be changed later on , thus you avoid possible complexity.
" Any intelligent fool can make things bigger and more complex… It takes a touch of genius – and a lot of courage to move in the opposite direction " Einstein said. We need to have this sentence keep in mind anytime when we design networks. Doesn't matter IP , MPLS , Optical . Wireless, Fix etc. Any type of network. Any place in the network (WAN, DC, LAN, DMZ, Internet , Access , Metro, Core..)
Don't be an intelligent fool. Look for a simplest solution , not a simpler one.