ARCHITECTURE, PATTERNS,
PRINCIPLES AND PRACTICES
Maicon Heck
Anti-patterns
What makes software projects fail
• Over-engineering
• Analysis paralysis
• Big ball of mud / Anemic domain model
• Too late
• Out of budget
• Buggy, constant crashes
• Agile hangover
Strong vertical hierarchy, Excessive bureaucracy, Forgetting technical subjects
Anti-patterns
Patterns,
Principles
and
Practices
What makes software projects
succeed…
…besides to implement the requirement
•No / Minimal defects (bugs)
•Rich Domain
Software that delivers high value and leverages business
•Maintainable and Extensible
when a business rule is changed, or when new ones arise, changing the software should
be straightforward, not nightmare
•Scalable
when we need, we can grow
Patterns,
Principles
and
Practices
What makes software projects
succeed
• Simple Design / Clean Code
• Don’t Repeat Yourself (DRY)
• YAGNI (You aren’t gonna need it) / KISS
• Screaming Architecture
• OOP / SOLID / GoF
• Fail Fast Validation
• CanExecute + Notification pattern
• Guard clauses / Code contracts (Design By Contracts)
• Defensive Programming
• Code Review
• Pair Programming
Patterns,
Principles
and
Practices
What makes software projects
succeed
• High cohesion / Low coupling
• Separation of Concerns
• Single Responsibility
• Encapsulation
• Dependency Inversion
• Well-defined public interface
• Persistence Ignorance
• DDD (Ubiquitous Language, Bounded Contexts)
Patterns,
Principles
and
Practices
What makes software projects
succeed
• DevOps (CI / CD)
• Automated Testing
• Code Quality Analysers (Sonar, FxCop, StyleCop)
• Code Review
• Agile for real
• Software Craftsmanship

Architecture, patterns, principles and practices

  • 1.
  • 2.
    Anti-patterns What makes softwareprojects fail • Over-engineering • Analysis paralysis • Big ball of mud / Anemic domain model • Too late • Out of budget • Buggy, constant crashes • Agile hangover Strong vertical hierarchy, Excessive bureaucracy, Forgetting technical subjects
  • 3.
  • 4.
    Patterns, Principles and Practices What makes softwareprojects succeed… …besides to implement the requirement •No / Minimal defects (bugs) •Rich Domain Software that delivers high value and leverages business •Maintainable and Extensible when a business rule is changed, or when new ones arise, changing the software should be straightforward, not nightmare •Scalable when we need, we can grow
  • 5.
    Patterns, Principles and Practices What makes softwareprojects succeed • Simple Design / Clean Code • Don’t Repeat Yourself (DRY) • YAGNI (You aren’t gonna need it) / KISS • Screaming Architecture • OOP / SOLID / GoF • Fail Fast Validation • CanExecute + Notification pattern • Guard clauses / Code contracts (Design By Contracts) • Defensive Programming • Code Review • Pair Programming
  • 6.
    Patterns, Principles and Practices What makes softwareprojects succeed • High cohesion / Low coupling • Separation of Concerns • Single Responsibility • Encapsulation • Dependency Inversion • Well-defined public interface • Persistence Ignorance • DDD (Ubiquitous Language, Bounded Contexts)
  • 7.
    Patterns, Principles and Practices What makes softwareprojects succeed • DevOps (CI / CD) • Automated Testing • Code Quality Analysers (Sonar, FxCop, StyleCop) • Code Review • Agile for real • Software Craftsmanship