Current Challenges in Practical Object-Oriented Software Design