design problems don' be fooled by the many books on complexity or by the many complex and arcane algorithms you find in this book or elsewhere although there are no textbooks on simplicitysimple systems work and complex don' -"transaction processingconcepts and techniques, gray you may be asked in an interview how to go about creating set of services or larger systempossibly on top of an algorithm that you have designed these problems are fairly open-endedand many can be the starting point for large software project in an interview setting when someone asks such questionyou should have conversation in which you demonstrate an ability to think creativelyunderstand design trade-offsand attack unfamiliar problems you should sketch key data structures and algorithmsas well as the technology stack (programming languagelibrariesoshardwareand servicesthat you would use to solve the problem the answers in this are presented in this context--they are meant to be examples of good responses in an interview and are not comprehensive state-of-the-art solutions we review patterns that are useful for designing systems in table some other things to keep in mind when designing system are implementation timeextensibilityscalabilitytestabilitysecurityinternationalizationand ip issues table system design patterns design principle key points algorithms and data structures identify the basic algorithms and data structures decomposition split the functionalityarchitectureand code into manageablereusable components scalability break the problem into subproblems that can be solved relatively independently on different machines shard data across machines to make it fit decouple the servers that handle writes from those that handle reads use replication across the read servers to gain more performance consider caching computation and later look it up to save work decomposition good decompositions are critical to successfully solving system-level design problems functionalityarchitectureand code all benefit from decomposition