I'll be demonstrating this modification on a madcatz xbox360 wired controller, but the principles will be the same for a lot of controllers.
I modded mine at TechShop.
Step 1: Open Up the Controller
Flip your controller over and unscrew all the screws. It is possible that the manufacturer hid a screw or two under a sticker, so if the controller doesn't separate after removing the visible screws, check for voids underneath stickers and either peel the sticker back or just cut away the portion covering the hole.
With the face of the controller still facing down, slowly separate the two halves of the controller's shell. If you're careful, all of the buttons will remain in place, and you can set the face plate on your desk without any mess. If you don't get it quite right the buttons can fly all over the place. That's fine. Just pick them up and put them back into place in the face plate once you've gotten it separated.
Step 2: Remove the Circuit Board
Depress the triggers (which are physically connected to the circuitboard) and push them up through the shell. The top edge of the circuit board should lift out of the shell as you do this. Once the triggers have completely cleared the shell, pull the circuit board away from you. This will free the audio/keyboard connector from the hole in the controller.
The rumble pack motors will need to be removed from their slots in the shell before the circuit board will be completely free of the shell. Be careful with the rumble motors as they are relatively heavy and if you let their weight hang on the wires the wires can snap. Snapped wires can be resoldered to the board, but that's a pain.
Step 3: Inspect the Board
The buttons consist of three parts:
1) A positive lead - One half of a circle of metal
2) A ground lead - The other half of a circle of metal
3) A conductive pad - bridges the two leads when the button is depressed.
Normally all of the buttons share either a common lead. This lead could be either ground or a positive voltage (like 5 volts). The other lead connects to a pin on main chip of the controller. If the two leads are bridged (by pressing the button) the chip can tell that the circuit has been completed and will send the proper signal (button 'A' was pressed) to the game console.
It would be great if we could solder directly to the positive and ground leads right at the metal circle, but soldering wires there would interfere with the silicon mat that holds the conductive pad of the button, causing the original button to stop working. A better option is to follow the metal traces on the circuit board until we find a more convenient place to solder to.
Normally the ground lead is easy to find. The trace will usually connect up quickly to large areas of metal into which other components are soldered. These could be resistors, buttons, LEDs, whatever. The bigger the existing blob of solder is, the easier it will be to add in your own wire.
The positive lead will be a little harder. There will only be one path from the metal circle back to the chip, and the traces can be somewhat maze-like. In my case the traces for the buttons all disappeared underneath another component, making a visual trace impossible. Fortunately that's not absolutely necessary.
One quick note about circuit boards with components on both sides, leads can 'jump' from one side to another, and these 'jumps' are usually identified by a trace ending abruptly at a little dot, sometimes with a hole in the middle of it. At this dot there is actually a little channel of metal that travels through the board and links to another dot on the other side where the trace continues. These jumps from one side to another are known as Plated Through Holes (PTH) or 'vias'.
Flipping the board over reveals the controller's main chip (buried under that big black blob of impenetrable epoxy), into which we know the button traces must eventually terminate. We can tell where the traces disappeared under the joystick housing on the top side, and look for traces coming from the top side to the bottom side in that general area, and leading to the chip. All of the traces for the buttons from that half of the controller were all running side-by-side when they disappeared under the joystick, so we should expect there should be a grouping of about six vias popping up in that area.
Sure enough, on the bottom of the circuit board, right past where the leads disappeared under the joystick, there is a cluster of vias with traces leading to the chip. We can't be 100% sure which lead popping out on the bottom relates to the buttons on the top just by looking at them, so we'll have to use a continuity tester to determine which traces belong to which buttons.
Take a piece of paper and draw out the general layout of the traces where they pop through from the other side so you can keep track of what's what without having to keep squinting at those tiny traces.
Step 4: Check Continuity
This continuity check may be part of your discovery process as you look for the appropriate via, or it may just be verification that your visual trace of the circuit was correct. Either way, you definitely want to have positive verification that the spot to which you are going to solder is the correct spot.
Touch one lead of your continuity tester to a via you think traces back to the button you want to replicate, and then touch the other lead of your continuity tester to the positive lead of that button on the other side of the board. If you're still figuring out which via goes to which button, you should be able to determine pretty quickly what vias link to which buttons.
The tops of the vias will be covered by the green protective coating, and need to be cleaned off before you'll be able to get any sort of electrical contact to check for continuity. The vias are very delicate, and should be cleaned off using an appropriate solvent. If you're a DIYer, though, you probably don't have an appropriate solvent, so VERY light scraping with a hobby knife can remove the coating without damaging the vias. It can also pull the vias right off the board. Be careful. I've had good luck resting the point of the hobby knife in the hole of the via and then gently twirling the knife. This exposes just a little bit of metal, but that exposed metal is right where your continuity tester leads will rest.
Step 5: Solder in New Ground Leads
The most convenient place I found on my circuit was the ground post of one of the shoulder buttons above the trigger. It was a through-hole component and was attached to the same ground as the A-B-X-Y button array, which was exactly what I was looking for.
Step 6: Solder in New Positive Lead
Select a length of wire. It should be at least long enough to reach from the via to the edge of the controller, and then from the edge of the controller to where you want your new button. Give yourself some slack because you may need to route the wire around obstacles that won't become apparent until you're trying to put the controller shell back together.
Strip off a small amount of sheath from a solid core wire. If the core is bigger than the hole in the via, use a small file to remove some material. You can also try crimping the wire with pliers, deforming the tip so it is of a smaller diameter. Not much of the wire is going to fit down into the via (not even a millimeter), so just do this to the very tip. Decreasing the diameter of the wire any more than you have to will weaken it and make it prone to breakage. Using a wire with an appropriately sized core is preferred, but may be hard to come by. Alternately, you can try using a multi-strand core wire and slightly trim back all but one wire before tinning the end.
Bend the very tip of your wire at a 90 degree angle.
Scrape off the protective coating from the via (it is possible to solder without doing this, as a hot iron will just sort of burn the coating off, but I see better results with a clean start). Apply a dab of soldering flux to the via. Tin your soldering iron and immediately tap the via. A small amount of solder should fuse to the via and remain there when you pull the iron away. This is similar to what you do when preparing to solder surface mount components to a circuit board.
Once there is some solder on the via, place the tip of your wire over the via and press down lightly on it with your soldering iron. The goal is to have the wire melt through the solder on the via and have the bent tip if the wire settle down into the hole of the via. Once the wire is properly seated, remove the iron from the solder joint, leaving the wire in place.
You shouldn't have the iron in contact with the board for more than two seconds or you risk burning components or having the traces disconnect from the board. If you aren't getting the wire to seat during an attempt, pull the wire and soldering iron away from the via and let things cool back down before trying again.
Once you've soldered the positive lead, you should prevent it from getting pulled out of place by gluing it to the circuit board. It's a little hard to see, but in the picture I've used hot glue to secure the wire to the board. There are actually two leads in that blob of glue since I was adding both an 'A' and a 'B' button to the controller, but I pulled one up out of the way so as to not clutter up the picture. If you want to add multiple buttons, it's better to do them all at once since you run the risk of damaging old work if you keep opening the controller, poking around and tugging on wires.
At this point you can connect your controller to your system for a quality check. The positive and negative leads should not yet be connected to your button, but you can tap their ends together to simulate a button press (like you see people do in the movies when they hot-wire a car) . If you don't get any results by touching the ends of the wires together, you can narrow down the problem by tapping the loose end of the ground lead to the positive side of the button itself, and by tapping the loose end of the positive lead on the ground side of the button. If one of those actions does not register as a button click then your soldering job on that lead needs to be inspected and reworked.
Step 7: Cut a Hole in the Shell for the New Wires
1. Cut a notch in the shell where the two halves meet. Put the circuit board back into the bottom half of the shell and thread the wires from their solder points to the notch you've cut. You'll have to avoid any spots where the wires will get pinched, which will damage the plastic sheathing and possibly cause a short, which could destroy your controller by applying voltages to sensitive areas. The advantage here is that you can open the shell of the controller and remove the circuit board if needed after you've installed the buttons. The disadvantage is you have long wires cluttering up both the inside and outside of your controller, since you'll have to run the wires along the outside of the shell to where the buttons are positioned.
2. Drill a hole in the bottom of the controller shell near where the final position of the buttons will be and run the wires through that hole to the outside of the controller. This cuts down on the extra wires hanging all over the place, but you run into problems once you've soldered the new buttons to the end of the wires. The button will be too large to fit through the small hole you made for the wires, so depending on how much slack you left, you may not be able to remove the circuit board from the bottom shell once you have completed this mod. You can alleviate this downfall somewhat by using matching male and female headers to create a plug of sorts that you can use to disconnect the button from the board if you ever need to disassemble the controller again.
In the picture you see that I cut a single hole and pulled three wires through it. That got pretty crowded, especially since I cut the wires so they would just poke through the shell. I did it that way on purpose so I could change which external button triggered which internal button, but don't recommend it. Drilling a hole next to each button position would be my top recommendation.
Step 8: Attach the New Button
Solder your button directly to the wires, or attach it using header pins if you prefer to go that route. The header pins are an added complication, but well worth the effort in my opinion.
Try to judge where where you would like to have your new button located depending on which finger you want to use (middle finger, pinky finger, palm, whatever).
Take some plasti-tac, or any other removable adhesive putty and stick your button to the shell at the position you chose.
Press the button repeatedly. Does it feel ok? Will it give you a cramp? Carpel tunnel syndrome? You may find that what you thought was a great position really isn't. Sometimes you don't have the leverage that you thought you would. Adjust its position until you really like where it sits.
Play a couple games to make sure the position is good and that the solder joints are all conducting well.
Step 9: Finish Up
Take careful note of where your button is on the controller. Pull the button off and clean off all the plasti-tac you used while fine-tuning the button position.
Put a small amount of hot glue on the shell at the final position of the button and press the button into it. Double-check that everything is still comfortable. Now is the last time that changing the position will be an easy thing.
Add additional hot glue around the outside edge of the button to really keep it in place.
I find it much more comfortable to build up the glue to the top level of the button housing in order to cushion the sometimes sharp edges and corners. Something like sugru or instamorph would let you make a custom grip to go along with your new button. This really makes a huge difference in comfort.
Covering the exposed solder joints on the button also helps prevent zapping the innards of your controller with static electricity since we've basically taken some of the delicate innards and exposed them to the world.