Architecting ML-enabled systems: Challenges, best practices, and design decisions