Here we can see my initial breadboard concept using two of the MCP23017 I2C Port expanders.
Naturally, after I got the code and basic schematic sorted out using a breadboard, I wanted to move onto etching a PCB with my design.
With my only real experience in electronics being a year as a Computer Engineering major before switching majors (to Political Science, don't ask) the idea of designing a PCB both excited and intimidated me. After opening CadSoft EAGLE and deciding it was way too complex, I ended up settling on designing in Fritzing. While I certainly don't recommend this due to the lack of portability of the Fritzing file format, and it's general lack of use in the industry, I was easily able to export the board to Gerber format to get it manufactured. I am currently paying for it now as I attempt to learn to design in Eagle.
Here we have the first revision of this board that I sent off to the OSHPark, who I used as my fabricator. As a side note, OSHPark was great, with about a 2 week turnaround from submission to receipt, a great web interface, and reasonable pricing. Also, there is the added perk that they etch on purple PCBs exclusively, so the end product looked cool.
If you start to study this PCB, you can see that I made a lot of design errors. First, the most egregious error is the switching of SDA and SCL channels on the silkscreen. SDA and SCL are the two ports used for communication for the I2C controller, and the integrated part in Fritzing for the Leonardo had these reversed on the silkscreen. Since I did not check this against the actual Arduino, I wired it incorrectly.
Secondly, the buttons are rotated incorrectly on the board for how I have them wired. In this version, I was assuming a horizontal orientation for the buttons in my wiring, but the way the holes are physically drilled meant they could only be placed and soldered in an incorrect configuration.
Beyond that I had some small errors, including the header spacing on the bottom left being incorrect, and the shield not having a cut out for the power plug on the Arduino. I worked around the last one by doubling the headers to connect to the board, making the unit a bit taller, but functional.