Object-oriented (OO) technology has been heralded as a solution to the
problems of software engineering. The claims are that OO technology p
romotes understandability, extensibility, evolvability, reusability, a
nd maintainability of systems and that OO systems are easy to understa
nd and use. However, this technology has not been as successful as exp
ected. An analysis of experiences and empirical studies reveals that t
he problem is not the technology per se but that the technology provid
es no support to software developers in performing the processes the t
echnology requires. We present a cognitive model of software developme
nt that details the challenges software developers face in using OO te
chnology. The model focuses on three aspects of software development-e
volution, reuse and redesign, and domain orientation. We motivate this
model with a variety of firsthand experiences and use it to assess cu
rrent OO technology. Further, we present tools and evaluations that su
bstantiate parts of this model. The model and tools indicate direction
s for future software development environments, looking beyond the tec
hnological possibilities of OO languages and beyond the context of ind
ividual developers and projects.