There are so many to choose from.
This is something reiterated time and time again by most of my mentors and friends. So let me walk you through an example of what I mean and the oh so common feeling of starting a project and stopping short due to fear of not doing it the "right way".
Given that I would like to set up a no code jump into game controllers I decided it would be smart to buy several controllers and see if there is a standard button layout to build off of. The two main reasons this is important to me would be allowing for a 1 to 1 comparison example build allowing people to make slight adjustments to different dimensions to make a nearly perfect controller be exactly what they want, and to minimize code changes in the software of many preexisting games.
I picked up some controllers from "Hack Me" boxes at local hackerspace like Crashspace or Burbank Makerspace and made some purchases from Amazon. Then i took all of the controllers I had and through windows device management i could check controller settings. This brings up a screen for seeing what number or axis is sent to the computer when a button is pressed or a joystick is moved.
The first one was an old Axis Pad. My computer did not recognize the device. Most likely i would have to install drivers. Since this is already the opposite experience i want for anyone else I decided to move on. The reason i chose the Teensy to build off of was it's ability to be understood as a joystick when plugged in. Nothing else need be installed.
This gem was found in the Hack Me box at Crash. so all bets are off to say the least. Also not recognized by my computer... well not entirely. The name Playstation (R)3 Controller showed up in device name. even though SplitFish was want was on the side.
This one i purchased on Amazon. It's the ZD+N controller labeled for computers and mobile devices. It immediately worked out of the box. just plugged in and it knew it was a joystick AND it observed all button changes without any issue. This is a lot more like the experience i want for my clients. This being the first controller to pop up in this list of experience I did notice a few things on the joystick settings that was new to me. The number of buttons updated to match number of buttons on the controller. All button signals and joystick values are solid and without detectable noise. In tandem to buttons and joystick axis values I could now see something called "Hat" referring to the D-Pad in the bottom left. All things to test and look up more later.
This little guy simply labeled VR 3D was from Burbank Makerspace for testing. Only acted and a mouse on the computer regardless of what mode i placed it into. I think more for presentations than games, But i do remember playing with this some on my android for a unity test build many months ago. The no joystick mode for computer quickly ended my time testing this one out as well.
This one was yet another Amazon purchase after simply searching "VR Controller" and buying the cheapest one at the time. This one had mostly responsive buttons and joystick. One button was very iffy. The most interesting thing about this little guy was the button layout. Four buttons set next to each other have a joystick address of 2, 1, 11, 9. Where as the other controller I liked above went 1, 2, 3, 4.
Then there is the possibility of the Teensy. Just connects, and any pin i switch to i can map to any button value/address. Same goes for axis data and once I flashed it with the demo joystick code by Paul, it just connected and worked. Both for computer and phone. Although without anything tying my axis analog pins to any value, it did showcase all the noise so leaving no option for a disable or static pulled down position, this could show up and have undesired effect in games. So optional jumpers to pull pins to GND will be entertained as a solution.
All in all I have observed more of what i don't like about how things are currently than things i do like. I've seen that in regards to layout, all bets are off in most cases. One interesting thing to note, button layout observed from computer and mobile devices can be seen differently even if it's the same controller. And all of that anxiety most of us have when learning a new thing, and the apprehension sharing and showing our builds to others needs to just go away. We have spent so much time in systems that train us that if we don't have a certificate, many years experience, or someone telling what "the right way" is, that we are not allowed the option to start. Or worse yet, that our opinion of observations are somehow invalid. That way of thinking is complete garbage in my opinion. As Hutch always tells me, "One test often beats a thousand expert opinions" And with the onslaught of opinions out there, how many of those could even be considered "experts"?
Test everything, and for the sake of everything that makes life amazing and impossible, please stay curious.