This thesis would not have been possible without the guidance and support of many wonderful people.Thank you to my parents Bill and Jingda, and my brother Alex, for dealing with all the ups and downs in my personal life. Thank you for always believing in me and always pushing me forward, no matter how hard things might seem.Thank you to Max Goldman, my thesis advisor, for teaching me many valuable lessons about research and software development, and always helping me get unstuck from everything, from the smallest bug to the biggest design challenge. Thank you to Rob Miller for always providing valuable and helpful feedback at every step of my project. Thank you both for your constant support, as both mentors and instructors, even as classes and research went remote. Thank you to my fellow UP group members for many fun conversations, always reminding me that I'm not alone and that research truly can be a team effort.Thank you to all the friends I've made over the years, and especially to the MIT Syncopasian family, and the not-so-official (yet) MIT osu! club.Finally, thank you to all the staff members of 6.031 for making a huge positive impact on my experience at MIT. Special thanks to everyone who helped me move 6.031 forward by providing feedback on this work.