 Starting in the late 1990s, programmers began to develop separately "engines" (with a command-line interface which calculates which moves are strongest in a position) or a "graphical user interface" (GUI) which provides the player with a chessboard they can see, and pieces that can be moved.Engines communicate their moves to the GUI using a protocol such as the Chess Engine Communication Protocol (CECP) or Universal Chess Interface (UCI).By dividing chess programs into these two pieces, developers can write only the user interface, or only the engine, without needing to write both parts of the program.