Tower defenses are a pretty basic formula, and while this doesn't add much to the formula, there are plenty of shortcomings with the basic implementation.
The biggest issue here is that there's no way to see the actual speed and damage of a tower, or how those stats change as upgrades are applied. My first time trying the game I didn't upgrade the towers and was frustrated by not being able to kill anything. Then, after buying one tower and dumping 2-3 upgrades in it, I saw that I started killing enemies in one hit. I still don't really understand the functional difference between the three tower types, as pepperoni is strong enough to kill enemies on its own, negating the need to buy other towers except for getting the relevant medals (which are currently broken.)
Aside from essential information not being available to the player, my next biggest complaint is that the game freezes a little bit when an enemy spawns in, probably because it's running a pathfinding algorithm. There's no reason to do this for every enemy; run the algorithm once at the start of the wave and reuse it for all of the enemies that spawn in. Alternatively, bake the paths into the game instead of making the towers and enemies occupy the same game space. The way it's done now is really boring because you can just use the towers to create a winding path - and if you don't, enemies just go straight to the right and then down.
Graphics and music are unremarkable.