Insights on Jupyter Notebook's Architectural Decisions

Hi, I’m a Computer Science student researching the architecture of Open Source Systems, with a focus on Jupyter Notebook. While I’ve found some documentation on Jupyter’s architecture and kernels, information on the specific architectural decisions and their rationales seems scarce.

Could anyone point me towards resources discussing these decisions, or is there someone knowledgeable who could shed light on this? Any help or direction would be greatly appreciated.

Thanks!