The best way to build complicated things is to think of each part as a component in a system. Think about how it fits in with the other parts. Consider what happens when this part changes and find a way to make that change flow through the system.