Developing Object-Oriented Software: An Experience-Based Approach