The most important thing to make a good digital design is not about minimum amount of logic gates or the simplest function. The me, the most effort is to make sure the timing is correct. Making sure the setup and hold time is met for any memory, latch or flip-flop etc. So many unstable designs are due to violation of timing. This is important in FPGA programming. Face it, writing those program is so easy, just like writing any of the software programming. The trick is to write in the timing so you guaranty by design you don't produce glitches, violation of timing.
Another important thing is to make sure you don't have glitches in the logic when different inputs transition to a new state. For example if two input of an AND gate where one goes from 1 to 0 while and other goes from 0 to 1. In the ideal world, the output stays 0 before and after the transition. But in real life you can have a glitch where the second input transition to 1 before the first input transition to 0. If you use this to clock a latch, a memory etc, you might clock in garbage.
I was pretty much force into learning how to program FPGAs because the supposed expert in FPGA screwed up. The system was intermittent for the longest time.
Learn how to draw timing diagram and draw timing diagram on all the design, take into consideration of the minimum and maximum delay variation and make sure you get enough setup and hold time, minimum cycle time etc.
With this care, I yet to have any intermittent designs yet. I used to test my processor boards, embedded board with FPGAs with heat gun, freeze spray, rubbing moist hand at the back of the board to give variations and proof it work perfect. A good design is to get the job done reliably, not the one with the fewest components. My design time is about 25% design and 75% checking timing requirement. It is boring, nothing exciting like designing circuit, but that's the price to pay to avoid trouble later.
That was the reason my test for any EE applicant contain one timing diagram drawing...nothing complicated, just a D-FF as divided by two and qualified with a second D-FF. Given the initial condition and start clocking. You'll be surprise how many cannot do it.