Software Design for Engineering