Key principles decentralized exchange software development