The object-oriented paradigm exists to improve the quality of software systems in a number of key areas. The most important areas it improves is the under-standability of the code, simplicity of the system and consistency across the system due to a combination of high code reuse and low code redundancy. To this end, object-oriented systems should possess eight key characteristics; however, ensuring a system possesses these characteristics when implementing the software can be difficult. In order to improve the likelihood of the final product possessing the eight characteristics, developers can use a number of techniques during development. Of these techniques, the most beneficial are card-based techniques, conscious system design and a suitable metric suite.