It may be in the size of the P versus how different the encoder values are.
Make sure both encoders are going up and down in the same direction. If one is going lower while the other is going up you will always be off.
Second obvious one is make sure both 393 motors are geared inside the same way. Can’t tell you how many times I’ve seen that one. Face palm ensues shortly after realizing this one.
OK, now assuming it’s all OK, let’s look at the code and how you adjust things. you can make it more proportional by adjusting that 0.25 value to increase or decrease the motor speeds.
Do you know how far off the values are in the encoders as you detect it being off? That will help bound your problem set. Print the difference off some place (robot C user so not sure how to do that in easy C).
The quad encoder goes 360 ticks per revolution (even though the product page docs still say 90). I don’t know the gearing you have but I will assume it is a 12 tooth on a linear track. If the one gear is off by 10 degrees should be 10 ticks which would only cause 2.5 in your float to adjust. That may be too small. But without knowing how far off your counts are I can’t really say.
If your encoder is measuring the big gear, you don’t have the precision as nice as you could.
Next, the differences in motor speed your are adjusting are at the upper/lower ranges of the motor control which don’t really change the motor speed that much.
Look at this older post to see how the power given is not necessarily linear to the speed of the motor. So just adjusting from 110 to 108 may not get you much difference in actual motor speed.
So playing with your constant of 0.25 may help get more dramatic results. Or you may be over-adjusting a bit already.
Knowing the limit of how far off from 127 helps too. You have a play of 17 in the code right now if you start at 110. 17*4 = 68 which means a 68 degree difference maxes out the one motor and a 440 degree difference (1.22 revolutions) on the downside before you hit 0 and start revving backwards for a while more. Is 68 degrees on a tiny 12 tooth gear too little? (hard to say without looking at actual differences)
Lastly, you did not mention the lift type but I will assume a scissor lift. Small variations down below on the lift lead to wild differences up top. Sometimes, the lift points are exactly the same and you still can get a leaning scissor. So it may not be code correctable as there are friction points somewhere in the scissor making it not lift the same left/right.
Physical left right metal and a sync shaft between motors helps there and can eliminate the need for software based control all together since it is so rigid.