Principles of Clean Architecture: Building Maintainable Software Systems