Despite the advent of Ethernet and other high-speed communications protocols, serial communications remains a pillar of embedded computing. Serial protocols are used for everything from flash downloads to tunneling TCP/IP traffic. Many embedded projects use serial communications for low-speed, and low-cost, communications in a distributed system or between an embedded controller and service application on a PC. This paper will examine the process of designing a serial communications protocol. Available solutions, such as using a PPP connection, will be explored, as well as the criteria for when a custom protocol is necessary. Some of the key architectural tenets for custom protocols, such as establishing connections and checking the integrity of data packets will be discussed. The myriad of implementation issues, including code reuse and Big- versus Little-Endian will also be examined.