I received feedback from my manager indicating that I need to improve my understanding of upstream and downstream dependencies when working on big ambiguous problems. They suggested that I should propose solutions that properly consider these dependencies' requirements as in my preview project I missed a few so the tech lead on my team had to point those out. Could you recommend any resources? techniques?
Can you draw a block diagram of your system, API endpoints, subsystems, etc. with API calls to your dependencies? Do you know what your call volume budget is? Can you enunciate which are hard dependencies for which of your operations, which are nice to have, which you can survive on cache for on a limited basis? Do you know know which systems can be used async via queues and which must be sync? Do you know where your data is stored and if any other systems access it directly? Do you know what impact slow or failing requests against your APIs has on your callers? Do you know what circumstances may lead to your dependencies load shedding, and how your systems respond? Do your systems shed load, and if so how is this signaled to callers and how do they respond? Do you know steps to onboard a new caller to your system? To add a new dependency you call? Do you understand the lifecycle of each of the requests that come to your system, and where you’ll scatter-gather, versus making certain calls in serial? Do you have a dashboard to see your own traffic, broken down by caller, and the traffic you are generating to your dependencies, including error rate and latency?
It is a lot of stuff. Depending on the system maybe it is too much to stuff into your head, but your runbooks and architecture diagrams should enunciate this, and you should be able to refer to it quickly. If you are creating a new design, and you’re going to be adding a dependency or adding calls to an existing dependency from a new context, you need to be able to identify this, ensure they are aware and you begin onboarding or adjusting your budget with enough time, knowing how you test, etc.
Lee shared a bunch of great, specific questions you should do. I'm going to zoom out and focus more on principles:
So how to do these 7 things? I recommend these (and following the related resources there):