A common complaint and a very large current balance issue is how the Tactical battles play out.
Problem: Champions do not scale well compared to rather mundane squads. Getting them "up to par" requires spending a LOT of gold at the shop, and even then they'll typically die in one hit.
Problem: Unit stacks are terrifying. You can get a unit with tons of health, tons of damage, tons of defense for... about 100 gilder, a few dozen materials and maybe half a dozen metal. A decent sum, yes, but nothing can really stop this except a similar unit.
Problem: Attacking is heavily favored because of how counter-attacks work
Proposed Reworks (in order of complexity):
First, increase the starting default HP for Peasants from 5 to 8. Increase the default starting hp for Champions from 10 to 20. Increase the default hp for Sovereigns from 10 to 25. The reason for this is that it becomes moderately more difficult to one-shot units (making counter-attacks and defense more viable). Increasing the Champion and Sovereign HP also makes them more difficult to one-shot (especially since Champions and Sovereigns are primary-targets for enemy archers and spell casters).
Second, rework how Champions/Sovereigns level. Each time they level, they gain 1 point in Dex, Str, Intelligence, Essence/Wisdom, Charisma. 2 points in Constitution. .25 points in Combat Speed. 0 in Movement Speed (because of Organized). Then they get to spend their 1 point however they please. This makes Champions stay somewhat in-the-game with an appropriate amount of leveling up, while still allowing you to specialize them how you please.
Third, make squads do less damage INSTANTLY as they lose models. If a group of 3 peasants loses a third of its hp (and therefore, one model) then it should only do 2/3rds of the attack and have 2/3rds of the defense. This should not apply to Champions or any one-unit summons/monsters/units. This is one of the benefits of a Champion. Assuming equal attack and defense powers on each side, the army with Champions will be able to do more damage for longer.
Fourth, rather than a unit squad having a MASSIVE single attack value, make it roll multiple smaller ones. Eg, a group of 3 peasants rolls 3 rolls of 3 rather than one roll of 9. This makes defense much more vital (if you have 4 defense it will be applied against each roll, making it quite valuable). Consider the situation where a COMPANY of 12 peasants with clubs attack a decent Sovereign.
Peasants (currently): 60 HP. 36 Atk. 0 Def.
Sov (make believe, current system): 20 HP, 30 Atk. 7 Def.
In this situation, the Peasants would roll from 0-36 minus 0-7. This has a VERY VERY high chance in one-shotting the enemy Sov (which isn't that weak, mind you, either). That is a serious problem.
Changing it to rolling 12 rolls of 3, then, most likely, the Peasants would do very little damage to the Sov. Maybe 2-3. It would be absurdly unlikely for the Sov to get one-shotted. This is as it should be. Peasants are very low quality units. They should not kill Sovs that have a shred of defense, a decent weapon and combat ability (a Sov who pulled all of their points from Dex, Str, and Con might struggle a bit more against the peasants, obviously).
Under the current game, it is very difficult to get your defense up to 10. Even if you get it that high, it is VERY VERY expensive. However, it is not very difficult to get your attack to 10. So the system would be self-balancing. Note that a lot of the high-level monsters with very high defense would need to be brought down to a comparable level, and have their HP buffed instead. Also note that in this system, defense would not stack either. Eg, if you put a unit with 4 defense, it will only roll 4 defense from attacks. Not 4 x 12 == 48
Between the slight HP buff before and the reworking of attacking here, it should be rather difficult to one-shot units which makes counter-attacks much more of a risk
Consider the following situation:
Soldiers (using old-style damage stacking, 3 models): 3x5 HP. 3x10 Atk. 0 Def.
Soldiers (doing a more balanced build, 3 models): 3x5 HP. 3x6 Atk. 4 Def.
Old-way: the attackers would roll 0-30 minus 0-12. This would "average" to 15-6==9 damage.
New-way: The attackers would roll 3 rolls of 0-10 minus 0-4. This would "average" to 5 - 2 x3 == 9 damage.
=== the exact same. In this situation, the defender would retaliate with 2 rolls of attack (since one model was dead. See point 3 above)
However, this naturally pulls damage into a nice bell curve (Statistics). Repeated samples bring the result closer to the expected (9 damage). The current flat distribution means that what would become "outliers" (like rolling a 30, which would used to be 1/31 but is now 1/11 * 1/11 * 1/11 == 1/1331). This makes combat more predictable and less inclined to absurd damage rolls (either way).
Fifth, change the rolls themselves to operate on a bell curve. To do this, Halve ALL attack and defense values. All of 'em.
Instead of rolling for defense, roll 100 each time (1-100). If they roll between a 16 and an 84, then it does the expected damage. If it does between 4 and 15, then it does half damage. If it does between 85 and 97, it does 1.5x damage. If it does between 1 and 3, it does quarter damage. If it does between 98 and 100, then it does double damage.
That's just doing it a very very simple way. You could do it using a proper bell curve and running the numbers (perhaps doing a look-up on a table. The math for it would be damage % == cumulative distribution function for the roll, which could be pre-populated. Then you could have it round-down to the integer).
This would also round out the combat system, making it much more predictable and letting proper strategy work rather than "find big attack, right click, cross fingers and hope for the best".
Sixth, introduce variety when spawning units. Battle for Wesnoth does this awesomely. Whenever you build a unit, there are six traits, 2 of which are chosen:
Swift - +1 movement speed
Intelligent - 30% less XP required to level up
Strong - +1 damage (melee)
Dextrous - +1 damage (ranged)
Resiliant - +5 HP
Fearless - do not have negative modifiers during wrong time of day
Having similar traits on your units while built will make tactical combat much more exciting, since it introduces diversity. In general, tactical combat needs MORE diversity. More special attacks, more variables, more variety. More, more, more
Seventh (though this is really simple), the changes of Morale need to be increased by 300% to 500% (not the effects of Morale, mind you ... whatever the hell it does). Rarely do I see morale drop below 40 or above 60. That is bad. The purpose of Morale, I think, is to prevent a weak army that would lose in a fair fight from running around in circles forever (in multiplayer). Right now, it doesn't do that.
Furthermore, I would make it when you hit 10 Morale, the "low-morale" side gets +1 movement and the "high-morale" side gets +2 Attack. The high movement allows a low-morale army to force-attack a fast army that is picking away at it slowly, then tear it up. (Imagine a 200 HP super-lizard unit with only 1 Combat speed, 100 attack, but 0 def against 2 swift archers with 10 HP, 5 attack but 3 Combat Speed... the lizard unit is clearly "stronger" but will never win against a good player. The movement speed for Morale gives the lizard unit a bit of a chance but they would still (probably) lose because the lizard would chase one archer who would run away while the other shot).
It also lets a losing army retreat off the tactical map easier, and the winning army pick off units as they do so (a good mechanic!).
Finally, the AI just needs to be improved. It's very simplistic right now and rarely makes proper choices.