First thing I had to figure out was what size headers I needed and how to arrange them to keep it as compact as possible without having multiple rows of pins so that it's easy to label. I tried a few sizes and plugged them into my EAGLE helper programme to estimate the cost and took the best one, which was 16 pins by 9 pins for the 21G. By this time I had a standard of keeping the MCU on the same side of the board as the USB mini-B jack so that the D+ and D- lines are easy to connect, which I continued to follow as I placed the jack on the left of the board and placed the MCU roughly in the middle (probably towards the right more). Airwiring the pins to the vias for the headers ended up pretty easy, as the left bottom vias connected to the pins next to the USB pins and I worked my way anticlockwise with both the pins and the vias. For the traces, I started with the bottom pins/vias because it was hard to tell if there was enough space to fit all the traces there, and there was enough space for all of them with the MCU centred vertically. I had to shift the MCU leftward to tighten some of the traces up more, so I kinda had to redo those bottom traces, but I think it ended up looking nicer. The reset button was pretty easy to place with plenty of space on the bottom, as well as the components on top, but the capacitor for the MCU's core voltage (VDDCORE) gave me a bit of trouble for placement because I needed to avoid the silkscreen but keep it as close as possible. I feel like I might've redone part of the 3.3-volt rail to make it easier to place the VDDCORE capacitor? Anyway, I added an LED on the 3.3-volt rail to indicate if there is power or not (another one on the 5-volt rail from the USB would make it easier to diagnose if the voltage regular is working or not, but I didn't think of it then). Running SWCLK and SWDIO to the programming pads was somewhat tricky, and I had to use a slightly smaller trace size, but that's really all that was needed to make the traces as short as possible. Because of one of the vias possibly interfering with the silkscreen dot for MCU positioning, I had to place another one just in case (I think it kinda was okay?).
Very Teensy-looking.
The headers are split up as such because I was only going to buy a couple sizes and break them down accordingly to fit because the 16-position headers were either unavailable or non-stocked. Anyway, the board for the 51J didn't go nearly as easily because of the increase in amount of pins, and I spent quite a bit more time with different layouts compared to the 21G. I think the most ideal board size would leave 3 vias unplaced, and I was also considering having one via come in towards the centre on the bottom and top at the left side, but that would've still left one via still needing placement. I eventually went with a 13 by 12 layout because it was the best that I could do while keeping the board cost as low as possible. I went with the same idea of starting with the pins next to USB and working anticlockwise for doing the airwiring, and also started with the bottom traces first. Even though there were a couple more parts to this one, there was much more space for placement, though I think I redid a couple traces to make it easier to do the reset button. Since I was copying part of the schematic from Adafruit's boards, I only have one capacitor for 5 volts on this one instead of two. Really not a whole lot to say, since there's really not much different than the other one.
See? Not too much different.
The 21G dev board would cost me about 7.19 USD (per three), the 51J dev board would cost me about 12.60 USD (per three), and with both of them totalling 20.79 USD, it makes it cheaper than the 23.50 USD that the custom controller board would cost. Not only is there a savings of 2.71 USD, it saves me from having more boards in my "graveyard" of boards, since the dev boards are much more reusable.
The boards were ordered with a bunch of other boards and their parts were ordered with a bunch of parts for other boards
Anyway... The plan I had was to only populate one of the three boards with headers because three of the same board is a lot and the testing for the custom controller required me to make a lot of ground connections, which would be easier to do with the board having vias and not headers. Also the power LED turned out a lot brighter than I thought it would be, but all I would have to do is change out the resistor for a higher value (whenever I do it). Both MCUs were easier to solder under magnification instead of by eye, but that's maybe obvious? It was sometime after this batch of boards that I learned how to tent vias, and I would've done so with these dev boards had I known. Que sera sera.
51J boards, use your imagination for the 21G boards.
I haven't used the dev boards nearly as much as the Trinket M0 or the ItsyBitsy M4 that I have (I purchased the ItsyBitsy M4 with the one shrouded header I needed so that shipping would be more reasonable... I wouldn't have it if I properly counted how many of those headers I needed before making the order), but they're there when I need them. I also made some adapter boards for the flash chip that would socket into the boards with headers to expand the flash space, but I haven't had the boards made because I haven't needed extra flash space. I'd also have to build CircuitPython with the flash chip included in the config, but that's pretty easy (I'd just have to remember to have the adapter board connected before changing variants). I did think of using either dev board to try 8-bit character LCD communication (since I'd have more than enough pins to be able to), but I probably would have to write my own library for that, since Adafruit's library is 4-bit only. Reasoning for trying it is because it should be twice as fast to update the LCD, so on a 20×4 LCD, it should post the entire screen "instantly" compared to 4-bit, which has a slight lag with the fourth line.