One of the reasons the game was unchallenging for my players is I let them roll 4d6k3 for their stats, hence most of them having 1 or 2 stats at 20 as soon as they hit the 4th level.
What I feel was unbalanced is the disparity between the PC's attack bonuses, spell DC's and saving throws versus those of the creatures they were fighting, leading to combats where foes were more often than not unable to succeed at using their signature abilities.
After a few experimentations, I found a simple and easy walkaround. As soon as the PC's hit the second tier (5th level), I gave a flat bonus to all creatures' Attack rolls, Saving throws and Spell DC's and Ability checks, based on their CR. As for now (PC's just reached lvl 9), I set the bonus at +2 for CR 0-2 and at +3 for CR 3 and up.
So far, that's what worked best for me. Instead of adding more creatures, boosting their HP's or even multiplying the number of encounters to make sure attrition kicks in (solutions which all contributed to make combats longer or more proeminent in an adventure day), I'm having more efficient and more feared foes (my players still talk about that adult dragon with a DC22 breath to save against!).
Goal achieved. Better balance. Faster and more challenging combats.