Rethinking Multi-Threaded Design Priniciples