Best practices for electronic circuit designs for controllers with backplanes (PCB layers, decoupling, filtering, etc.)
This is a very broad question, but I think the part

what has worked great for you or has made a huge difference (whatever tiny the change)

is interesting. Please note I work in a company. Not everything is applicable for one-off projects. Anyway, here are some things I have learned (usually the hard way):

If the MCU has it, connect the reset signal and make it available somewhere. I have it on my programming connector and it saved few &quot;bricked&quot; STM32 MCUs.
Use one type of programming connector for all your boards (or boards type/MCU types) if possible. It reduces the number of cables you have to take with you if &quot;something somewhere is not working&quot;.
Create a naming convention for signals right away and use it. I used to name signal after the thing they were supposed to control (such as VENTILATOR_ENABLE) but new features and design changes caused my VENTILATOR_ENABLE signal to control a lamp which was confusing. Now I name signals after what they really are (DO_1 for digital output 1) and I link it to the specific thing in my program.
Always check the BOOT pins (are there any, are you connecting it correctly). One time I left it floating and dealt with random MCU resets for few hours.
Use the recommended decoupling for all chips (check datasheet). If there is no info, I use 0.1uF on every power line. Place it as close as possible. Check capacitor max. voltage ratings.
Check how to deal with unused &quot;battery&quot; MCU pins.
UART RX/TX signal. TX connects to RX and vice versa. Triple check it. Also check your SPI signal connections. Do not forget pull-ups on I2C lines. Do not rely on the internal ones.
If making a 2-layer PCB, your bottom layer should be just GND plane with no slots/traces. Take your time with routing on the top layer, add via stitching and pour GND on top layer as well. Position your parts wisely. If the design is doable on 2-layer PCB but I know I have a limited time, budget is not that tight or I am expecting a lot of changes, I go for at least 4 layer PCB.
Write a name and version of your PCB on silkscreen, make it large and place it somewhere visible (service technician will love you).
Make a 3D model of your PCB before first prototype. It will show connectors backwards, heatsinks colliding with parts etc. I really like to use connectors/mechanical parts from Würth Elektronik. They have 3D models and CAD footprints for almost all parts. I can also order samples and they usually pack yummy gummy bears with it.
Check MCU pins reset values. Some pins are pulled high internally (for example unused-JTAG pins) or left floating (for example DAC pins). You probably want to set them to a defined value with pull up/down resistors. I had one motor starting everytime I was loading a new program. Embarrassing and dangerous!
After a few burned DC/DC supplies I add polarity protection where applicable.
I like to have at least 2 debug diodes (if the space allows it). One is connected to 3.3V/5V (power ON, no short-circuit) and the second one blinks (program is running). It is cheap and it helps with basic debugging. You can always not-assemble them in production.
Check our mounting holes. You usually want some. Check in with mechanical construction department (size, position).
Add fiducial markers for assembly (if your are using SMD parts). I add one in every corner and some close to SMD fine pitch parts. Check with your assembly service.