Building a distributed system introduces significant complexity, particularly when ensuring consistent state across various components. Utilizing relational databases can help manage this complexity, but challenges like sharding and data rebalancing must be navigated carefully to avoid system failures. Key considerations include balancing scaling efforts with the need for failure tolerance and maintaining coherence where it matters most.