I designed couple of vocoder encoders. Vocoders are devices that encode sound by chopping it up by frequency bands and express each frequency band only by its amplitude. This kind of representation allows to mix all the frequency bands with each other. This have been used as a method of speech encryption in the past. I build one part of the system - relay board that took analog voltages and mixed them up with each other to provide encoding/decoding.
Board itself had 12 inputs and 12 outputs. To switch the combinations between them there was 144 FRA3C-DC12 open case relays and indicator LEDs. 144 relays are needed because every channel has to have the ability to switch to every output. There would probably be smaller relays or even smaller solid state solution. But this went to an art installation it had to have relay clicking sound and see-through/open relays so user would see the movement happening. To drive all of these relays I used driver chips and for communication with central controller - a circuit with nrf24l01 chip. For communication I had to put the chip on the board because there was no good RF modules with external antennas available. External antenna was needed to reach out of the metal case it was mounted in.
First version of the board used TLC5940 LED drivers to drive the relays. Relays were rated 100mA @ 12V so I put in current limiting resistors to limit TLC current to 120 mA, just to be safe. Control circuit had Atmega168 with Arduino bootloader. Board was manufactured from 2 layer 1.6 mm FR4. After building it up problems started to appear. The code was working well and radio links were working, but switching wasn't so reliable. It turned out that led drivers with current limit at 120 mA couldn't switch some of the relays. Switching current was probably higher than 120 mA, combine that with 288 different relays that I had and some of them were bound to be a little out of spec. Secondly - the voltage regulator couldn't handle all the power needed from 5V rail. Every LED driver used tens of mA from the rail and since I had 9 of them - it added up to too much.
Final problem - that finally killed the board - was mechanical in nature. Board - with the size of about A4 paper, had about 1.3 kg of relays on it. When taking the PCB from the sides and rising it up from the table to move it to next one - you could hear copper tracks braking apart. Each move destroyed some tracks. Shipping with courier probably broke tens. When LEDs and relays didn't light up because of that I subsidized failing tracks with wires. But in the end, it was all wires and all broken.
Since there was still need for a working board I designed a new board. It had the same relays, LEDs and control circuit. I used industrial hot air gun to desolder all 288 relays from the old board. But I used new driver chips - TPL9202 8 channel relay drivers. These were rated at 200 mA, which gave me a 100 mA of safe zone. And testing showed no problems. They were 8 channel so I needed 18 of them per board, but no big deal. I also moved control circuitry to a separate add-on board to make the design more modular and easier to debug. To drive all the SPI slave select pins I used CD54HC154 4- to 16-line decoder chip. Voltage regulator issue also fixed itself - the motor controllers had their own 5V regulators built in so I just took one of those 5V lines and used it to power control circuit.
For mechanical stability - many changes were made. All the tracks going to relays were as wide as possible. I used as big teardrops for all through hole components. Also - to make soldering easier I had red LEDs with 12V rating. This how I didn't need to solder 288 small SMD resistors that could potentially fail. But the most important mechanical difference - I went to 2.4 mm thick PCB. There were some weird problems with it - like through hole headers didn't want to reach through. But the mechanical strength that came with it - amazing.
All source files are free and available. PCB design was done in Altium Designer, code with Arduino IDE.