SOFTWARE DEVELOPMENT PATTERNS AND ANTIPATTERNS