6.005 Software Design Problem Set 3