Building Reliable LLM Systems: From API Calls to Distributed Systems