The first version of this project was intended to be cheap, fast, and use the bare minimum number of components. I have a bunch of those boards now, so I'm good on that front.
A good way to up my game on the reliability stand-point is to take lessons from the Arduino itself. I checked out the schematic before, but was mainly looking for cool features or maximising compatibility. It's time to revisit that a bit.
Starting from here:
This is a pretty bad schematic!
Here is a quick and not-complete analysis of it. It's not The Worst Schematic In The World or anything, but it could be way better.
The first, most obvious thing is readability. For an open source project that is designed to ease people into hardware, just shitting the components all over the page like that is a big "fuck you".
VIN is only active when the DC jack (PWRIN) is on. So what that circuit does is backfeed the 5v rail into the USB power rail when the DC jack is being used.
Those are my big complaints, I guess.
The protection circuitry for the USB side is getting used in my design for sure, I am not an expert on that bit. Probably not going to include the DC jack or power components, does anybody use those?
Edit: When only USB is plugged in, the entire board is getting powered through the reverse polarity protection of the P-FET. WTF.